2016-09-25 56 views
0
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当我使用宏变量时出现一些问题

+0

您能否在日志中显示错误....在代码顶部使用'mprint mlogic symbolgen'选项 – Altons

回答

2

在%ClassAna基于正在有条件地创建宏瓦尔:

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

那找到的是情况下默认敏感。我认为它会起作用,如果你通过添加可选的i参数给FIND来使其不区分大小写。像这样:

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

或者你可以%upcase这两个变量列表并保持原样。

+0

谢谢。你的答案是完美的。 – bluehaiku

相关问题