本篇主要通过案例分析, 了解和掌握sas的一些基础知识。
基础知识点有:
目录
创建sas数据集
了解proc mean & proc freq 过程步
给变量添标签
给变量值添加标签
重编码数据
用输出格式重编码变量
创建sas数据集
data quest;
input ID $ 1-3
AGE 4-5
GENDER $ 6
RACE $ 7
MARITAL $ 8
EDUCATION $ 9
PRESIDENT 10
ARMS 11
CITIES 12;
DATALINES;
001091111232
002452222422
003351324442
004271111121
005682132333
006651243425
;
run;
了解proc mean & proc freq 过程步
/*
maxdec=2 表示保留小数点后两位
n 表示计算未缺失观测值数量
mean 表示计算平均数
std 表示计算标准差
clm 表示计算平均数的95%置信区间
*/
proc means data=quest maxdec=2 n mean std clm;
title "questionnair analysis";
var age;
run;
proc freq data=quest;
title "Frequency counts for categorical variables";
tables GENDER RACE MARITAL EDUCATION PRESIDENT ARMS CITIES; /*tables 语句后,列出需要计算频数的各个变量*/
/*tables GENDER -- CITIES; /*符号--, 表示包含数据集从GENDER到CITIES之间依次排列的所有变量*/
run;
给变量添标签
**给变量添标签;
/*可以利用label语句给每个变量名打上标签,但标签字符至多包括256个字符(每个空格算一个字符) 且必须在单或双引号内*/
data quest;
input ID $ 1-3
AGE 4-5
GENDER $ 6
RACE $ 7
MARITAL $ 8
EDUCATION $ 9
PRESIDENT 10
ARMS 11
CITIES 12;
label MARITAL = "婚姻状况"
EDUCATION = "教育水平"
PRESIDENT = "对总统工作的评价"
ARMS = "增加军费的开支"
CITIES = "对大城市提供政府援助";
DATALINES;
001091111232
002452222422
003351324442
004271111121
005682132333
006651243425
;
run;
给变量值添加标签
**给变量值添加标签(输出格式);
/*1.为每个变量定义变量值的内容*/
/*2.使用format语句与1个或多个变量名联系起来*/
/*
$SEXFMT 表示输出格式名 (长度为1-32个字符);
'1' 表示变量值
'Male' 表示输出格式值(最长为32767字符)
输出格式名设置注意点:
1.最好不以数字结尾,不可与sas内置格式名相同, 格式名和变量名可以相同;
2.可以是一个单独值、一个范围、关键词或三者结合;
3.若对字符变量定义输出格式,格式名必须以符号"$"开头;
*/
/*
在DATA步骤或PROC步骤中均可以使用format语句;
若把format语句放在data步,在之后的的所有过程中格式的值和指定的变量关联;
若把format语句放在PROC步,格式的值将只影响该过程;
*/
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 = '>60'
;
run;
/*format语句放在DATA步骤中*/
data quest;
input ID $ 1-3
AGE 4-5
GENDER $ 6
RACE $ 7
MARITAL $ 8
EDUCATION $ 9
PRESIDENT 10
ARMS 11
CITIES 12;
label MARITAL = "婚姻状况"
EDUCATION = "教育水平"
PRESIDENT = "对总统工作的评价"
ARMS = "增加军费的开支"
CITIES = "对大城市提供政府援助"
;
format GENDER $SEXFMT. /*在format语句中,每个格式名后应有一个句号(.),目的有助于区别变量名和格式名*/
RACE $RACE.
MARITAL $OSCAR.
EDUCATION $EDUC.
PRESIDENT ARMS CITIES LIKERT.
;
DATALINES;
001091111232
002452222422
003351324442
004271111121
005682132333
006651243425
;
run;
重编码数据
**重编码数据;
/*
if condition then statement;
else if condition then statement;
*/
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 > 0 and age <= 20 then AGEGRP = 1;
else if age > 20 and age <= 40 then AGEGRP = 2;
else if age > 40 and age <= 60 then AGEGRP = 3;
else if age > 60 then AGEGRP = 4;
label MARITAL = "婚姻状况"
EDUCATION = "教育水平"
PRESIDENT = "对总统工作的评价"
ARMS = "增加军费的开支"
CITIES = "对大城市提供政府援助"
AGEGRP = "年龄组"
;
format GENDER $SEXFMT.
RACE $RACE.
MARITAL $OSCAR.
EDUCATION $EDUC.
PRESIDENT ARMS CITIES LIKERT.
;
DATALINES;
001091111232
002452222422
003351324442
004271111121
005682132333
006651243425
;
run;
proc freq data=quest;
tables GENDER -- AGEGRP;
run;
用输出格式重编码变量
/*使用输出格式重编码变量*/
/*在不生成新变量的情况下重编码AGE的方法*/
/*
关键词 LOW , HIGH, OTHER
LOW & HIGH: 分别用来指定数据集中最小值和最大值(不包括缺失值) ;
OTHER: 代表在之前设定的格式范围中没有出现的其他值;
LOW-20 :表示从最小值到20之间的所有值;
注意:数值型变量中,关键词LOW不包括缺失值,但字符型型变量则包括;
*/
proc format;
value AGEGRP LOW-20 = '0-20'
21-40 = '21-40'
41-60 = '41-60'
60-HIGH = '>60'
. = 'NULL'
OTHER = 'OUT OF RANGE'
;
run;
proc freq data=quest;
tables age;
format age AGEGRP.;
run;