Leo Yeh's Blog

SAS 證照考試 (9)

教學目標

初步了解 SAS 9 初階程式設計師認證考試範例考題的重點。

重點概念

SAS 官方網站則有提供範例題目 讓我們準備 SAS 9 初階程式設計師認證考試有個方向,本篇先了解第七題可能的學習重點。在 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
DATA WORK.INPUT;
INPUT Cost;
DATALINES;
1
2
3
4
5
6
7
8
9
10
;
RUN;

DATA WORK.TOTAL;
SET WORK.INPUT;
RETAIN Total 0;
Total=Total+Cost;
RUN;

PROC PRINT DATA=WORK.TOTAL;
RUN;

輸出結果

Obs Cost Total
1 1 1
2 2 3
3 3 6
4 4 10
5 5 15
6 6 21
7 7 28
8 8 36
9 9 45
10 10 55

請注意 RETAIN 敘述主要是用於保留變數,避免每次讀取下一筆資料時被重新初始化,同時設定新建變數預設值為 0 ,若沒有使用 RETAIN 敘述則新建變數的初始值為遺漏值。此外 Total=Total+Cost; 和 Total+Cost; 兩種敘述不一樣,若是 Total=Total+Cost; 敘述中則 Total 新建變數不會有初始值,所以為遺漏值,並且不會保留變數每次讀取下一筆資料時就會被重新初始化,因此若不使用 RETAIN 敘述直接累加 Cost 結果就會是遺漏值,反之 Total+Cost; 敘述則會自動設定 Total 新建變數的初始值為 0 ,同時保留變數。此外雖然我們可透過 IF N= 1 THEN Total = 0; 敘述判斷是否是第一筆資料,若是就設定 Total 初始值,其中 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
DATA WORK.INPUT;
INPUT Cost;
DATALINES;
1
2
3
4
5
6
7
8
9
10
;
RUN;

DATA WORK.TOTAL;
SET WORK.INPUT;
IF _N_ THEN Total=0;
Total=Total+Cost;
RUN;

PROC PRINT DATA=WORK.TOTAL;
RUN;

輸出結果

Obs Cost Total
1 1 1
2 2 .
3 3 .
4 4 .
5 5 .
6 6 .
7 7 .
8 8 .
9 9 .
10 10 .

我們會發現輸出結果僅有第一筆的 Total 不是遺漏值,其它筆皆是遺漏值,主要原因是每次讀取資料時,皆會針對新建變數 Total 重新初始化為遺漏值,所以只有當第一筆時會設為 0,此外若將 IF N THEN Total=0; 敘述改用 Total = 0 則結果會為 10
,請參考下述 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
DATA WORK.INPUT;
INPUT Cost;
DATALINES;
1
2
3
4
5
6
7
8
9
10
;
RUN;

DATA WORK.TOTAL;
SET WORK.INPUT;
Total=0;
Total=Total+Cost;
RUN;

PROC PRINT DATA=WORK.TOTAL;
RUN;

輸出結果

Obs Cost Total
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10

因此透過此題目的練習我們可以更進一步了解 SAS 中工作記憶體(program data vector,PDV) 的運作方式,這對於考取 SAS 基礎程式設計師證照是非常重要的概念。

總結 SAS 9 初階程式設計師需要有能力有能力針對資料集中的數值進行加總,以利滿足主管機關或高階長官的需求,因此範例題目第七題其實很實用。

相關資源

⬅️ Go back