我正在运行模拟,需要将两个变量(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的均值和标准差与原始数据集联系起来。
答案 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输出的结果相反)。