如何在 SAS 中创建日期时间宏变量

时间:2021-06-16 11:55:19

标签: sas

%let mydate = "01JUN2021 00:00:00.000"dt;

这不起作用。如何在不使用 proc sqldata 步骤的情况下创建日期时间宏变量?

3 个答案:

答案 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 会在您尝试使用该值时感到困惑,并且无法将文字转换为数字日期值。

相关问题