将SAS宏变量转换为时间戳

时间:2013-09-04 13:35:06

标签: date macros timestamp sas

我正在尝试将SAS宏变量转换为时间戳并在转换时难以接受。我正在使用的代码如下所示。

%let date = '03/15/2013';
%put %sysfunc(inputn(&date,datetime26.6));

我得到的错误是

  

警告:参数1用于由%SYSFUNC或。引用的INPUTN   %QSYSFUNC宏功能超出范围。注意:数学   在%SYSFUNC函数执行期间无法执行操作。   操作的结果已经设定         失踪的价值。

如果有人知道答案,请告诉我。

3 个答案:

答案 0 :(得分:3)

这不是DATETIME,即DATE格式(对INPUT,取决于传入数据,而不是传出)。您还需要删除引号,SYSFUNC将引号视为字符,而不是字符串分隔符。

%let date = 03/15/2013;
%put %sysfunc(inputn(&date,MMDDYY10.));

要实际创建日期时间,您需要使用PUT:

%let date = 03/15/2013;
%put %sysfunc(putn(%sysfunc(dhms(%sysfunc(inputn(&date,MMDDYY10.)),0,0,0)),datetime26.));

但是,如果可以的话,更好的方法是使用日期常量...

%let date=15MAR2013;
%put "&date."d;

答案 1 :(得分:2)

乔大概是正确的。如果您想要日期时间字符串为2013年3月15日午夜,请使用

%let date = 03/15/2013;
%put %sysfunc(putn(%sysfunc(dhms(%sysfunc(inputn(&date,MMDDYY10.)),0,0,0)),datetime26.));

在日期字符串上使用PUTN将日期“转换”为日期时间会将纪元(01JAN1960)的天数转换为纪元的秒数​​。

答案 2 :(得分:2)

我在宏变量中使用日期的偏好是将实际数值存储在宏变量中,如果我需要查看/打印格式化的值,则可以动态地为其指定格式:

%let date = %sysfunc(mdy(3,15,2013));
%put %sysfunc(putn(&date,date9.));

这允许你在下面的比较中使用它(我发现这是最常见的任务):

data xx;
  set something;
  where datefield = &date;
run;