在文件名

时间:2017-03-22 13:08:30

标签: 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) 因此,如果我在200317之后的第二天运行代码。

然后应该将变量放入代码中,以便我得到以下内容:

 filename nlp 'DailyB.DG190317';

3 个答案:

答案 0 :(得分:1)

如果您想要宏变量来解析函数,则需要%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在评论中指出的那样。

或者,如果您在数据步骤中感觉更舒服,call symputx可以在这里工作。

data _null_;
  call symputx('date',put(today()-3,ddmmyyn6.));
run;
%put &=date;

答案 1 :(得分:0)

您需要使用%sysfunc()和%eval()宏函数来评估Data Step之外的Data Step函数。正如乔所说:

%let date=%sysfunc(putn(%eval(%sysfunc(today())-3),ddmmyyn6.));

然后,您需要将%更改为&

filename nlp "DailyB.DG&date"; 

答案 2 :(得分:0)

所以你目前尝试的最终会得到像

这样的文件名
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个字符作为名称的日期部分,以便包含世纪。此外,如果您使用日期字符串的年,月,日顺序,则生成的文件名将按正确的日期顺序排序,并且还会阻止用户将哥伦布日置于杜威十进制日期。