【问题标题】:SAS: Create Variable from Proc SQL to use in MacroSAS:从 Proc SQL 创建变量以在宏中使用
【发布时间】:2017-10-05 16:59:25
【问题描述】:

我想计算变量中唯一项的数量(称为“类别”),然后使用该计数来设置 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

我想知道如何将计数放入迭代变量中,以便宏迭代的次数与变量“类别”中的唯一值一样多。

对不起,如果这令人困惑。如果需要,很高兴澄清。提前致谢。

【问题讨论】:

    标签: sas


    【解决方案1】:

    您可以通过使用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
    

    您还可以通过将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
    

    威廉

    【讨论】:

    • 感谢您的全面回复。我是 SAS 宏的新手,所以我期待着玩这个。
    猜你喜欢
    • 2017-10-04
    • 1970-01-01
    • 2013-01-23
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多