使用Macro变量时会出现一些问题

时间:2016-09-25 12:16:50

标签: sas sas-macro

data classivar_1;
set classvar;
AnaClassVar=scan(scan(F2,1," "),2,".");
run;
proc sql;
select AnaClassVar into : MacClassVar separated by "#" from classivar_1 ;
select count(*) into: Count_classvar from classivar_1;
quit;
%put &MacClassVar.;
%put &Count_classvar.;
ods output variables=adsl_var;
proc contents data=ev.adsl;
run;
proc sql;
select variable into : AllVar separated by "#" 
from adsl_var;
select count(*)  into : Count_Allvar from adsl_var;
quit;
%put &Allvar.;
%put &Count_Allvar.;

**** set up Macro ClassAna to analyze the classified varialbes;

%macro ClassAna(datasets= );
%do i= 1 %to &Count_classvar.;
%do count=1 %to &Count_Allvar;
%if %sysfunc(find(%scan(&MacClassVar,&i,#),%scan(&AllVar,&count,#)))
%then %do;
%let Class_var&i.=%scan(&AllVar,&count,#);
%end;
%end;
%put &&Class_var&i..;
%end;
%Mend;
%ClassAna(datasets=sashelp.class)

当我提交程序时,无法解析宏变量Class_var6。 但是其他宏变量可以正确解析。 日志位于picture.enter图像描述中 enter image description here

1 个答案:

答案 0 :(得分:2)

在%ClassAna中,您有条件地根据以下内容创建宏变量:

%if %sysfunc(find(%scan(&MacClassVar,&i,#),%scan(&AllVar,&count,#)))
%then %do;

默认情况下,FIND区分大小写。我认为如果通过向FIND添加可选的i参数使其不区分大小写,它将起作用。类似的东西:

%if %sysfunc(find(%scan(&MacClassVar,&i,#),%scan(&AllVar,&count,#),i))
%then %do;

或者你可以%up up两个变量列表并保持FIND不变。