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

Sas 如何从PROC SUMMARY或PROC MEANS生成堆叠输出?,sas,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; 如果您有SAS 9.3或更新版本,并且正在使用ODS输出,则可以使

现在,当我运行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; 

如果您有SAS 9.3或更新版本,并且正在使用
ODS输出
,则可以使用
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;

我对标题进行了编辑,使其对搜索更有用。此外,在
%Bettermans
上,宏可能很有趣,对于实际使用的宏,看看开发人员采取的方法。如果变量位于一个名为&vars的宏变量中,会发生什么情况?@lord12,这与问题的第一部分不太相关;它们解析为文本,并被当作非文本处理。如果您想知道如何使用第二种方法,那么唯一的挑战就是构造数组规范,这需要创建一个新的宏变量,并添加冒号,或者需要以不同的方式构造数组规范-可能只是简单地使用
\u NUMERIC\u
并明确避免将限定为不需要的两个变量(特别是
\u TYPE\u
\u FREQ\u
)。