我正在尝试将SAS宏变量转换为时间戳并在转换时难以接受。我正在使用的代码如下所示。
%let date = '03/15/2013';
%put %sysfunc(inputn(&date,datetime26.6));
我得到的错误是
警告:参数1用于由%SYSFUNC或。引用的INPUTN %QSYSFUNC宏功能超出范围。注意:数学 在%SYSFUNC函数执行期间无法执行操作。 操作的结果已经设定 失踪的价值。
如果有人知道答案,请告诉我。
答案 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;