對於SAS有個簡單的基本認識後,我們即可往下個目標邁進。SAS常被研究者用來做資料處理與統計分析,因此依照階段我們可以區分為DATA step(資料處理)與PROC step(執行統計運算),為能使初學者能夠輕易上手,本篇文章將利用範例針對資料處理與分析介紹幾個常用的語法。
一、先思考未來
為了增加Output的可讀性,首先我們需要對SAS做一些設定,選項有:
l CENTER/NOCENTER:結果是否置中
l DATE/NODATE:是否要呈現日期
l PAGENO = n:每次頁碼都從第n頁開始
l NONUMBER:不顯示頁碼
l LINESIZE/LS = n:一行的字元數
l PAGESIZE/PS = n:設定每頁的行數
l FIRSTOBS = n:從第幾筆資料開始抓
l OBS = n 或 Max:最多抓到第幾筆
Ex:
OPTIONS CENTER DATE LS=80 PAGENO=1 NODATE;
|
二、雞同鴨講
撰寫語法,最怕就是軟體不知道你想要表達什麼!在SAS中,一段「敘述句」為指令的最小單位,它可能是用來協助資料做處理(跟在DATA step之後),或可能協助資料進行分析(跟在PROC step之後),亦可以在程式中單獨作業(如範例中的CARDS)。範例中的『INPUT x1 x2 x3;』則是一段「敘述句」,而敘述句的規則有以下幾點:
(1).以關鍵字開始,以分號結束,並以RUN做程式的進行
(2).敘述句可開始或結束於任何一個欄位,並可用空格或空白增加程式的可讀性
(3).可利用『************我是註解*************;』
or『/*我是註解*/』做註解
(4).變數名稱不得超過32字元、第一個字元須是文字字元或底線(_)、名稱中間不可有空白或特殊符號(%,#,…)
(5).變數可分為文字變數與數值變數
************我是註解*************;
1. DATA CASE ;
2. INPUT x1 x2 x3; /*我是註解*/
3. CARDS;
4. 2 11 8
5. 3 10 6
6. 2 6 2
7. ;
PROC PRINT;
TITLE '資料集' ;
RUN;
三、資料的誕生
資料可分為內部資料(經由SAS建檔的資料,可由SAS直接讀取,如*.sas7bdat)、將原始資料放到程式裡(用CARDS、CARDS4、DATALINES讀取:一般範例最常見)與外部資料(其他非SAS建檔的資料,如*.txt、*.dat、Excel檔),又以文字檔最常使用(佔用記憶體小),因此本段只針對外部的文字檔作讀取資料的介紹。
(1)『DATA CASE;』指建立一個名叫「CASE」的資料集,資料集的名稱可以自取,只要使用者能夠區別就行。
(2)『INFILE 'C:\D001.txt';』利用INFILE+路徑讀入資料。
INFILE的選擇項:【missover】宣告資料含有遺失值
(3)『INPUT ID 1-4 Gend 5 age 6-7 Mar 8 Height 9-14 ;』告訴SAS所輸入的原始資料之變數名稱及格式,由以上敘述句可知資料中的1-4行為ID、第5行為性別、第6-7行為年齡、第8行為婚姻狀況、第9-14行為身高
(4)以上敘述所輸入原始資料之變數名稱及格式的方法稱為欄位輸入法,另外還有列名輸入法(適用於超簡單格式)、格式輸入法(適用於複雜的格式),雖然欄位輸入法在變數多的時候會變得較複雜,但對於初學者來說,利用欄位輸入法讀資料可降低錯誤率的發生。
(5)利用【Title】使輸出報表含有標題增加易讀性
(6)文字檔鍵入時,可用「.」表示missing,也可用「」空白當作missing。
(7)利用【MISSING】宣告遺漏值
INPUT的選擇項:
【$】宣告此變數為文字變數,如範例中的ID為文字變數
【.1】宣告此變數的小數位數為何,ex:若有一筆資料為1773,則SAS會判斷為177.3,若一筆資料為172.39,SAS仍會正確讀取172.39
【@】宣告一列一列讀取
【@@】宣告連續讀取
DATA CASE;
INFILE 'C:\D001.txt' missover;
INPUT ID $ 1-4 Gend 5 age 6-7 Mar 8 Height 9-14 .1;
MISSING 999;
PROC PRINT;
TITLE '資料集' ;
RUN;
四、代號內心身處的秘密(變數註解與數值註解)
我們都知道在keyin的時候,常以代號替代原本的變數名稱與數值名稱,此時如果未使用變數註解與數值註解,將會大大降低Output的可讀性。
(1)先利用【PROC FORMAT ;】定義數值名稱的格式,【VALUE sexfmt 1='男' 2='女' ;】
其實sexfmt是可變更的,但為了確保不會錯亂,通常以變數名稱+fmt命名
(2)接著利用INPUT讀進變數名稱
(3)接下來利用【LABEL sex ='性別'】定義變數註解。
(4)接著利用【FORMAT sex sexfmt.】用以連接變數與數值格式,要小心的是每一個fmt後都要加一個『.』。
PROC FORMAT ;
VALUE sexfmt 1='男' 2='女' ;
VALUE agefmt 1='20歲以下' 2='21-30歲' 3='31-40歲' 4='41歲以上' ;
VALUE edufmt 1='國中以下' 2='高中職' 3='大學' 4='研究所以上' ;
DATA DEMO ;
INPUT sex 1 age 2 edu 3 ;
LABEL sex ='性別' /*變數註解*/
age ='年齡'
edu ='教育程度' ;
FORMAT sex sexfmt. age agefmt. edu edufmt.; /*數值註解*/
CARDS ;
114
213
122
231
144
243;
PROC PRINT;
RUN;
-------------------------------------------------------------------------------------------------------------------待續