描述统计
完成基础统计分析的几个常用过程
MEANS: 分类计算变量的常用统计量;
****UNIVARIATE: 计算单变量的统计量和分布的拟合检验(正态检验histogram /normal lognormal);
SUMMARY: 分类计算变量的常用统计量;
FREQ: 计算变量取值的频数;
CORR: 计算变量间的相关系数。
一、FREQ输出频数表格
PROC FREQ DATA=数据集名;
TABLES 变量*变量 变量*变量 . . ./
nocol(不显示列统计) norow(不显示行) nocum nofreq
nopercent missing list
out=数据集 outpct ;
WETGHT 变量名; #按照某个变量加权
BY 变量名; #按照某个分类变量统计
RUN;
(1)FREQ过程—TABLES语句常用选项:
LIST:print cross-tabulations in list format rather than grid
MISSING: includes missing values in frequency statistics
NOCOL : suppresses printing of column percentages in table
NOPERCENT: suppresses printing of percentages
NOROW NOFREQ NOCUM: 按行频数、频数和累计数
(2)例:咖啡店咖啡和客人类型相关研究
DATA orders;
INPUT Coffee $ Window $ @@;
datalines;
esp w cap d cap w kon w ice w kon d esp d kon w ice d esp d
cap w esp d cap d kon d . d kon w esp d cap w ice w kon w
kon w kon w ice d esp d kon w esp d esp w kon w cap w kon w
;
run;
PROC FREQ DATA = orders;
TABLES Window Window * Coffee;
RUN;
二、定义输出格式的FORMAT过程(对连续性变量分组)
PROC FORMAT library=saslib;
VALUE 格式名 范围1=格式化值1 ….
范围n=格式化值n ;
RUN;
注1:对字符型数据定义格式,格式名要加前缀$。
注2:若范围超过一个值,离散值可以用,或-用于连续区间,此外<表示到某个临界值范围但不包括该值。
例: ‘A’ = ‘Asia’
1,3,5,7,9 = ‘Odd’
50000-HIGH = ‘Not Affordable’
13 -<20 = ‘Teenager’
0 <- HIGH = ‘Positive Non Zero’
OTHER = ‘Bad Data’
例:
proc format; (用于Fitness数据集)
value oxyfmt
32.5-37.5='32.5-37.7'
37.5<-42.5='37.5-42.5'
42.5<-47.5='42.5-47.5'
47.5<-52.5='47.5-52.5'
52.5<-57.5='52.5-57.5'
57.5<-62.5='57.5-62.5' ;
value agefmt
low-39='YOUNG'
39<-<50='MIDDLE'
50 -high='OLD';
run;
Proc freq data=fitness;
format age agefmt. oxygen oxyfmt.;
tables group age / nocum;
tables age*oxygen / nocum;
tables group*age / list nocum;
tables group*age /out=out outpct;
run;
proc print data=out;
run;
三、MEANS和SUMMARY过程—描述统计分析
过程步:
PROC MEANS DATA=数据集名 maxdec=位数 fw=域宽 noprint 输出统计量名列;
VAR 变量名列;
CLASS 变量名列;
BY 变量名列;
ID 变量名;
OUTPUT OUT= 数据集名 记入数据集统计量名列;
RUN;
PROC SUMMARY DATA=数据集名 maxdec=位数 fw=域宽 print 输出统计量名列;
VAR 变量名列;
CLASS 变量名列;
BY 变量名列;
ID 变量名;
OUTPUT OUT= 数据集名 记入数据集统计量名列;
RUN;
MEANS过程选项:
MAX the maximum value
MIN the minimum value
MEAN the mean
MEDIAN the median
MODE the mode(new in sas9.2)
N number of non-missing values
NMISS number of missing values
RANGE the range
STDDEV the standard deviation
SUM the sum
CLM two-sided confidence limits
UCLM upper confidence limits
LCLM lower confidence limits
CSS corrected sum of squares离差平方和
USS uncorrected sum of squares平方和
ALPHA confidence level
CV coefficient of variation
SKEWNESS skewness
KURTOSIS kurtosis
Q1(P25) 25% quantile
Q3(P75) 75% quantile
P1,P5,P10,P90,P95,P99
STDERR standard error of mean
VAR variance
PROBT probability for Student’s t
T Student’s t
MAXDEC number of decimal places
FW field width
MEANS过程例—三种花顾客购买行为描述
数据步录入:
DATA sales;
INPUT CustomerID $ @9 SaleDate MMDDYY10.
Petunia SnapDragon Marigold;
Month = MONTH(SaleDate);
DATALINES;
756-01 05/04/2008 120 80 110
834-01 05/12/2008 90 160 60
901-02 05/18/2008 50 100 75
834-01 06/01/2008 80 60 100
756-01 06/11/2008 100 160 75
901-02 06/19/2008 60 60 60
756-01 06/25/2008 85 110 100
;
RUN;
***Proc Summary与Proc Means有相同的功能与用法.
后者缺省为print,将结果输出到OUTPUT窗;
前者缺省为noprint, 不输出结果到OUTPUT窗.
PROC SORT DATA = sales;
BY CustomerID;
* Calculate means by CustomerID, output sum and mean to new data set;
PROC MEANS NOPRINT DATA = sales;
BY CustomerID;
VAR Petunia SnapDragon Marigold;
OUTPUT OUT = totals MEAN(Petunia SnapDragon Marigold) =
MeanPetunia MeanSnapDragon MeanMarigold
SUM(Petunia SnapDragon Marigold) = Petunia SnapDragon
Marigold;
PROC PRINT DATA = totals;
TITLE 'Sum of Flower Data over Customer ID';
FORMAT MeanPetunia MeanSnapDragon MeanMarigold 3.;
RUN;
output用法
例:设输入数据集有变量X1,…,X5,以下给出OUTPUT语句及选项OUT=生成输出数据集包含统计量和名字:
(1) output out=b1 mean= ; /* 输出数据集B1中包含5个变量的均值,变量名为X1,...,X5 */
(2) output out=b2 mean=m1 m2 var(x3)= ; /* 输出数据集B2中包含变量X1,X2的均值,变量名为m1,m2;以及x3的方差,变量名字仍为X3 */
(3)output out=b3 mean(x3 x4)=m3 m4 std(x5)=s5; /* 输出数据集B3中包含变量X3和X4的均值,名为m3和m4, 变量X5的标准差存放在S5中 */
(4) output out=b4 mean= max(x1)= sum(x3)= /autoname;
/* 输出数据集B4中包含: ① 5个变量的均值,名为x1_Mean,..., 5_Mean;
② 变量X1的最大值为x1_Max; ③ 变量X3的总和为 x3_Sum . */
class用法
在CLASS语句中指定多分类变量时,MEANS过程提供WAYS语句、TYPES语句和选项NWAY,便于用户选择要计算和保存分类变量组合统计结果。
***WAYS语句用法: WAYS 数值1 数值2 数值3 …;
TYPES语句用法: TYPES 分类组合要求;
其中数值取值为0到分类变量个数之间的任意整数(包括0和分类变量个数),使用TYPES语句来选择需要输出到数据集中的分类组合种类,比在数据集后面使用选项WHERE更加节约时间和内存。
例:class varA varB varC;
ways 1 2; %ways=1 y一个一个分组进行统计
%ways=2 两个两个分类组合
等价于class varA varB varC;
types varA varB varC varA*varB varA*varC varB*varC;
如果仅需要输出不使用分类变量统计结果,可以使用”WAYS 0;”或者”TYPES ();”,在PROC MEANS语句中使用选项NWAY,可以使得输出数据集中只包含使用所有分类变量的情形。
四、UNIVARIATE过程–单变量特征的概括描述
(1)过程例
DATA class;
INPUT Score @@;
DATALINES;
56 78 84 73 90 44 76 87 92 75
85 67 90 84 74 64 73 78 69 56
87 73 100 54 81 78 69 64 73 65
;
RUN;
PROC UNIVARIATE DATA = class; +normal正态分布拟合优度及p-value +plot茎叶图
VAR Score;
HISTOGRAM Score/NORMAL;
PROBPLOT Score;
TITLE;
RUN;
(2)UNIVARIATE过程----变量分布的图形描述
PROC UNIVARIATE DATA=数据集名 noprint ;
VAR 变量名列 ;
HISTOGRAM 变量名列 / midpoints=中点列
normal(mu=均值 sigma=标准差 图象选项) exp(theta= 阈值 图象选项) lognormal(theta=阈值 图象选项) … … ;
***INSET 统计量关键名= ‘显示名’ 格式 ;
QQPLOT 变量名列 / square . . . ; %检验是否正态 直线
PROBPLOT 变量名列 / . . . ;
BY 变量名列 ;
ID 变量名 ;
RUN ;
(3) UNIVARIATE过程—输出统计量列表
样本量、均值、标准差、方差、偏度、峰度、未校正和校正的平方和、变异系数、均值的标准误差、位置参数为0的t检验、最大值、最小值、极差、中位数、上、下四分位数、四分位差、众数、1,5,10,90,95,99百分位数、5个最大的值和5个最小的值(用于数据检查)、W或D统计量用于正态分布拟合优度检验、茎叶图(stem-leaf plot)、盒子图(boxplot也称箱线图)、累计概率图(CDFPLOT)、概率-概率图(PPPLOT)、直方图(HISTOGRAM)、分位数图(QQPLOT,简称QQ图)
proc univariate data= sasuser. fitness noprint;
***histogram oxygen / midpoints = 32 to 60 by 4
normal(L=2 color=orange w=4);
***inset n mean(4.1) std(4.2);
run;
proc univariate data= sasuser. fitness noprint;
histogram oxygen/midpoints = 32 to 60 by 4
***normal(L=1 w=2 mu= sigma=)
lognormal(L=2 w=3 theta=30)
exponential(L=8 w=4 theta=30);
run;
quit;
***pctlpts(自由选择分位数)
pctlpre
五、置信区间
(1)置信限计算-MEANS过程:
PROC MEANS DATA=数据集名 输出统计量名列 maxdec=位数 fw=域宽 noprint
alpha=0.1 CLM LCLM UCLM;
VAR 变量名列;
CLASS 变量名列;
BY 变量名列;
ID 变量名;
OUTPUT OUT=数据集名 记入数据集统计量名列;
RUN;
(2)参数估计置信区间计算–UNIVARIATE过程
PROC UNIVARIATE DATA=数据集
CIBASIC <(<type=Lower|Upper|Twosided>
<ALPHA=值>)> …;
VAR 变量名列;
BY 变量名列;
RUN;
UNIVARIATE过程语句还有一些其它的选项,用于求分位数的置信限,
检验H0:=0 等.
六、假设检验
(1)单总体均值的t 检验(SAS 版本)
proc univariate data=bclass mu0=50 150 ;
var weight height;
Run;
成对变量如(x-y),可转换为单总体检验
(2)假设检验- 用TTEST过程进行两独立组的t检验
方差相等:t-检验
方差不相等:近似t-检验
proc ttest data=bclass alpha=0.1 ci=equal;/* ci=umpu|none */
class sex; #GROUP
var weight height;
run;
Equal- 等尾区间估计的检验方法;
upmu-一致最优无偏检验;左偏选最小
none-选择其一
数据集要求:
GROUP X
1 A1
1 A2
1 A3
2 B1
2 B2
2 B3
2 B4
DATA carsurvey;
INPUT Age Sex Income Color $;
DATALINES;
19 1 14000 Y
45 1 65000 G
72 2 35000 B
31 1 44000 Y
58 2 83000 W
;
RUN;
proc sort data=carsurvey;
by color;
run;
proc meanS data=carsurvey;
by color;
var Age Income;
output out =totals MEAN(Age Income)=
VAR(Age Income)=
STDDEV(Age Income)=
SKEWNESS(Age Income)=
KURTOSIS(Age Income)= /autoname ;
run;
proc univariate data=carsurvey;
var age;
histogram age /NORMAL
exponential;
qqplot age;
run;
proc format library=work;
value ss;
19-<30 = 'young';
30-<47 = 'mid';
47-<90 = 'old';
run;
proc SGPLOT data=carsurvey;
HBAR income/group=age;
run;
proc freq data=bronchitis order=data;
tables agegrp*level*bronch / cmh noprint;
weight n;
run;
freq、means、univariate三种描述性过程的output区别
freq 在table后(选项) (一般输出频数 频数百分比)
means (在 与var并列) output out=数据集 需要输出的统计量 (不设定的话 默认输出n min max mean ***并且在一列)1、 自己选择要输出的统计量后就会输出成不同的列 2、第一行会输出一行汇总数据(一般无用)
univariate (在与var并列)output out=数据集 需要输出的统计量 ***(不设定的话 只输出var的值)
Kde-二元非参核密度估计
proc kde data=water out=bivest;
var mortal hardness;
run;
proc g3d data=bivest;
plot hardness*mortal=density;
run;
非参数分布检验:
***画图
散点图
sgplot过程 scatter X=a Y=b
gplot过程 plot ay
条形图
sgplot过程 vbar或hbar /category(分类)= respense(响应变量)=
直方图
univariate过程 histogram&inset(加入描述性变量)
***正态检验
univariate过程 histogram /normal lognormal
不服从正态:取log
***方差等价检验
ttest 过程
***变量相关性检验
corr过程 var a;with b (两组多因素变量之间相关系数)或者 var a b (选项(与data并列) spearman pearson kendall nosimple)(相关性矩阵)partial c(排除c的因素影响做a和b的相关性)
***置信区间
univariate过程nu0= cibasic(type=lower|upper)
means过程 clm uclm lclm
*假设检验
正态总体(双侧检验?_0:m =m_0) univariate过程 mu0=(与data并列);
两组比较(两独立样本均值的t 检验)ttest过程 ci=equal(等尾检验) umpu(最优一致无偏)
非参数检验 npar1way 过程 (选项(与data并列) wilcoxon) 看卡方
配对检验
ttest过程 paired ab
freq过程 var ab/agree
sgplot /category response
means clm uclm lclm
univariate normal mu0= cibasic
var
histogram /normal