data bbtmp;
set bb;
array test(*) var1-var4;
do i=1 to dim(test);
var=vname(test(i));
value=test(i);
output;
end;
run;
proc sort data=bbtmp;
by var;
run;
%let var_list =var1-var4 ;
proc means data=bb n mean median std min max;
var &var_list.;
output out=xx1(drop = _type_ _freq_);
run;
proc transpose data=xx1 out = x1;
id _STAT_;
run;
proc means data=bb n mean median std min max;
var &var_list.;
output out=xx2 (drop = _type_ _freq_) median =;
run;
proc transpose data=xx2 out=x2(rename =(col1=MEDIAN)); run;
data x;
set x1;
set x2;
run;
proc print data=x noobs;
var _NAME_ n mean median min max;
run;
[/code:h0g2ka8q]作者: shiyiming 时间: 2010-3-3 09:36 标题: Re: proc means输出问题 Here is a working but awkward approach. Essentially it's nothing new but pretty much borrowing the ideas from the posts in the above. I'm also expecting an elegant way of achieving this to show up. <!-- s:-) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":-)" title="Smile" /><!-- s:-) -->
%macro means(in =, vars =, metrics =, out =);
proc means data = &in. noprint;
var &vars.;
output out = &out. (drop=_type_ _freq_)
&metrics. /autoname;
run;
proc transpose data = &out.
out = &out.(rename = (_name_ = formerVar
col1 = value
)
);
run;
data &out.(drop = formerVar);
set &out.;
variable = scan(formerVar, 1, '_');
metric = scan(formerVar, 2, '_');
run;
proc sort data = &out.;
by variable;
run;
proc transpose data = &out.
out = &out.(drop = _name_);
by variable;
id metric;
var value;
run;
%mend means;
%means(in = bb, vars = %nrstr(var1-var4), metrics = %nrstr(mean= N= std= min= max= median=), out = summary);