SAS - 转换/格式化日期时间变量

时间:2014-08-28 15:16:47

标签: datetime formatting timestamp sas

我有一个datetime变量,其格式如下:

 27AUG2014:08:56:26.959136

如何重新格式化它,使其如下所示:

 2014-08-27:08:56:26.959136

2 个答案:

答案 0 :(得分:0)

看起来我找到了解决方案:

data want;
set have;
  format newdt E8601DT26.6;
  newdt=currdt;
  put currdt= newdt=;
run;

答案 1 :(得分:0)

这是我能得到的最接近的 - 从技术上讲,它们不是格式,它们会将值更改为字符串,因此这可能不符合您的要求。看起来好像图片格式指令缺少毫秒的指令,所以使用自定义格式只会让你到目前为止。

proc format;
  picture test low-high = '%Y-%0m-%0d:%0H:%0M:%0S' (datatype = datetime) ;
run ;


data x;
  * THIS GETS US EVERYTHING EXCEPT THE DECIMAL PLACE;
  x = datetime();  
  put x= 22.5;
  put x= datetime22.5;
  put x= test.;

  * TO GET THE DECIMAL THERES A BIT OF MUCKING AROUND;
  * SIMPLY CONCATENATE THE DECIMAL ONWARDS TO THE FORMATTED VALUE;
  length y decimal_as_string $30;
  decimal_as_string = cats(put(x,22.5));

  y = cats(  put(x,test.), 
             substr(decimal_as_string, index(decimal_as_string,'.'))
           );

  put y=;
run;

以下是图片格式工作原理的链接:

http://www2.sas.com/proceedings/forum2007/026-2007.pdf

修改

实际上,使用@ user2941280的格式让我们更接近,更快。这样就可以了:

data _null;
  length my_date $30; 
  my_date = translate(put(datetime(),E8601DT26.6),':','T');
  put my_date=;
run;