Leo Yeh's Blog

SAS 快速入門 (4)

教學目標

撰寫 SAS 程式快速入門之讀取其它非標準格式的原始資料,適合對象為沒有學過 SAS 程式,但想學 SAS 程式的使用者。

重點概念

告訴 SAS 我們的原始資料在哪裡?一般來說,我們會透過 DATA STEP 讀取原始資料,在上一篇我們主要介紹如何在 SAS 中讀取文字和數值標準格式的原始資料,然而在此篇我們主要介紹如何在 SAS 中讀取其它非標準格式的原始資料,基本上可分為三種讀取方式,分別為:

  1. 讀取非標準格式資料。
  2. 讀取凌亂原始資料。
  3. 讀取跨行原始資料。

讀取非標準格式資料

當原始資料不完全是文字或數值,像是 $1,000 就是的文字數值,此時電腦就無法正常讀取。此時在 SAS 中 INFORMATS 就能夠告訴電腦要如何讀取這樣的資料。

一般來說,INFORMATS 的三種格式,分別為文字、數值和日期,其中文字格式為 $informatw. ,informat 為形式,w 是寬度、數值格式為 informatw.d ,informat 為形式,w 是寬度,d 是小數點的位數,日期格式為 informatw. ,informat 為形式,w 是寬度,此外最後的 . 句號若缺少則 SAS 會把 informat 當成變數,請參考下述 SAS 程式。

SAS 範例程式

1
2
3
4
5
6
7
8
9
10
11
12
DATA customer;
INPUT Name $10. Gender $1. Age 2. CreateDate YYMMDD10.;
DATALINES;
Alice F 16 2017-01-01
Bob M 27 2017-01-01
Candy F 18 2017-01-01
David M 24 2017-01-01
Emma F 26 2017-01-01
;
RUN;
PROC PRINT;
RUN;

輸出結果

Obs Name Gender Age CreateDate
1 Alice F 16 20820
2 Bob M 27 20820
3 Candy F 18 20820
4 David M 24 20820
5 Emma F 26 20820

數值格式

Informat 輸入資料 INPUT 敘述 輸出結果
w.d 1000 INPUT Income 5.1 ; 1000.0
COMMAw.d $1,000 INPUT Amount COMMA10. ; 1000
PERCENTw. (5%) INPUT Rate PERCENT5. ; -0.05

文字格式

Informat 輸入資料 INPUT 敘述 輸出結果
$CHARw. sas INPUT Product $CHAR10. ; sas
$w. sas INPUT Product $CHAR10. ; sas
$HEXw. 736173 INPUT Product $HEXw.; sas

日期格式

Informat 輸入資料 INPUT 敘述 輸出結果
DATEw. 1AUG2017 INPUT Day DATE10.; 21032
TIMEw. 10:30:00 INPUT Time TIME8.; 37800
DATETIMEw. 1AUG2017 10:30:00 INPUT DayTime DATETIME18.; 1817202600
YYMMDDw. 2017-08-01 INPUT Date YMMDD10.; 21032

讀取凌亂原始資料

若是資料排列沒有規則,長度不一,造成我們讀取原始資料的困難時,則可以透過列指示器 @’關鍵字’ 從特定的位置開始讀取資料,主要是根據資料前面的關鍵字,其中讀取文字變數預設為 8 個字元,若超過則要定義長度,此外若要 SAS 讀取過程中遇到空格時則不再繼續讀取,則要在 $length 前加 : 冒號,像是 :$10. ,記得後面要加 . 句號,請參考下述 SAS 程式。

SAS 範例程式

1
2
3
4
5
6
7
8
9
10
11
DATA customer;
INPUT @'name:' Name :$10. @'gender:' Gender :$1. @'age:' Age :3. @'create_date:' CreateDate :YYMMDD10. ;
DATALINES;
name:Alice gender:F age:16 create_date:2017-01-01
name:Bob gender:M age:27 create_date:2017-01-01
name:Candy gender:F age:18 create_date:2017-01-01
name:David gender:M age:24 create_date:2017-01-01
name:Emma gender:F age:26 create_date:2017-01-01
RUN;
PROC PRINT;
RUN;

輸出結果

Obs Name Gender Age CreateDate
1 Alice F 16 20820
2 Bob M 27 20820
3 Candy F 18 20820
4 David M 24 20820
5 Emma F 26 20820

讀取跨行原始資料

一般來說原始資料中每一行皆代表一個觀測值,但有時會有一個觀測值跨行的情況發生。由於 SAS 會自動轉換至下一行讀取資料,直到讀取該觀測值的所有變數,所以我們需要告訴 SAS 什麼時候不須換行,此時就會需要在 INPUT 敘述中加上行指示器,主要有兩種表示方式,第一種是 / 斜線主要告訴 SAS 跳至原始資料第二行,第二種是 #n 主要是告訴 SAS 跳至第 n 行,請注意 #n 不能來回跳。

SAS 範例程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
DATA customer;
INPUT Name $10.
#2 Gender $1.
#3 Age 2.
#4 CreateDate YYMMDD10.;
DATALINES;
Alice
F
16
2017-01-01
Bob
M
27
2017-01-01
Candy
F
18
2017-01-01
David
M
24
2017-01-01
Emma
F
26
2017-01-01
;
RUN;
PROC PRINT;
RUN;

輸出結果

Obs Name Gender Age CreateDate
1 Alice F 16 20820
2 Bob M 27 20820
3 Candy F 18 20820
4 David M 24 20820
5 Emma F 26 20820

總結在 SAS 中除了可以讀取文字和數值標準格式的原始資料之外,更能夠針對其它非標準格式的原始資料進行讀取,以利進行資料分析。

相關資源

⬅️ Go back