CATS SAS 函数中的选项名称无效?

Invalid option name in CATS SAS function?

我有一个 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.

有人知道问题出在哪里吗?谢谢!

%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;

%let dName = &prefix.test;
%let dName2 = &prefix.test2;

data retain;
     set &dName &dName2;
run;

其中&prefix.结束,表示字符串prefix是要解析的宏变量的名称。如果没有 .,单词扫描仪将假设您的宏变量的全名是 &prefixtest.

根据您的代码试试这个。

%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)