【分享一个有用的教程】
利用proc means计算均值、标准差、中位数等统计量的时候,一般结果都会直接显示在Results Reviewer上,如果想使用output out=语句将结果输出成数据集的话就会发现仅仅会输出N MIN MAX MEAN STD这5个基础变量,如下所示:
proc means data=sas1 n nmiss mean std median q1 q3 min max noprint;var age dm_height dm_weight dm_surface dm_bmi_new;output out=new1;run;
不管在proc means语句后写多少统计量,output输出的new1数据集只有下面5个:
那么如果想将自己需要的所有描述统计的统计量都输出成新的数据集要怎么操作呢?
SAS 中有一个教程可以解决以上问题 :
Customizing output from PROC MEANS | SAS UsersThis blog post will give you step-by-step instructions for customizing the output data set created using the OUTPUT statement./content/sgf//07/17/customizing-output-from-proc-means/其代码主要如下:
proc means data=dm_group_1 n nmiss mean std median q1 q3 min max noprint;var age dm_height dm_weight dm_surface dm_bmi_new;output out=new1(drop=_type_ _freq_) n= nmiss= mean= std= median= q1= q3= min= max= / autoname;/*较第一个代码多了上述一行*/run;
在输出新的new1后打开数据集就会发现,数据是以宽数据集的形式展示,不利于后续的数据整理与展示:
上述教程也提供了如何利用proc transpose改变数据的格式,实操可行。
另外,除了教程提到的stackodsoutput选项的使用(更为简洁),如果使用计算不同组别的描述统计量还可以在原始的单组中补充下列标红代码(因为我在分析的时候没有注意到stackodsoutput选项的用法,琢磨了一阵子试出来了这个笨办法):
proc means data=dm_group_1 n nmiss mean std median q1 q3 min max noprint;
var age dm_height dm_weight dm_surface dm_bmi_new;
output out=new2(drop=_type_ _freq_)
n= nmiss= mean= std= median= q1= q3= min= max= / autoname;
by group_2cat;/*使用by语句计算分组统计量*/
run;
proc transpose data=new out=out;
by group_2cat;/*第一次转置时加入by,指定分组变量*/
run;
/*接下来按照教程中分离出变量名*/
proc transpose data=out1 out=out2(drop=_name_);
by varnamegroup_2cat; /*第二次转置by后补充分组变量*/
id stat;
var col1;
run;
proc sort data=out2;
by group_2cat;
run;
/*利用分组变量重新排序*/
也可以得到想要的结果。
从这样:
变为这样: