%let mydate = "01JUN2021 00:00:00.000"dt;
这不起作用。如何在不使用 proc sql
或 data
步骤的情况下创建日期时间宏变量?
答案 0 :(得分:0)
试试%let mydate = '1Jan2021:0:0:1'dt
请注意,它使用单引号 & 日期和时间之间没有空格
答案 1 :(得分:0)
您发布的宏变量在 SAS 代码中运行良好。
82 %let mydate = "01JUN2021 00:00:00.000"dt;
83
84 data test;
85 now = datetime();
86 then = &mydate;
87 diff = intck('dtday',then ,now);
88 format now then datetime20. ;
89 put (_all_) (=);
90 run;
now=16JUN2021:08:18:33 then=01JUN2021:00:00:00 diff=15
NOTE: The data set WORK.TEST has 1 observations and 3 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
如果您需要在传递 SQL 代码中使用该值,那么您需要将宏变量设置为文本,远程数据库的 SQL 实现会将其识别为日期时间值。
也许是
%let myts = timestamp '2021-06-01 00:00:00.000';
答案 2 :(得分:0)
纯宏解决方案是:
%let mydate = %sysfunc(dhms(%sysfunc(mdy(6,1,2021)), 0, 0, 0));
%put &=mydate; * PRINTS THE UNFORMATTED VALUE STORED;
%put %sysfunc(sum(&mydate), datetime22.); * PRINTS THE DATETIME VALUE FORMATTED;
输出:
MYDATE=1938124800
01JUN2021:00:00:00
如果您更清楚,您当然可以在单独的行中执行 dhms()
和 mdy()
函数。
将此与您的原始代码正在执行的操作进行比较:
%let mydate="01jan2021:00:00:00"dt;
%put &=mydate;
打印:
MYDATE="01jan2021:00:00:00"dt
注意在您的方法中,字符串 "01jan2021:00:00:00"dt
是如何保存到宏变量中的,而不是实际的数字日期值 1938124800
?有时,当您使用您的方法时,SAS 会在您尝试使用该值时感到困惑,并且无法将文字转换为数字日期值。