2016-09-25 52 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

相關問題