首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在文件名中包括宏

在文件名中包括宏
EN

Stack Overflow用户
提问于 2017-03-22 13:08:29
回答 3查看 292关注 0票数 0

在SAS中,我喜欢创建一个动态文件名,因为我是在每日表格上浏览我的数据。

我试图在文件名中包括一个宏,如下所示:

代码语言:javascript
复制
%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。

然后将变量放入代码中,这样我就可以得到以下内容:

代码语言:javascript
复制
 filename nlp 'DailyB.DG190317';
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-22 14:18:52

如果要使用宏变量解析函数,则需要%sysfunc。有一种方法可以做到。

代码语言:javascript
复制
%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将在这里工作。

代码语言:javascript
复制
data _null_;
  call symputx('date',put(today()-3,ddmmyyn6.));
run;
%put &=date;
票数 1
EN

Stack Overflow用户

发布于 2017-03-22 13:37:04

您需要使用%sysfunc()和%eval()宏函数来计算数据步骤之外的数据步骤函数。正如乔所说:

代码语言:javascript
复制
%let date=%sysfunc(putn(%eval(%sysfunc(today())-3),ddmmyyn6.));

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

代码语言:javascript
复制
filename nlp "DailyB.DG&date"; 
票数 0
EN

Stack Overflow用户

发布于 2017-03-22 14:20:16

因此,您当前尝试的结果将是一个文件名语句,如

代码语言:javascript
复制
filename nlp "DailyB.DGinput(put(today()-3,ddmmyy6.),6.)"; 

要在宏代码中运行函数,需要使用%SYSFUNC()。您还需要使用PUTN()函数,因为PUT()函数不适用于%SYSFUNC()

代码语言:javascript
复制
%let date=%sysfunc(putn(%sysfunc(today())-3,ddmmyyn6));
filename nlp "DailyB.DG&date"; 

如果您可以更改进程,我建议在名称的日期部分使用8个字符,以便包含世纪。此外,如果您对日期字符串使用年份、月份、日顺序,则生成的文件名将按正确的日期顺序排序,并防止用户混淆杜威十进制系统日的哥伦布日。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42952574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档