我有一个proc means输出,其中每个摘要统计信息都有行,每个变量都有列。我该如何“透视”它,使其通过“ by”变量是唯一的?
我的解决方法是获取输出,并使用WHERE和RENAME命令将其合并到自身上。有更简单的方法可以做到这一点吗?
proc means data=data1 n mean max min std noprint;
var var1 var2;
by month;
output out=SummaryStats;
run;
data SummaryStatsUnique;
merge SummaryStats (in=in1 keep=month var1 var2 _stat_ rename=(var1=var1_N var2=var2_N) where=(_stat_="N"))
SummaryStats (in=in2 keep=month var1 var2 _stat_ rename=(var1=var1_MEAN var2=var2_MEAN) where=(_stat_="MEAN"))
SummaryStats (in=in3 keep=month var1 var2 _stat_ rename=(var1=var1_MAX var2=var2_MAX) where=(_stat_="MAX"))
SummaryStats (in=in4 keep=month var1 var2 _stat_ rename=(var1=var1_MIN var2=var2_MIN) where=(_stat_="MIN"))
SummaryStats (in=in5 keep=month var1 var2 _stat_ rename=(var1=var1_STD var2=var2_STD) where=(_stat_="STD"))
;
by month;
if ^(first.month and last.month) then abort;
if ^(in1 and in2 and in3 and in4 and in5) then abort;
run;
这应该采用这样的表格格式:
MONTH _STAT_ Var1 Var2
2019.01 N 19 15
2019.01 MEAN 17.5 13
2019.01 MAX 21 16
2019.01 MIN 15 12
2019.01 STD 2.5 1.5
2019.02 ...
并输出如下:
MONTH VAR1_N VAR2_N VAR1_MEAN VAR2_MEAN ...
2019.01 19 15 17.5 13
2019.02 ...
答案 0 :(得分:3)
为什么不使用AUTONAME并直接创建数据。
proc summary data=sashelp.class nway;
class age;
var height weight;
output out=summary n= mean= max= min= std= / autoname;
run;
答案 1 :(得分:1)
答案 2 :(得分:1)
将PROC MEANS / SUMMARY默认输出数据转换为自动命名样式。
proc means noprint missing chartype data=sashelp.class;
class sex;
output out=stat1;
run;
proc print;
run;
proc transpose data=stat1(drop=_freq_) out=stat2;
by _type_ sex _stat_ notsorted;
run;
proc print;
run;
proc transpose data=stat2 out=stat3 delim=_;
by _type_ sex;
id _name_ _stat_;
var col1;
run;
proc print;
run;