1

我正在尝试将每个月提取调查样本的代码转移到 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”。

有人可以帮忙吗?

谢谢!

4

1 回答 1

2

宏变量包含文本。

您已将其设置为看起来像 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));
于 2021-11-15T17:54:14.880 回答