在SAS中,我喜欢创建一个动态文件名,因为我是在每日表格上浏览我的数据。
我试图在文件名中包括一个宏,如下所示:
%let date=input(put(today()-3,ddmmyy6.),6.); *This is equal to todays date-3 (format = 190317)
filename nlp "DailyB.DG%date"; 它不管用,你能帮我吗?
为了获得我喜欢做什么的直觉,我已经发布了下面的一个例子,我希望有一个日期-3天后,以这种格式:DDMMYY (190317),所以如果我运行代码的第二天,它将是200317。
然后将变量放入代码中,这样我就可以得到以下内容:
filename nlp 'DailyB.DG190317';发布于 2017-03-22 14:18:52
如果要使用宏变量解析函数,则需要%sysfunc。有一种方法可以做到。
%let date=%sysfunc(putn(%eval(%sysfunc(today())-3),ddmmyyn6.)); *This is equal to todays date-3 (format = 190317);
%put &=date;第一个%sysfunc请求today()的结果,第二个请求对结果进行格式化。正如@Quentin在注释中指出的那样,需要%eval从值中减去3。
或者,如果您在数据步骤中更舒服,call symputx将在这里工作。
data _null_;
call symputx('date',put(today()-3,ddmmyyn6.));
run;
%put &=date;发布于 2017-03-22 13:37:04
您需要使用%sysfunc()和%eval()宏函数来计算数据步骤之外的数据步骤函数。正如乔所说:
%let date=%sysfunc(putn(%eval(%sysfunc(today())-3),ddmmyyn6.));然后,您需要将%更改为&
filename nlp "DailyB.DG&date"; 发布于 2017-03-22 14:20:16
因此,您当前尝试的结果将是一个文件名语句,如
filename nlp "DailyB.DGinput(put(today()-3,ddmmyy6.),6.)"; 要在宏代码中运行函数,需要使用%SYSFUNC()。您还需要使用PUTN()函数,因为PUT()函数不适用于%SYSFUNC()。
%let date=%sysfunc(putn(%sysfunc(today())-3,ddmmyyn6));
filename nlp "DailyB.DG&date"; 如果您可以更改进程,我建议在名称的日期部分使用8个字符,以便包含世纪。此外,如果您对日期字符串使用年份、月份、日顺序,则生成的文件名将按正确的日期顺序排序,并防止用户混淆杜威十进制系统日的哥伦布日。
https://stackoverflow.com/questions/42952574
复制相似问题