【问题标题】:Making the PROC MEANS statement in SAS produce a variable instead of a dataset使 SAS 中的 PROC MEANS 语句生成变量而不是数据集
【发布时间】:2015-11-07 01:23:46
【问题描述】:

我需要获取列中所有值的总和(下面代码中的“var1”)。据我所知,这是按如下方式完成的:

proc means data = somedata sum var1;
output out = sumtable sum = sum;
run; 

我想在下一步中用作变量的总和。是否可以让上面的 OUTPUT 语句将总和存储在一个新变量中,而不是将其写入一个全新的数据集?如果是这样,它的语法是什么?

【问题讨论】:

    标签: variables sum sas output


    【解决方案1】:

    总之,没有。您可以按照 Reeza 的建议将该值作为文本字符串存储到宏变量中,但如果要将其存储为变量,则该变量需要位于数据集中。

    如果您想将该变量用于某事,将其带回未来的数据步骤并不难。只需引用存储它的数据集即可。

    proc summary data=sashelp.class ;
      var height weight ;
      output out=class_summary sum=total_height total_weight;
    run;
    data new ;
      set sashelp.class;
      if _n_=1 then set class_summary;
      fraction_of_total_wt = weight / total_weight;
      fraction_of_total_ht = height / total_height;
    run;
    

    【讨论】:

    • 毕竟,我认为这不是宏变量,而是我的方法。 (虽然这引发了它自己的问题,但这是一个单独的问题。)
    【解决方案2】:

    听起来您想要一个宏变量而不是数据步骤。 在我看来,这最容易通过 PROC SQL 步骤而不是 PROC MEANS 来完成。 您的 PROC MEANS 看起来也不正确,VAR1 不属于那里并且会产生错误。

    proc sql;
    select sum(var1) into :sum_var1
    from somedata;
    quit;
    
    %put &sum_var1;
    

    您可以使用 &sum_var1 访问代码其他部分中的变量,这将解析为变量值。值得注意的是,所有宏变量都存储为文本。

    【讨论】:

    • 谢谢!出于我的目的(我没有坚持总和是一个变量;一个宏变量就足够了),这很好用。
    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多