SAS:(2)資料集的介紹

何謂資料集?

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,如此將可避免原始資料因人為錯誤而被覆寫

下一堂課:資料集變數的修飾

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License