我有以下代码:
%macro MSA (Data=, Code=, MSAName=);
data &Data;
set NoDup;
%if MSA = &Code %then %do;
MSA_name = "&MSAName";
output &data;
%end;
run;
%mend MSA;
%MSA (Data=Bakersfield, Code=12540, MSAName=Bakersfield);
%MSA (Data=Chico, Code=17020, MSAName=Chico);
所以我得到两个数据集,我想要一个名字贝克斯菲尔德和另一个奇科。但是,MSA列不显示正确的值(即Bakersfield的列为12540,MSA的Chico为17020),也没有得到一个名为MSA_Name的变量,它给出了正确的值(所有MSA_Name列的Bakersfield,和奇科)。我究竟做错了什么?
答案 0 :(得分:2)
您的代码所遇到的问题是将宏语法与数据步骤混合在一起。请尝试以下方法:
%macro MSA (Data=, Code=, MSAName=);
data &Data;
set NoDup;
if MSA = &Code /*if MSA is char, you will need quote "&code"*/ then do;
MSA_name = "&MSAName"; output; end;
run;
%mend MSA;
%MSA (Data=Bakersfield, Code=12540, MSAName=Bakersfield);
%MSA (Data=Chico, Code=17020, MSAName=Chico);