我有一个SAS宏,我想创建一个数据集名称,然后将该数据集导出到csv文件。
%macro export(outputDataset, prefix, outputFileName);
%let dName = cats(&prefix, test);
%let dName2 = cats(&prefix, test2);
data &outputDataset;
set &dName &dName2;
run;
proc export data=&outputDataset outfile="outputDir/&outputFileName" replace; run;
%mend export;
但是,当我使用
调用宏时%export(retain, hh_dpt, retained.csv)
我收到以下错误:
ERROR: Invalid option name hh_dept.
有谁知道问题可能是什么?谢谢!
答案 0 :(得分:4)
%let dName = cats(&prefix, test);
将字符串cats(hh_dpt, test)
存储到宏变量dName
中。当数据步骤编译时,SAS看到:
data retain
set cats(hh_dept, test) cats(hh_dept, test2);
run;
cats
函数无效使用。您无法使用SAS函数在Data Step set
语句中连接数据集名称。你可以这样纠正:
data retain;
set &prefix.test &prefix.test2;
run;
OR
%let dName = &prefix.test;
%let dName2 = &prefix.test2;
data retain;
set &dName &dName2;
run;
&prefix
以.
结束,表示字符串prefix
是要解析的宏变量的名称。如果没有.
,则扫描程序将假定您的宏变量的全名为&prefixtest
。
答案 1 :(得分:-1)
根据您的代码尝试此操作。
%macro export(outputDataset, prefix, outputFileName);
%let dName =%sysfunc(catx(.,&prefix, test));
%let dName2 =%sysfunc(catx(.,&prefix, test2));
data &outputDataset;
set &dName &dName2;
run;
proc export data=&outputDataset outfile="outputDir/&outputFileName" replace; run;
%mend export;
%export(retain, hh_dpt, retained.csv)