我对这里提出的问题有类似的情况.但是,我不想在var语句中列出我的300个变量名,因为它们都是唯一的.有没有办法使用proc means或proc summary输出一个数据集中所有数值变量的汇总统计信息?
我试过了:
proc means data=my_data min median max;
output out=summary_data min=min median=median max=max;
run;
Run Code Online (Sandbox Code Playgroud)
但这仅输出第一个变量的摘要统计信息.我也尝试过以下方面的帮助ods trace:
proc means data=my_data min median max;
ods output Summary=summary_data;
run;
Run Code Online (Sandbox Code Playgroud)
这给了我所有变量的摘要统计信息,但仍然在一行中:
VName_VAR1 VAR1_Minimum VAR1_Median VAR1_Maximum VName_VAR2 VAR2_Minimum etc...
VAR1 3 3 3 VAR2 3
Run Code Online (Sandbox Code Playgroud)
我的VAR名称都是唯一的.是否有其他方法可以使用proc means或proc summary输出一个数据集中所有数值变量的汇总统计信息?
更新:
当我删除min=min median=median max=max:
proc means data=my_data min median max;
output out=summary_data;
run;
Run Code Online (Sandbox Code Playgroud)
然后代码生成输出:
Obs _TYPE_ _FREQ_ _STAT_ VAR_1 VAR_2 ... etc
1 0 91 N 91.00 91 ... etc
2 0 91 MIN 2005.00 13 .
3 0 91 MAX 2014.00 13 .
4 0 91 MEAN 2009.34 13 .
5 0 91 STD 3.02 0
Run Code Online (Sandbox Code Playgroud)
但是,它仍然没有给我MEDIAN.
当我在使用之前转置数据时,proc means我得到了所需的输出.
proc sort data=sashelp.cars out=cars; by _character_;run;
proc transpose data=cars out=cars_t;
var _numeric_;
by _character_;
run;
proc sort data=cars_t;by _name_;run;
proc means data=cars_t noprint;
output out=cars_summary(drop = _type_ _freq_) min=min median=median max=max;
by _name_;
run;
Run Code Online (Sandbox Code Playgroud)
然后代码生成输出:
Obs _NAME_ min median max
1 Cylinders 3.0 6.0 12.0
2 EngineSize 1.3 3.0 8.3
3 Horsepower 73.0 210.0 500.0
4 Invoice 9875.0 25294.5 173560.0
5 Length 143.0 187.0 238.0
6 MPG_City 10.0 19.0 60.0
7 MPG_Highway 12.0 26.0 66.0
8 MSRP 10280.0 27635.0 192465.0
9 Weight 1850.0 3474.5 7190.0
10 Wheelbase 89.0 107.0 144.0
Run Code Online (Sandbox Code Playgroud)
如果您的原始数据中的每一行都有唯一的ID,则此方法有效.