分析分类数据
一.列举变量的三种方法:
1.直接罗列变量
2.variable_name_1 -- variable_name_2表示包含了数据集从variable_name_1到variable_name_2之间依次排序的所有变量。
3.有相同字根的变量可以使用ROOTn-ROOTm,如果我们记录了50个选择题,则可以命名为QUES1、……、QUES50
二.添加标签
1.为变量添加标签,利用LABEL语句给每个变量加上标签;
2.为变量值添加标签:第一步,为每个变量定义变量值的内容;第二步,用FORMAT语句把变量名和定义的格式语句连接
在format语句中,每个格式名后应有一个(.)句号
3.需要年龄组而不是实际年龄时,在定义格式里写出年龄分组,在input语句里建立新的关于年龄分组的变量,并运用if-then语句写各年龄落在哪一组,label语句里注明关于年龄分组变量的释义。
PROC FORMAT;
VALUE $SEXFMT '1'='Male'
'2'='Female'
OTHER='Miscoded';
VALUE $RACE '1'='White'
'2'='African AM.'
'3'='Hispanic'
'4'='Other';
VALUE $OSCAR '1'='Single'
'2'='Married'
'3'='Widowed'
'4'='Divorced';
VALUE $EDUC '1'='High Sch or Less'
'2'='two Yr. College'
'3'='Four Yr. College'
'4' = 'Graduate Degree';
VALUE LIKERT 1 = 'Str Disagree'
2 = 'Disagree'
3 = 'No opinion'
4 = 'Agree'
5 = 'Str Agree'
VALUE AGEFMT 1 = '0-20'
2 = '21-40'
3 = '41-60'
4 = 'GREATER THAN 60'; ***对定义变量名的格式
run;
DATA QUEST;
INPUT ID $ 1-3
AGE 4-5
GENDER $ 6
RACE $ 7
MARITAL $ 8
EDUCATION $ 9
PRESIDENT 10
ARMS 11
CITIES 12;
IF AGE GE 0 AND AGE LE 20 THEN AGEGRP = 1;
ELSE IF AGE GT 20 AND AGE LE 40 THEN AGEGRP = 2;
ELSE IF AGE GT 40 AND AGE LE 60 THEN AGEGRP = 3;
ELSE IF AGE GT 60 THEN AGEGRP= 4 ;
LABEL MARITAL="Marital Status"
EDUCATION="Education Level"
PRESIDENT="President Doing a Good Job"
ARMS="Arms Budget Increase"
CITLES= "Federal Aid to Cities"; ***为变量定义标签
FORMAT GENDER $SEXFMT.
RACE $RACE.
MARITAL $OSCAR.
EDUCATION $EDUC.
PRESIDENT ARMS CITLES LIKERT.; ***用FORMAT语句把变量名和定义的格式语句连接
DATALINES;
001091111232
002452222422
003351324442
004271111121
005682132333
006651243425
;
PROC FREQ DATA=QUEST;
TABLES GENDER -- AGEGRP;
RUN;
(一些输出结果)
还有一种不生成新变量的情况下重新编码AGE
PROC FORMAT;
VALUE AGROUP LOW-20 = '0-20'
21-40 = '21-40'
41-60 = '41-60'
61-HIGH='GREATER THAN 60'
. ='DID NOT ANSWER'
OTHER ='OUT OF RANGE';run;
一旦定义了格式,我们就能把格式和变量关联起来。如果只想在proc freq里重编码,就将format语句放在proc步骤里:
PROC FREQ DATA=QUEST;
TABLE AGE;
FORMAT AGE AGROUP.;
RUN;
三.列联表
DATA ELECT;
INPUT GENDER $ CANDID $ ;
***Note: only sample data here;
DATALINES;
M DEWEY
F TRUMAN
M TRUMAN
M DEWEY
F TRUMAN
;
PROC FREQ DATA=ELECT;
TABLES GENDER CANDID
GENDER*CANDID/CHISQ;***输出列联表,并进行卡方检验
RUN;
DATA CHISQ;
INPUT GROUP $ OUTCOME $ COUNT;
DATALINES;
DRUG ALIVE 90
DRUG DEAD 10
PLACEBO ALIVE 80
PLACEBO DEAD 20
;
PROC FREQ DATA=CHISQ;
TABLES GROUP*OUTCOME / CHISQ;
WEIGHT COUNT;
RUN;
得到结果部分输出:
必须要加上weight 语句,没有weight语句出现的观测值将都是1.
DATA CHISQ;
N + 1;
DO ROW = 1 TO 2;
DO COL = 1 TO 2;
INPUT COUNT @;
OUTPUT;
END;
END;
DATALINES;
3 5 8 6
10 20 30 40
;
PROC FREQ DATA=CHISQ;
BY N;
TABLES ROW*COL / CHISQ;
WEIGHT COUNT;
RUN;
5.配对样本的McNemar检验
例如判断观看禁烟广告前后对人们吸烟态度的影响,需要在proc freq里的table语句后面加/AGREE得到McNemar卡方统计量和Kappa统计量,
当McNemar的p值小于0.05时,认为禁烟广告有助于改变人们的吸烟态度。
对已有列联表计算McNemar卡方统计量:
PROC FORMAT;
VALUE $OPINION 'P'='Positive'
'N'='Negative';
run;
DATA MCNEMAR;
LENGTH BEFORE AFTER $1; ***给变量设定固定长度1,只需要1个字节来存储,如果不设置,将分配8个字节存储;
INPUT BEFORE $ AFTER $ COUNT;
FORMAT BEFORE AFTER $OPINION.;
DATALINES;
N N 32
N P 15
P N 30
P P 23
;
PROC FREQ DATA=MCNEMAR;
TABLES BEFORE*AFTER/AGREE;
WEIGHT COUNT;
RUN;
Kappa统计量一般用于测量两个评分者之间的一致性,如两个医生对患者的诊断结果,Kappa总是小于等于1的,越趋近于1,一致性越高。
6.针对案例-对照设计,优势比是常用的统计量
结果 | |||
案例 | 对照 | ||
接触 | 是 | 50 | 20 |
否 | 100 | 130 |
从表格看出案例组中接触苯的人的百分比更高,案例组苯接触的优势为50/100,对照组的优势为20/130,优势比为(50/130)/(20/130)
运行时在proc freq里的table后加/CHISQ CMH
对于群组研究,相对风险统计量更合适
结果 | |||
心脏病 | 无心脏病 | ||
胆固醇 | 高 | 20 | 80 |
低 | 15 | 135 |
计算相对风险运行时在proc freq里的table后加/CMH