以下是我如何输入和使用日期作为宏变量:
%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 看到的日期一样?
最佳答案
首先:如果您手动输入它们,请使用 SAS 约定。输入“01JAN2012”。其一,它比 YYYYMMDD 值的可读性更快,而且无论如何,它都是其他 SAS 程序员所期望的。
第二:在任何一种情况下我都不会使用 %SYSEVALF() 。 %let x='01JAN2012'd;几乎在所有情况下都足够了,如果不是,那么你可能会以效率较低或标准的方式做某事。除非您打算在文本中的某处使用 18993(在这种情况下,好吧,您可以使用它),“01JAN2012”是将其存储在宏变量中的正确方法 - 让 SAS 稍后将其转换为 18993。
最后:
%let y=20120101;
%let x=%sysfunc(inputn(&y,YYMMDD8.));
是实现您所要求的最简单的方法。
关于sas 输入宏日期,写为 yyyymmdd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25730079/