如何从PROC SUMMARY或PROC MEANS生成堆叠输出?

时间:2014-03-18 16:39:00

标签: sas

现在,当我运行proc摘要时,输出数据集如下所示:

VAR1 Label Mean VAR2 Label Mean

但我想要以下格式:

VAR1 Label Mean 
VAR2 Label Mean

如何从我的proc摘要声明中执行此操作:

proc summarydata = full MEAN STD MEDIAN MIN MAX MEDIAN Q1 Q3 P95 P90 P5 print;
var X;
run; 

1 个答案:

答案 0 :(得分:0)

如果您使用的是SAS 9.3或更高版本,并且正在使用ODS OUTPUT,则可以使用STACKODSOUTPUT选项执行此操作。

ods output summary=test ;
proc summary data=sashelp.class print mean p5 p95 stackodsoutput;
class sex;
var height weight;
run;
ods output close;

如果您通过PROC中的output语句执行此操作,或者使用SAS 9.2或更早版本,则必须对数据进行后处理以对其进行转置。如果您使用/AUTONAME,则可以相当轻松地完成此操作。

proc summary data=sashelp.class print mean p5 p95 stackodsoutput;
class sex;
var height weight;
output out=test mean= p5= p95= /autoname;
run;

data test2;
set test;
array vars height: weight:;
do _t = 1 to dim(vars);
  varname = scan(vname(vars[_t]),1,'_'); *this would be more complex if you have _ in your variable names;
  statistic = scan(vname(vars[_t]),-1,'_'); *this would be okay, though;
  value = vars[_t];
  output;
end;
keep sex varname statistic value;
run;

proc transpose data=test2 out=test3(drop=_name_);
by sex varname;
id statistic;
var value;
run;