Leo Yeh's Blog

SAS 快速入門 (3)

教學目標

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

重點概念

告訴 SAS 我們的原始資料在哪裡是進行資料處理首要任務,一般來說,我們會透過 DATA STEP 讀取原始資料,基本上原始資料分為內部和外部,試想一個情境每個企業都會想對客戶進行分析,所以就會需要有客戶檔的資料,其中會包括客戶名稱、性別和年齡、…、等資訊,因此我們會需要透過 SAS 程式從內部原始資料或外部原始資料建立一個客戶資料集,本篇快速入門僅先針對讀取文字和數值標準格式的原始資料進行說明,至於其它非標準格式則在下一篇會再進行介紹。

來源類型

內部原始資料

若是直接將資料輸入至 SAS 程式中,其資料就是內部原始資料,常用的指令為 CARDS 和 DATALINES,主要是告訴 SAS 該指令下方直到分號結束皆是資料,請參考下述 SAS 程式。

DATALINES 範例

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

CARDS 範例

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

外部原始資料

若資料在 SAS 程式外部時,其資料就是外部原始資料,常用的指令為 INFILE,主要是告訴 SAS 外部資料的檔案名稱和路徑,請注意 INFILE 敘述須在 DATA 敘述之後,在 INPUT 之前,以及 INFILE 後面的檔案名稱和路徑必須要用單引號,請參考下述 SAS 程式。

CUSTOMER.TXT 檔案內容

1
2
3
4
5
Alice F 16
Bob M 27
Candy F 18
David M 24
Emma F 26

INFILE 範例

1
2
3
4
5
6
DATA customer;
INFILE 'C:\DATA\CUSTOMER.TXT';
INPUT Name $ Gender $ Age;
RUN;
PROC PRINT;
RUN;

日誌結果

1
2
3
4
5
6
7
8
9
10
11
12
13
NOTE: 輸入檔案 'C:\DATA\CUSTOMER.TXT' 為:
檔案名稱 = C:\DATA\CUSTOMER.TXT,
RECFM=V, LRECL=32767 ,檔案大小 (位元組)=55,
上次修改時間=2017年08月20日 12時03分02秒
建立時間=2017年08月20日 14時03分02秒

NOTE: 已有 5 個記錄讀取自輸入檔案 'C:\DATA\CUSTOMER.TXT'
最小記錄長度為 8。
最大記錄長度為 10。
NOTE: 資料集 WORK.CUSTOMER 有 5 個觀測值和 3 個變數。
NOTE: 已使用 DATA 陳述式 (總處理時間):
實際時間 0.01 秒
CPU 時間 0.00 秒

從日誌結果中我們可以得知記錄長度最大為 32767 ,此時若是當記錄長度過長,導致 SAS 不能讀取全部記錄時,就能夠在 INFILE 敘述中使用 LRECL= 來指定長度,請注意記錄長度越大效能越低,請參考下述 SAS 程式。

INFILE 範例

1
2
3
4
5
6
DATA customer;
INFILE 'C:\DATA\CUSTOMER.TXT' LRECL=65535;
INPUT Name $ Gender $ Age;
RUN;
PROC PRINT;
RUN;

日誌結果

1
2
3
4
5
6
7
8
9
10
11
12
13
NOTE: 輸入檔案 'C:\DATA\CUSTOMER.TXT' 為:
檔案名稱 = C:\DATA\CUSTOMER.TXT,
RECFM=V, LRECL=65535,檔案大小 (位元組)=55,
上次修改時間=2017年08月20日 12時03分02秒
建立時間=2017年08月20日 14時03分02秒

NOTE: 已有 5 個記錄讀取自輸入檔案 'C:\DATA\CUSTOMER.TXT'
最小記錄長度為 8。
最大記錄長度為 10。
NOTE: 資料集 WORK.CUSTOMER 有 5 個觀測值和 3 個變數。
NOTE: 已使用 DATA 陳述式 (總處理時間):
實際時間 0.02 秒
CPU 時間 0.03 秒

讀取方式

List Input

若原始資料被空格分隔,則我們就能夠使用 LIST INPUT 讀取資料,其中文字不能包括空格和遺漏值必須以 . 句點替代,但是若資料檔案中包含日期資料就不適合使用 LIST INPUT 讀取資料。INPUT 敘述在 DATA STEP 中主要是告訴 SAS 如何讀取原始資料,通學在 INPUT 關鍵字之後會列出變數名稱,變數名稱長度限制在 32 個字元以下,只能包括字母、底線和數字,但必須以字嗣或底線為開頭。若是變數是文字格式,則後面要加上 $ 字號,變數與變數之間至少要一個空間,最後 INPUT 敘述必須以 ; 分號結束,請參考下述 SAS 程式。

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

上述 SAS 程式主要為輸入三個變數,其中 Name 和 Gender 變數是文字變數,而 Age 是數值變數。

Column Input

若當每個變數的值都出在資料行的相同位置時,同時變數值為文字格式和數值格式就可以使用 COLUMN INPUT 讀取資料,主要優點在於不會要求變數值之間的空格、遺漏值可以直接透過空格代替、文字中可以包括空格,以及可以跳過不需要的變數,請參考下述 SAS 程式。

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

總結在 SAS 中讀取文字和數值標準格式的原始資料,主要可以分為內部和外部兩種來源類型,至於讀取方式則主要有 List Input 和 Column Input 兩種讀取方式。

相關資源

⬅️ Go back