本篇主要通過案例分析, 瞭解和掌握sas的一些基礎知識。
基礎知識點有:
目錄
創建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;