BY <变量名列> ; FREQ <变量名> ; WEIGHT <变量名> ; ID <变量名> ; OUTPUT OUT= <数据集名> 关键字= <新变量名列>... pctlpts=<百分位数, ...> pctlpre=<新变量名列>] ; 按变量名列分组统计,要求数据集已按该变量名列排序 表明该变量为分析变量的频数 表明分析变量在统计时要按该变量权重 输出时加上该变量作为索引 指定统计量的输出数据集名 指定统计量对应的新变量名 指定需要的百分位数 指定所需百分位数对应的输出变量名 如果省略所有非必需的语句和选项,则UNIVARIATE过程按默认情况输出全部变量的全部常用统计量。 5.2.2 语法说明 【选项】
Univariate过程常用的选项如下:
? ? ? ?
NOPRINT 禁止统计报告在OUTPUT视窗中输出 PLOT 绘出茎叶图、箱式图和正态概率图 FREQ 给出频数表
NORMAL 对变量进行正态性检验
【关键字】
SAS中用关键字来指定所需要的统计量,事实上结果输出中用的就是各种关键字,常用的关键字有:
? ? ?
基本统计量 N MEAN STD(标准误) CV SUM VAR(方差) RANG 百分位数描述 MIN P1 P5 P10 Q1 MEDIAN Q3 P90 P95 P99 MAX 与假设检验有关的统计量 STDMEAN(标准误) T
5.2.3 结果解释
在默认的情况时,Univariate过程会输出绝大部分统计量,此时的输出结果如下:
Variable=变量名 变量标签
Moments 和矩有关的统计量 Quantiles(Def=5) 分位间距统计量 N 样本量 Sum Wgts 权重总和 100% Max 最大值 99% 99%百分位数
Mean 均数 Sum 总和 75% Q3 75%百分位数 95% 95%百分位数
21
Std Dev 标准差 Variance 方差 50% Med 50%百分位数 90% 90%百分位数
Skewness 偏度系数 Kurtosis 峰度系数 25% Q1 25%百分位数 10% 10%百分位数
USS 未校正平方和 CSS 校正平方和 0% Min 最小值 5% 5%百分位数
CV 变异系数 Std Mean 标准化均数 1% 1%百分位数
T:Mean=0 变量总体均数为0的t检验 Pr>|T| t检验的p值 Range 全距 Num ^= 0 变量值非0的例数 Num > 0 变量值大于0的例数 Q3-Q1 四分位间距
M(Sign) 变量总体均数为0的符号检验 Pr>=|M| 符号检验的p值 Mode 众数 Sgn Rank 变量总体均数为0的秩和检验 Pr>=|S| 秩和检验的p值 Extremes 极端值统计 Lowest Obs Highest Obs 老 幺 (观察值序号) 五大值(观察值序号) 次小值 (观察值序号) 四大值(观察值序号) 三小值 (观察值序号) 三大值(观察值序号) 四小值 (观察值序号) 次大值(观察值序号) 五小值 (观察值序号) 大哥大(观察值序号)
5.2.4 应用实例
例5.3 某地101例健康男子血清总胆固醇值测定结果已存入文本文件“c:\%user\\WT1_1.dat”中,请绘制直方图,计算均数CV、中位数M、p2.5和p97.5(卫统p233 1.1题)。
解:UNIVARIATE过程的默认输出中并不给出p2.5和p97.5,因此程序中要加以相应修改,最后在OUTPUT视窗中只会输出所需的几个统计量,具体程序如下:
libname a 'c:\%user'; data a.wt1_1; infile 'c:\%user\\wt1_1.dat'; input x @@; proc gchart data=a.wt1_1; vbar x ; var x; output out=temp pctlpts=2.5,97.5 pctlpre=per; proc print data=temp; run; 指定c:\%user文件夹为数据库a 数据步开始,指定要建立的数据集为a库的wt1_1 采用外部文件读入方式,文件名为c:\%user\\WT1_1.dat 输入的变量为x,采用连续输入的格式 调用绘图程序步gchart,所用数据集为a.wt1_1 绘出竖直条图,用于绘图的变量为x 要分析的变量为x 指定输出数据集为work.temp, 指定输出p2.5和p97.5,其输出变量名以per开头。 将数据集work.temp的内容打印输出 开始运行以上程序 、标准差s、变异系数
proc univariate data=a.wt1_1 noprint; 调用程序步univariate,并且禁止在OUTPUT视窗中输出 n=n mean=xbar std=s cv=cv median=m 将n、mean、std、cv、median按指定变量名存入 22
例5.4 50例链球菌咽峡炎患者的潜伏期如下,计算其均数、中位数和几何均数(卫统p233 1.3题)。
12~ 1
24~ 7
36~ 11
48~ 11
60~ 7
72~ 5
84~ 4
96~ 108~120 2 2
解:由于几何均数无法直接得到,因此将数据集加以对数变换,求出均数后再行
反对数变换得到几何均数,程序如下:
libname a 'c:\%user'; data a.wt1_3; input x f @@; x=x+6; logx=log(x); cards; 2 ; proc print; proc univariate data=a.wt1_3 noprint; var x logx; freq f; output out=temp n=n mean=xbar logxmean median=m ; data temp2; set temp; g=exp(logxmean); drop logxmean; proc print data=temp2; run; 数据步开始,指定要建立的数据集为work.temp2 让work.temp2继承work.tmep的全部数据 产生新变量g,它等于elogxmean指定c:\%user文件夹为数据库a 数据步开始,指定要建立的数据集为a库的wt1_3 输入的变量为x和f,采用连续输入的格式 将变量x的值更正到每个组段的组中值处 定义新变量logx为变量x的自然对数,用于算出几何均数 数据块开始 12 1 24 7 36 11 48 11 60 7 72 5 84 4 96 2 106 数据块 数据块结束 将数据集a.wt1_3的内容打印输出 调用程序步univariate,并且禁止在OUTPUT视窗中输出 要分析的变量为x和logx 指定变量f代表分析变量x的频数 输出数据集和统计量的定义 在work.temp2中删除临时变量logxmean 输出数据集work.temp2中的数据 开始运行以上程序 请注意,这里UNIVARIATE过程有两个分析变量X和LOGX,因此在OUTPUT语句中MEAN=后跟了两个变量名,它们分别存储两个变量的均数,而其余的关键
字后只有一个变量名,则它们只存储分析变量序列的第一个变量X的统计结果。
§5.3 MEANS过程
Means过程提供单个或多个变量的简单描述。和Univariate过程相比,它更倾向于描述已经明确样本所在总体符合正态分布的变量,因此它不提供百分位数,
23
但可以提供95%可信区间。同时在多个变量输出时,它的输出格式紧凑,便于阅读。
5.3.1 语法格式
PROC MEANS [ DATA= <数据集名> [选项] 指定要分析的数据集名及一些选项 [统计量关键字列表] ] ; 列出需要的统计量 [VAR <变量名列>; 要分析的变量名列 BY <变量名列>; 按变量名列分组统计,要求数据集已按变量名列排序 CLASS <变量名列>; 按变量名列分组统计,不要求数据集排序 FREQ <变量名>; 表明该变量为分析变量的频数 WEIGHT <变量名>; 表明分析变量在统计时要按该变量权重 ID <变量名列>; 输出时加上该变量作为索引 OUTPUT
Means过程常用的选项如下:
? ?
NOPRINT 禁止统计报告在OUTPUT视窗中输出
MAXDEC=n 给出列表输出的最大小数位数,缺省值为2
【统计量关键字】
MEANS过程中常用的统计量关键字有:
? ?
基本统计量 N MEAN STD CV SUM VAR RANG MIN MAX
与假设检验有关的统计量 STDERR(标准误) T PRT(与t对应的p值) LCLM(可信区间下限) UCLM(可信区间上限)
注意Means过程中标准误的关键字是STDERR,而Univariate过程中为STDMEAN,另外LCLM和UCLM这两个关键字也是Univariate过程所没有的。 5.3.3 结果解释
和Univariate过程不同,MEANS过程在默认情况下只输出样本量、均数、标准差、最小值和最大值,如例5.1的数据,如果MEANS过程不加任何选项,则输出如下:
Analysis Variable : X 分析变量名为X
24
N Mean Std Dev Minimum Maximum --------------------------------------------------------------- 110 119.7272727 4.7413254 108.2000000 132.5000000 ---------------------------------------------------------------
可见Means过程的输出结构极为紧凑。 5.3.4 应用实例 例5.5 给出例5.1的均数
、标准差s、变异系数CV和95%可信区间,并检验
其总体均数是否为0(卫统p233 1.1题)。 解:如果数据集a.wt1_1已经建立,则程序如下:
proc means data=a.wt1_1 n mean std cv lclm uclm t prt ; var x; run; §5.4 TTEST过程
顾名思义,TTEST过程就是用于进行两样本均数的比较,它给出两总体方差齐和不齐时的检验结果,并同时做方差齐性检验。综合两者的结果,即可做出判断。
事实上,ttest过程的功能非常有限,只能做一般的两样本t检验,对于按频数表格式输入的资料,我们只能用以后要介绍的ANOVA等过程来分析。 5.4.1 语法格式
PROC TTEST [ DATA= <数据集名> [COCHRAN] ] ; CLASS <变量名>; [ VAR <变量名列>; BY <变量名列> ] ; 5.4.2 结果解释
以例5.2的TTEST过程为例,它的输出结果如下:
TTEST PROCEDURE Variable: VALUE 分析变量名为VALUE
GROUP N Mean Std Dev Std Error Variances T DF Prob>|T|
25
指定要分析的数据集名 要求在方差不齐时做COCHRAN近似 必需,指定一个两分类的分组变量 指定要检验的变量名列 按变量名列分组统计