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

Sas 使用宏变量时会出现一些问题,sas,sas-macro,Sas,Sas Macro,当我提交程序时,宏变量Class_var6无法解析。 但其他宏观变量可以正确解析。 日志在图片中。请在此处输入图像描述 在%ClassAna中,您根据以下条件创建宏变量: data classivar_1; set classvar; AnaClassVar=scan(scan(F2,1," "),2,"."); run; proc sql; select AnaClassVar into : MacClassVar separated by "#" from classivar_1 ; sel

当我提交程序时,宏变量Class_var6无法解析。 但其他宏观变量可以正确解析。 日志在图片中。请在此处输入图像描述

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

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)
默认情况下,该查找区分大小写。我认为,如果通过添加可选的I参数来查找,从而使其不区分大小写,那么它将起作用。比如:

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

或者,您可以%upcase两个变量列表,并保持查找结果不变

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

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)
默认情况下,该查找区分大小写。我认为,如果通过添加可选的I参数来查找,从而使其不区分大小写,那么它将起作用。比如:

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

或者,您可以%upcase两个变量列表,并保持查找结果不变

你能在日志中显示错误吗。。。。使用编码顶部的选项mprint mlogic symbolgen可以在日志中显示错误。。。。使用代码顶部的
选项mprint mlogic symbolgen
谢谢。你的答案很好,谢谢。你的答案很完美。