2017-10-05 138 views
3

我想計算變量中唯一項的數量(稱之爲「categories」),然後使用該數來設置SAS宏中的迭代次數(即,我寧願不硬編碼迭代次數)。SAS:從Proc SQL中創建變量以便在宏中使用

我能得到這樣的計數:

proc sql; 
     select count(*) 
     from (select DISTINCT categories from myData); 
quit; 

我可以運行這樣的宏:

%macro superFreq; 
    %do i=1 %to &iterationVariable; 
     Proc freq data=myData; 
     table var&i/out=var&i||freq; 
    run; 
%mend superFreq; 
%superFreq 

我想知道如何得到計數到迭代變量,以便宏在變量「類別」中有唯一值的迭代次數。

對不起,如果這是混亂。很高興澄清,如果需要。提前致謝。

回答

4

您可以通過使用into子句中proc sql實現這一目標:

proc sql noprint; 
    select max(age), 
     max(height), 
     max(weight) 
    into :max_age, 
     :max_height, 
     :max_weight 
    from sashelp.class; 
quit; 

%put &=max_age &=max_height &=max_weight; 

結果:

MAX_AGE=  16 MAX_HEIGHT=  72 MAX_WEIGHT=  150 

您也可以通過結合into選擇結果的列表爲宏變量子句與separated by子句:

proc sql noprint; 
    select name into :list_of_names separated by ' ' from sashelp.class; 
quit; 

%put &=list_of_names; 

結果:

LIST_OF_NAMES=Alfred Alice Barbara Carol Henry James Jane Janet Jeffrey John Joyce Judy Louise Mary Philip Robert Ronald Thomas 

威廉

+0

謝謝你的全面響應。我是SAS宏的新手,所以我期待着玩這個。 – AwfulPersimmon