何謂資料集?
SAS程式中的資料,都會先經由DATA STEP轉換成可使用的資料型態之後,才被SAS所讀取。這裡所介紹的是建立一個資料集的前置作業。包含如何給定資料集名稱,如何建立暫時性與永久性資料集。
永久性資料集
在建立資料集時,明確的指出是來自那個資料館指引 (Library Reference),這便是永久性資料集。為了與暫時性資料集區隔,Library Reference名稱必須有別與"Work"。
完整的永久資料集名稱包含兩個部分:
前半部
指出資料集所存放的位置,並且賦予其定義
Libname 資料館索引名稱 "資料集存放位置"
Ex: Libname lib_ref "C:\"
後半部
儲存在資料館指引內部的資料集名稱
Data 資料館索引名稱.資料集名稱
Ex: Data lib_ref.mydata
以SAS 9.1.3為例,當建立永久資料集之後,會在資料館指引的儲存位置產生一個檔案,名為:
資料集名稱.sas7bdat
Ex: mydata.sas7bdat
暫時性資料集
建立資料集時如未指定資料館指引名稱,預設會儲存到work這個資料庫指引之中,每次關閉SAS主程式之後,會自動清楚Work資料庫指引之中的資料,故稱為暫時性資料集。
使用規則:
Data 資料集名稱
Ex: data mydata
輸入資料集
敘述原始資料的變數與格式
1.欄位輸入法
對輸入的變數資料所佔有的欄位之"位置"做明確的宣告
1.1特性
- 原始資料欄位必須固定且對齊
- 欄位可重複被讀取
- 當定義為數值變數時,如果遇到非數字的符號,系統將自動判定為 miss value。
- 無論是文字變數或者是數值變數,都可以用空白來作為Miss value。
- 而數值變數也可以.來代表 miss value。
1.2形式
input 變數名 $ 起點-終點 .小數位數
Ex: input x1 $ 1-3 x2 4-8 .1
變數x1為文字性變數 欄位為1-3 變數x2為數值變數 欄位4-8 一位小數
- 變數名稱之後有"$"者,為文字性變數
2.列名輸入法
以自由格式來輸入原始資料,無須指定其他格式,只需要以空格來區隔不同的變數,以及定義是數值變數還是文字變數
2.1特性
- 不需固定與對齊,僅以空白作區隔
- 欄位不可重複讀取 (欄位輸入法可)
- 遺失值必須以"."符號來表示
- 讀入的變數無法包括空白,否則會被視為兩個分開的變數
- 變數長度最大為8個字元,除非事先宣告變數長度,否則系統自動判讀為miss value
2.2形式
input 變數名 $
3.格式輸入法
利用給定的的格式長度將變數資料輸入,有兩種不同的宣告方式
3.1第一種宣告方式
在變數後面直接給定輸入變數的長度
input var1 $ length1 var2 length2 var3 length3
Ex: input x1 6. x2 $ 5. X3 6.
變數x1為數值變數,長度為6。變數x2為文字變數,長度為5。x3為數值變數,長度為6。
注意:格式輸入法在長度後面要標注".",否則會被SAS判定為欄位輸入法。
3.2第二種宣告方式
在input敘述句中分成兩個部分,第一部份為各變數名稱,第二部分為各變數之長度,兩部分以括弧包圍
input (var1 var2 var3) ($ length1 length2 length3 )
範例:
input (x1 x2 x3) ($ 2. 3. $ 8.)
變數x1為文字變數,長度為2。變數x2為數值變數,長度為3。變數x3為文字變數,長度為8
3.3第二種方法的衍生用法
除了像第二種用法分成兩部份處理之外,還有宣告連號變項的格式。
input (var1-var3 var4 var5) (3*5. 6. 8.)
4.定名輸入法
這種輸入方式最大的特點,在於資料以Proc Print顯示之後,會顯示變數名稱與等號
input var1= $ var2 var3
Ex: input id= $ sex= $ age
id與性別顯示時,會呈現:id=timshan sex=M 依此類推。
以內部資料輸入資料
Cards敘述句
使SAS讀入syntax內部的資料,要使用Cards敘述句,此乃DATA Step階段最後一個有關鍵字的敘述句,使用方式如下:
input …以下省略
Cards;
timshan m 24
lydia f 23
mizora f 23
;
Cards4敘述句
如果資料之中包含";",則改用Cards4敘述句來替換原有的Cards敘述句,使用方式如下:
input …以下省略
Cards4;
timshan; m 24
lydia; f 23
mizora; f 23
;;;;
以外部資料輸入資料
filename敘述句
此敘述句是用來建立與外部檔案之連結,可以是匯入,也可以是匯出,端看搭配的敘述句是infile還是file而定,使用方式如下:
filename 外部檔案標籤名 "pathway\filename"
Ex: filename timshan "C:\sasdata\data0.dat"
- 標籤名為自行給定的,在上述的例子中,實際的檔名雖然是data0.dat,但在sas的syntax之中,我將data0.dat定義為timshan。
infile與input敘述句
infile敘述句是藉由input敘述句指定變數與格式,將外部檔案的資料呼叫到sas的資料集之中。
直接匯入
infile "C:\sasdata\data0.dat"
input …以下省略
間接匯入
filename timshan "C:\sasdata\data0.dat"
infile timshan
input …以下省略
file與put敘述句
與infile敘述句相反,file敘述句利用put敘述句將指定的變數名稱與格式,從資料集寫入到外部檔案之中。
直接匯出
file "C:\sasdata\data0.dat"
put …規則同input,故省略
間接匯出
filename timshan "C:\sasdata\data0.dat"
file timshan
put …以下省略
為了避免因人為錯誤導致外部檔案遺失,建議infile與file所連結的外部檔案,為不同的檔案,因此會有以下的用法:
filename timshan "C:\sasdata\data0.dat"
filename lydia "C:\sasdata\data1.dat"
infile timshan
input …
file lydia
put
注意:被匯入的外部檔案為data0.dat,匯出的外部檔案則為data1.dat,如此將可避免原始資料因人為錯誤而被覆寫
下一堂課:資料集變數的修飾