SAS中的PROC MEANS步骤:如何创建平均值和标准差之外的变量?

时间:2015-03-15 18:34:00

标签: sas

我正在运行模拟,需要将两个变量(e_2和e_3)的平均值和标准差与原始数据集相关联。到目前为止,这是我的代码:

proc means data=unif;
    var e_2 e_3;
    output out=means (drop = _TYPE_ _FREQ_);
run;

这给出了一个名为&#34的数据集;表示"像:

    _STAT_    e_2    e_3
1     N      50000  50000
2    MIN      0.2    0.4
3    MAX      0.8    0.9
4    MEAN     0.5    0.6
5    STD      0.1    0.2

从这个"意味着"数据集,我需要变量e_2和e_3的均值和标准差成为他们自己的变量(总共4个变量),所以结尾看起来像这样:

     mean_e_2    mean_e_3    sd_e_2   sd_e_3
1      0.5         0.6         0.1      0.2

我只想将e_2和e_3的均值和标准差与原始数据集联系起来。

3 个答案:

答案 0 :(得分:2)

在PROC MEANS / SUMMARY

中使用AUTONAME选项
proc summary data=test;
var e_2 e_3;
output out=means std= mean= /autoname;
run;

如果要为每个变量命名,请尝试使用

proc summary data=test;
var e_2 e_3;
output out=means std(e_2 e_3)=sd_e_2 sd_e_3 
                 mean(e_2 e_3)=mean_e_2 mean_e_3 ;
run;  

答案 1 :(得分:0)

我尝试使用SASHELP.CLASS数据集复制您的输入数据。如果以下参考代码有帮助,请告诉我。

proc means data=sashelp.class noprint;
 var age weight;
 output out=means (drop = _TYPE_ _FREQ_);
run;

proc transpose data=means out=means_transposed(keep=_name_ mean std);
 id _stat_;
 var age weight;
run;

data solution;
 merge means_transposed(where=(_name_='Age')    rename=(mean=mean_Age    std=std_Age   ))
       means_transposed(where=(_name_='Weight') rename=(mean=mean_Weight std=std_Weight))
      ;
  drop _name_;
run;

如果您不喜欢TRANSPOSE或者想要保持简单,那么以下代码也应该有所帮助:

proc means data=sashelp.class noprint;
var age weight;
output out=means (drop = _TYPE_ _FREQ_);
run;

data solution;
do until(eof);
    set means end=eof;
        if _stat_='MEAN' then do; 
            mean_Age=age;
            mean_Weight=weight;
        end;
        else if _stat_='STD' then do; 
            std_Age=age;
            std_Weight=weight;
        end;
end;
keep mean_: std_:;
run;
proc print data=solution;run;

答案 2 :(得分:0)

您也可以使用ods output方法而不是进程内输出。名字有点长,可能好或坏。

ods output summary=test;
  proc means data=sashelp.class mean stddev;
    var age weight;
  run;
ods output close;

我认为输出组织正是您所寻找的,但您也可以在stackodsoutput语句中添加(我认为9.3+)proc means选项,以获得每个变量1行,但是不同列中的统计数据(因此与自动proc输出的结果相反)。