Sas 在文件名中包含宏
在SAS中,我喜欢创建一个动态文件名,因为我在每日选项卡上浏览数据 我尝试在文件名中包含宏,如下所示:Sas 在文件名中包含宏,sas,Sas,在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
%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';
您需要使用%sysfunc()和%eval()宏函数来计算数据步骤之外的数据步骤函数。正如乔所说:
%let date=%sysfunc(putn(%eval(%sysfunc(today())-3),ddmmyyn6.));
然后您需要将%
更改为&
filename nlp "DailyB.DG&date";
如果需要宏变量解析函数,则需要
%sysfunc
。这里有一种方法
%let date=%sysfunc(putn(%eval(%sysfunc(today())-3),ddmmyyn6.)); *This is equal to todays date-3 (format = 190317);
%put &=date;
第一个%sysfunc
要求获得today()
的结果,第二个要求格式化结果<代码>%eval需要从值中减去3,正如@Quentin在注释中指出的那样
或者,如果您对数据步骤比较熟悉,callsymputx
也可以在这里工作
data _null_;
call symputx('date',put(today()-3,ddmmyyn6.));
run;
%put &=date;
因此,您当前尝试的结果将是一个filename语句,如
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个字符,这样您就可以包含世纪。此外,如果您对日期字符串使用年、月、日顺序,则生成的文件名将按正确的日期顺序排序,还可以防止用户将哥伦布日与杜威十进制日混淆。我认为这还不够。应该需要%sysfunc。可能是%sysfunc(今天()-3,ddmmyy6.)。不知道这是否有效,或者需要%eval(今天()-3)。
%eval()
不需要。像PUTN()这样的SAS函数可以将表达式作为参数。