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_×tamp._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));
我正在尝试将每个月提取调查样本的代码转移到 cronjob 中,但我在自动化代码方面遇到的最后一步是 proc 导出步骤中的文件名。
我在代码开头定义了以下宏变量:
%let today = date();
%let month = month(today);
%let year = year(today);
在我从数据库中提取数据并适当过滤后,我有一个代码可以将文件输出为竖线分隔的 .txt 文件。此文件格式很重要,需要保留:
proc export data=mkt.project_×tamp._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));