以下是我输入和使用日期作为宏变量的方法:
%let x = %SYSEVALF('01jan2012'd);
%put &x; *see the date as sas sees it;
%put %SYSFUNC(putn(&x,yymmn.)); *see the date as yyyymm;
Run Code Online (Sandbox Code Playgroud)
这很棒,但我已经厌倦了输入日期'01jan2012'd.在特殊情况下,我可能希望将日期作为宏变量传递y,其中y包含在表单中yyyymmdd,如下所示:
%let y = 20120101;
%let x = %SYSEVALF(&y);
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用.因此,考虑到y,我应该怎么用,而不是%let x = %SYSEVALF(&y);有x作为的SAS看到日期之日起宏变量?
首先:如果您手动输入,请使用SAS约定.输入'01JAN2012'd.它可以比YYYYMMDD值更快地读取,而且无论如何,它都是其他SAS程序员所期望的.
第二:在任何一种情况下我都不会使用%SYSEVALF().%let x ='01JAN2012'd; 几乎在每种情况下都足够了,而且如果不是那么你可能会以低效或标准的方式做某事.除非你打算在某处使用18993文本(在这种情况下,好的,你可以使用它)'01JAN2012'd是将它存储在宏变量中的正确方法 - 让SAS稍后将其转换为18993.
最后:
%let y=20120101;
%let x=%sysfunc(inputn(&y,YYMMDD8.));
Run Code Online (Sandbox Code Playgroud)
做你要求的最简单的方法.