2.1 利用SAS软件描述样本数据
用SAS可以对样本数据进行全面描述,得出样本的各种特征数以及频数分布图。在阅读以下内容之前请先阅读第一章“SAS软件基本操作”。
2.1.1 用MEANS语句描述数据
例 2.1 计算课本上习题1.2的平均数和标准差。
解 在进行分析之前,最好先建立一个外部数据文件。如果不建立外部数据文件,在作业流中输入数据也可以。一般来说,在数据量比较大,有可能重复使用时,最好建立一个数据文件。在这里我们创建一个称为2-1data.dat 的外部数据文件,存储在A盘中。用MEANS过程描述数据的最基本的程序如下:
options linesize=76;
data abc;
infile ‘a:\2-1data.dat’;
input x;
run;
proc means;
run;
提交SAS运行后,所得结果如下:
表2-1: 例2.1输出的结果
The SAS System
Analysis Variable : X
N |
Mean |
Std Dev |
Minimum |
Maximum |
250 |
63.2760000 |
3.0139941 |
55.0000000 |
70.0000000 |
打印的结果中包括:数据个数,平均数,标准差,最小值和最大值。这是MEANS语句在缺省时得到的基本结果。若需要对数据作更详细的描述,则要指明所需的统计量(关于统计量的概念见课本2.2.4)。用MEANS过程所计算的统计量,在这里也一并列出。下面还会反复提到“变量”这一名词,关于变量的概念见课本2.2.1。MEANS过程所计算的统计量是用关键词表示,这些关键词及其含义如下:
N:输入的观测值(观测值的概念见课本2.2.1)个数
NMISS:每个变量所含缺失值的个数
MEAN:变量的平均数
STD:变量的标准差
MIN:变量的最小值
MAX:变量的最大值
RANGE:变量的极差
SUM:变量所有值的和
VAR:变量的方差
USS:每一变量原始数据的平方和(未校正平方和)
CSS:每一变量的离均差平方和(校正平方和)
CV:变异系数
STDERR:每一变量的标准误差(平均数的标准差)
T:在H0:μ= 0时的t 值(见课本5.1.4)
PRT:在H0:μ= 0 的假设下,统计量t 大于t 临界值绝对值的概率(见课本4.1.1)
SKEWNESS:偏斜度
KURTOSIS:峭度
CLM:置信区间的上限和下限(见课本6.2.1)
LCLM:置信区间的下限
UCLM:置信区间的上限
另外,在PROC MEANS语句中还有12个选项,其中几个主要选项如下:
DATA=(SAS 数据集):指出SAS 数据集的名称,若省略,则使用最近产生的数据集
MAXDEC=(数字):指出所输出的结果中,小数部分的最大位数(0-8),缺省时为8 位
FW=(域宽):指出打印的结果中每个统计量的域宽,缺省时为12
VARDEF=(DF / N):VARDEF=DF为缺省值,表示计算方差时,使用n-1 作分母,
VARDEF=N表示计算方差时,使用观测值个数n 作分母
ALPHA=(α值):指出在计算置信区间时,选用的显著水平
例2.2 计算课本上习题1.2的离均差平方和,方差,偏斜度和平均数的0.95置信区间。
解 仍然使用2-1data.dat 外部数据文件。MEANS过程如下:
options linesize=76;
data abc;
infile ‘a:\2-1data.dat’;
input x;
run;
proc means data=abc maxdec=4 fw=8 alpha=0.05
css var skewness clm;
run;
运行的结果如下:
表2-2:例2.2输出的结果
The SAS System
Analysis Variable : X
CSS |
Variance |
Skewness |
Kurtosis |
Lower 95.0% CLM |
Upper 95.0% CLM |
2261.96 |
9.0842 |
-0.1548 |
-0.1894 |
62.9006 |
63.6514 |
在PROC MEANS语句中,data=abc选项是可以省略的,因为PROC MEANS语句所分析的正是最近的SAS数据集,若需从SAS数据库中调用某一数据集时,则DATA选项不可省略。在建立外部数据文件时,应每个数据占一行,250个数据占250行(只占一列)。这样输入数据太麻烦,核对起来也不方便。如果想连续输入数据,则应在INPUT语句的变量后加上@@,即“inpet x @@;”,具体说明见例2.4。
在进行科学研究时,需要处理的变量数目往往很多,而且变量之间还存在一定关系,经常要计算在某一变量特定水平下,其它变量的一些特征数。例如,在做人群健康情况调查时,涉及的变量多达十几个甚至几十个。如,性别、年龄、身高、体重、吸烟程度、饮酒程度、视力、听力、血压、脉搏、血黏度、胆固醇含量……。如果要计算不同程度吸烟者或不同性别受检者的各项指标或其中若干项指标的某些统计量,只需加上VAR语句和CLASS语句,便能很容易完成此项工作。VAR语句指明所需描述的变量,CLASS语句可以按观测值的不同类别分类计算指定的统计量。
例 2.3 在做小麦育种时,调查了杂交后代的若干性状,选取其中一部分列在下表中(表2-3)。在表2-3中共列举了四个变量,即:株高、穗长、穗粒数和成熟早晚。分别用hop、loe、nog和fas代表上述四个变量,以成熟的早(e)、中(m)、晚(l)分类,分别计算株高与穗长的平均数、标准差和标准误差以及穗粒数的范围和变异系数。
表2-3
60 8.0 60 m
61 8.0 50 m
61 8.5 61 l
61 7.5 54 e
65 7.5 50 l
63 6.5 46 e
62 7.0 48 l
63 7.5 45 m
66 8.0 54 m
61 7.0 50 e
63 7.0 48 e
67 8.0 50 l
66 8.0 54 l
70 7.0 44 e
62 8.0 54 e
65 8.0 55 l
63 9.0 56 e
67 9.0 52 m
64 7.0 46 e
62 8.0 56 e
65 9.0 58 m
68 8.5 48 e
64 6.5 44 m
63 7.0 52 e
62 8.0 48 e
63 7.0 50 l
69 8.0 52 l
63 7.5 52 m
68 7.0 46 e
61 7.5 52 e
65 7.5 48 e
66 8.0 48 l
66 8.5 54 e
70 8.0 46 e
68 8.0 48 m
62 8.5 62 m
65 8.5 66 m
60 9.0 64 e
69 7.5 48 e
66 8.0 46 e
68 7.5 42 m
70 9.0 46 m
69 7.0 42 l
72 8.0 52 e
66 7.5 52 m
70 8.0 50 m
69 7.5 50 l
71 8.0 50 e
67 6.0 38 l
67 7.5 48 e
解 先建立一个称之为2-2data.dat 的外部数据文件,外部数据文件的格式如表2-3所示。
PROC MEANS程序如下:
options linesize=76;
data wheat;
infile ‘a:\2-2data.dat’;
input hop loe nog fas $;
run;
proc means maxdec=2 fw=8 max min mean std stderr;
var hop loe;
class fas;
proc means data=wheat range cv;
var nog;
class fas;
run;
打印结果见表2-4。
表2-4 例2.3输出的结果
The SAS System
FAS |
N Obs |
Variable |
Maximum |
Minimum |
Mean |
Std Dev |
Std Error |
|
|
|
|
|
|
|
|
e |
23 |
HOP |
72.00 |
60.00 |
65.09 |
3.64 |
0.76 |
|
|
LOE |
9.00 |
6.50 |
7.70 |
0.67 |
0.14 |
|
|
|
|
|
|
|
|
l |
12 |
HOP |
69.00 |
61.00 |
65.75 |
2.70 |
0.78 |
|
|
LOE |
8.50 |
6.00 |
7.54 |
0.69 |
0.20 |
|
|
|
|
|
|
|
|
m |
15 |
HOP |
70.00 |
60.00 |
65.20 |
3.08 |
0.79 |
|
|
LOE |
9.00 |
6.50 |
8.03 |
0.69 |
0.18 |
The SAS System
Analysis Variable : NOG
FAS |
N Obs |
Range |
CV |
|
|
|
|
e |
23 |
20.0000000 |
9.1612372 |
l |
12 |
23.0000000 |
11.8202275 |
m |
15 |
24.0000000 |
13.3156456 |
除MEANS过程外,还可以使用SUMMARY过程和UNIVERIATE过程描述数据。其中SUMMARY过程与MEANS过程类似,对初学SAS软件的读者来说,能够使用MEANS过程已经够用了。
2.1.2 频数分布表的编制
可以利用PROC FREQ过程编制频数分布表。
例 2.4 利用PROC FREQ过程,编制课本上例1.1原始数据的频数分布表。
解 将120天中每天新生儿体重超过3公斤的人数,建成一个名为2-3data.dat的外部数据文件,存储在A盘中。编制频数分布表的程序如下:
options linesize=76;
data baby;
infile ‘a:\2-3data.dat’;
input number @@;
run;
proc freq;
run;
INPUT语句中的@@称为双尾符,它的作用是在SAS从数据文件中读取数据时,读完一个数据行的第一个观测后指针并不移到下一行,而停留在观测后的第二列,接着读这一行的第二个观测,在指针移过数据行末尾时,自动为该行解固。因此,在建立数据文件时,每一个数据行可以输入几个观测。如建立2-2data.dat数据集时,每一个数据行就不仅是一个观测的四个值,而可以是几个观测,譬如
60 8.0 60 m 61 8.0 50 m 61 8.5 61 l
61 7.5 54 e 65 7.5 50 l 63 6.5 46 e
:
:
上述程序输出的结果如表2-5:
表2-5 例2.4输出的结果
The SAS System
|
|
|
Cumulative |
Cumulative |
NUMBER |
Frequency |
Percent |
Frequency |
Percent |
|
|
|
|
|
3 |
1 |
0.8 |
1 |
0.8 |
4 |
2 |
1.7 |
3 |
2.5 |
5 |
12 |
10.0 |
15 |
12.5 |
6 |
19 |
15.8 |
34 |
28.3 |
7 |
39 |
32.5 |
73 |
60.8 |
8 |
34 |
28.3 |
107 |
89.2 |
9 |
10 |
8.3 |
117 |
97.5 |
10 |
3 |
2.5 |
120 |
100.0 |
可以用同样的方法编制非数值型变量的频数分布表。
例 2.5 编制表2-3中“成熟早晚”的频数表。
解 data wheat;
infile ‘a:\2-2data.dat’;
input hop loe nog mature $;
run;
proc freq;
table mature;
run;
所得结果如下:
表2-6 例2.5输出的结果
The SAS System
|
|
|
Cumulative |
Cumulative |
MATURE |
Frequency |
Percent |
Frequency |
Percent |
|
|
|
|
|
e |
23 |
46.0 |
23 |
46.0 |
l |
12 |
24.0 |
35 |
70.0 |
m |
15 |
30.0 |
50 |
100.0 |
对于连续型数据,也可以用PROC FREQ过程编制频数分布表。
例 2.6 编制课本上表1-2高粱三尺三株高的频数分布表。
解 先建立一个名为a:\2-4data.dat的外部数据文件。SAS程序如下:
proc format;
value hfmt
141-143=’141-143’ 144-146=’144-146’ 147-149=’147-149’
150-152=’150-152’ 153-155=’153-155’ 156-158=’156-158’
159-161=’159-161’ 162-164=’162-164’ 165-167=’165-167’
168-170=’168-170’;
run;
data sorghum;
infile ‘a:\2-4data.dat’;
input hight @@;
run;
proc freq;
table hight;
format hight hfmt.;
run;
这里使用PROC FORMAT过程的目的是将数据按使用者的要求格式化。VALUE语句中要给出被定义的输出格式名,在这里称为hfmt。若以组界分组,还需加上“<”或“>”号,如143.5-<146.5=’144-146’等。在PROC FREQ过程的FORMAT语句中一定要在hfmt之后加上一个“.”。输出结果如下:
表2-7 例2.6输出的结果
The SAS System
|
|
|
Cumulative |
Cumulative |
HIGHT |
Frequency |
Percent |
Frequency |
Percent |
|
|
|
|
|
141-143 |
1 |
1.0 |
1 |
1.0 |
144-146 |
2 |
2.0 |
3 |
3.0 |
147-149 |
4 |
4.0 |
7 |
7.0 |
150-152 |
13 |
13.0 |
20 |
20.0 |
153-155 |
23 |
23.0 |
43 |
43.0 |
156-158 |
28 |
28.0 |
71 |
71.0 |
159-161 |
15 |
15.0 |
86 |
86.0 |
162-164 |
10 |
10.0 |
96 |
96.0 |
165-167 |
3 |
3.0 |
99 |
99.0 |
168-170 |
1 |
1.0 |
100 |
100.0 |
2.1.3 频数分布图的绘制
绘制离散型数据的柱状图,可以用GCHART过程。以课本上例1.1的数据为例,程序如下:
data baby;
infile ‘a:\2 -3data.dat’;
input number @@;
run;
proc gchart;
vbar number;
run;
如果需要水平条状图,只需将vbar改为hbar即可。执行上述程序的结果如下图:
图2-1 离散型数据的柱形图
用CAPABILITY过程绘制连续型数据的频率直方图是很方便的。最简单的程序如下:
data sorghum;
infile ‘a:\2-4data.dat’;
input hight @@;
run;
proc capability graphics noprint;
var hight;
histogram;
run;
上述的GRAPHICS和NOPRINT的含义分别是,打出高分辨率的图象和不打出概括性统计量表。执行上述程序的结果如下;
直方图的组距是程序自动选定的,组距的大小可以通过改变中值来调整。若组距定为3厘米,可以加进选项“midpoint=142 to 169 by 3”。图2-2是频率直方图,若要得到频数直方图,还需加入选项“vscale=count”。PROC CAPABILITY过程为:
proc capability graphics noprint;
var hight;
histogram / midpoint=142 to 169 by 3
vscale=count;
run;
|