Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CATS SAS函数中的选项名称无效?_Sas_Sas Macro - Fatal编程技术网

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

CATS SAS函数中的选项名称无效?,sas,sas-macro,Sas,Sas Macro,我有一个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

我有一个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\u dpt,test)
存储到宏变量
dName
中。当数据步骤编译时,SAS会看到:

data retain
    set cats(hh_dept, test) cats(hh_dept, test2);
run;
这是对
cats
功能的无效使用。不能在数据步骤
set
语句中使用SAS函数连接数据集名称。您可以这样更正:

data retain;
     set &prefix.test &prefix.test2;
run;


其中
&前缀
结尾,表示字符串
前缀
是要解析的宏变量的名称。如果没有
,word scanner将假定宏变量的全名为
&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)
不要调用CAT()函数将宏变量值串在一起。只要在你想要的地方引用它们就行了<代码>&前缀.测试
%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)