原文没有提供数据,所以就在网上随便找了个数据进行测试,地址如下:http://www.sasenterpriseminer.com/data/htwt.xls
该数据包含4个变量(性别sex,年龄age,身高height,体重weight),共237个观测。
1 语法:
proc means <option(s)> <statistic-keyword(s)>;
直接运行 proc means过程时,会对所有数值型变量进行操作,得到各变量的非缺失观测数N,均值MEAN,标准差STD DEV,最大值Max和最小值Min。
proc means data =Htwt;
run;
结果:
变量 标签 N 均值 标准偏差 最小值 最大值
-------------------------------------------------------------------
age age 237 16.4430380 1.8425767 13.9000000 25.0000000
height height 237 61.3645570 3.9454019 50.5000000 72.0000000
weight weight 237 101.3080169 19.4406980 50.5000000 171.5000000
-------------------------------------------------------------------
我们还可以增加range(极差) sum(和) var(方差) mean(均值) nmiss(缺失值个数) median(中值)等选项得到其统计量。
proc means data =Htwt range sum var mean nmiss median;
run;
结果略。
2 Class:对变量进行分组操作
proc means data = Htwt range sum var mean nmiss median;
var height;
class sex;
run;
结果:
分析变量:height height
3 out:输出结果数据集
proc means data = Htwt range sum var mean nmiss median;
var height;
class sex;
output out=height n = cnt sum = total mean = avg;
run;
proc print data=height;
run;
结果:
Obs sex _TYPE_ _FREQ_ cnt total avg
1 0 237 237 14543.4 61.3646
2 f 1 111 111 6718.4 60.5261
3 m 1 126 126 7825.0 62.1032
这里的n,sum,mean选项也可以用autoname自动命名。
这里的_TYPE_,当其值为0时,表示对总体进行操作,当其值为1时,表示对各个sex子集进行操作。如果这里的class后有两个变量,例如class sex age,则_type_会有4个值:
0 整个数据集的means操作
1 对age进行子集means操作(以字母为序)
2 对sex进行子集means操作(以字母为序)
3 对sex,age进行交叉子集子集means操作,即sex*age
4 types :对以上所述的_type_进行选择输出。
proc means data = Htwt range sum var mean nmiss median;
var height;
class sex age;
types sex sex*age;
output out=height sum = n = /autoname;
run;
proc print data=height;
run;
只对_type_=2和3的结果进行输出到height数据集中。
如果要对_type_进行二进制层级显示,则要用到charttype选项。
proc means data = Htwt noprint chartype;
var height;
class sex age;
types sex age sex*age;
output out=height sum = n = /autoname;
run;
proc print data=height;
run;
结果:
Obs sex age _TYPE_ _FREQ_ Sum height_N
1 13.9 01 5 287.3 5
2 14.0 01 7 398.6 7
3 14.1 01 5 289.9 5
61 f . 10 111 6718.4 111
62 m . 10 126 7825.0 126
63 f 13.9 11 3 171.8 3
64 f 14.0 11 3 167.3 3
65 f 14.1 11 3 179.1 3
这里age的_type_为01,sex的_type_为10,两者交叉_type_就为11。
5 T检验:height的均值是否为70
data Htwttt;
set Htwt;
heighttt=height-70;
run;
proc means data = Htwttt n mean stderr t prt maxdec = 1 fw = 5;
var height heighttt;
run;
t :t值
prt:大于t值的概率
maxdec:输出参数的数值的小数点位数
fw:fields width,宽度
结果:
变量 标签 N 均值 标准误差 t 值 Pr > |t|
---------------------------------------------------------------------
height height 237 61.4 0.3 239.44 <.0001
heighttt 237 -8.6 0.3 -33.70 <.0001
这里P值都小于0.01,故拒绝原假设
0 comments:
Post a Comment