以下是我如何输入和使用日期作为宏变量:
%let x = %SYSEVALF('01jan2012'd);
%put &x; *see the date as sas sees it;
%put %SYSFUNC(putn(&x,yymmn.)); *see the date as yyyymm;
这很棒,但我已经厌倦了以'01jan2012'd
输入日期。在特殊情况下,我可能希望将日期作为宏变量y
传递,其中y
的格式为yyyymmdd
,如下所示:
%let y = 20120101;
%let x = %SYSEVALF(&y);
当然,这不起作用。因此,给定y
,我应该使用什么而不是%let x = %SYSEVALF(&y);
将x
作为日期的宏变量,因为sas看到日期?
答案 0 :(得分:5)
首先关闭:如果您手动输入,使用SAS约定。输入'01JAN2012'd。它比YYYYMMDD值的读取速度更快,而且无论如何它都是其他SAS程序员所期望的。
第二:在任何一种情况下我都不会使用%SYSEVALF()。 %let x ='01JAN2012'd;几乎在每种情况下都足够了,而且如果不是那么你可能会以低效或标准的方式做某事。除非你打算在某处使用18993文本(在这种情况下,好的,你可以使用它)'01JAN2012'd是将它存储在宏变量中的正确方法 - 让SAS稍后将其转换为18993。
最后:
%let y=20120101;
%let x=%sysfunc(inputn(&y,YYMMDD8.));
是做你问的最简单的方法。
答案 1 :(得分:0)
data _null_;
Call Symput('NAME',put(today()-1,yymmdd10.));
run;
您只需将NAME更改为宏名称,然后像往常一样通过& NAME调用它来重命名代码
我希望这会有所帮助 - 或者只是输入该表格中的日期
input(put(DATE,8.), yymmdd8.) AS DATENAME format=ddMMYY10.