SAS:从Proc SQL创建变量以在宏中使用

SAS:从Proc SQL创建变量以在宏中使用,sas,Sas,我想计算变量中唯一项的数量(称之为“类别”),然后使用该计数设置SAS宏中的迭代次数(即,我不希望硬编码迭代次数) 我可以得到这样的计数: proc sql; select count(*) from (select DISTINCT categories from myData); quit; %macro superFreq; %do i=1 %to &iterationVariable; Proc freq data=myD

我想计算变量中唯一项的数量(称之为“类别”),然后使用该计数设置SAS宏中的迭代次数(即,我不希望硬编码迭代次数)

我可以得到这样的计数:

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
我可以像这样运行宏:

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
我想知道如何将计数放入迭代变量中,这样宏的迭代次数与变量“categories”中的唯一值相同


抱歉,这让人困惑。如果需要,很高兴澄清。提前感谢。

您可以通过使用
proc sql
中的
into
子句来实现这一点:

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
LIST_OF_NAMES=Alfred Alice Barbara Carol Henry James Jane Janet Jeffrey John Joyce Judy Louise Mary Philip Robert Ronald Thomas
您还可以通过将
放入
子句与由子句分隔的
组合,将结果列表选择到宏变量中:

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

%put &=list_of_names;
结果:

MAX_AGE=      16 MAX_HEIGHT=      72 MAX_WEIGHT=     150
LIST_OF_NAMES=Alfred Alice Barbara Carol Henry James Jane Janet Jeffrey John Joyce Judy Louise Mary Philip Robert Ronald Thomas

威廉

感谢您的全面回复。我是SAS宏的新手,所以我期待着玩这个。