SAS - Proc 导出文件名中的宏变量

SAS - Macro Variable in Proc Export file name

我正在尝试将每个月提取调查样本的代码转移到 cronjob 中,但我在自动化代码方面遇到的最后一步是 proc 导出步骤中的文件名。

我在代码开头定义了以下宏变量:

%let today = date();
%let month = month(today);
%let year = year(today);

在我从数据库中提取数据并适当过滤后,我有一个代码可以将文件输出为竖线分隔的 .txt 文件。此文件格式很重要,需要保留:

proc export data=mkt.project_&timestamp._group
     outfile="/filepath/project_&year.&month._group" dbms=dlm Replace; 
delimiter='|';
run;

然而,文件输出名称不识别宏变量,因此它没有获取年月,而是将它们命名为“project_&year.&month._group”。

有人可以帮忙吗?

谢谢!

宏变量包含文本。

您已将您的字符串设置为看起来像 SAS 函数调用的文本字符串。但是你没有使用字符串来生成 SAS 代码,而这样的函数调用是有意义的。相反,您将函数调用放入文件名中。

440   %let today = date();
441   %let month = month(today);
442   %let year = year(today);
443   %put "/filepath/project_&year.&month._group";
"/filepath/project_year(today)month(today)_group"

在宏代码中执行 SAS 函数的一种方法是使用宏函数 %sysfunc()。如果要生成 YYYYMM 样式的 6 位字符串,可以使用 YYMMN6。格式。所以你可以像这样生成你的文件名:

 "/filepath/project_%sysfunc(date(),yymmn6.)_group"

或者像这样的其他宏变量:

%let today = %sysfunc(date());
%let month = %sysfunc(month(&today),z2.);
%let year = %sysfunc(year(&today));