Study SAS

統計解析ソフトウェアSASについて学習したことのまとめやSAS認定試験対策など

SAS Base Programmer 練習問題17

次のSASプログラムをサブミットする

data work.total;
    set work.salary(keep = department wagerate);
    by department;
    if first.department then payroll = 0;
    payroll + wagerate;
    if last.department;
run;

SASデータセットWORK.SALARYには5つのdepartmentのデータが100オブザーベーションずつ含まれ、変数DEPARTMENTでソートされている。
WORK.TOTALデータセットにはいくつのオブザーベーションが格納されているか

A. 5
B. 20
C. 100
D. 500

出典はこちら


答え: A (要反転)

byステートメントを使用してグループ(department)ごとに合計を算出している。5つのdepartmentがあるため、オブザーベーション数は5つとなる。
byステートメントの使い方はこちらを参照。

5つのdepartmentのソート済みデータは例えば以下のようなデータセット

data salary;
    department = 'A'; wagerate = 1000; output;
    department = 'A'; wagerate = 2000; output;
    department = 'A'; wagerate = 3000; output;
    department = 'B'; wagerate = 4000; output;
    department = 'B'; wagerate = 5000; output;
    department = 'C'; wagerate = 6000; output;
    department = 'C'; wagerate = 7000; output;
    department = 'C'; wagerate = 8000; output;
    department = 'D'; wagerate = 9000; output;
    department = 'D'; wagerate = 10000; output;
    department = 'D'; wagerate = 11000; output;
    department = 'D'; wagerate = 12000; output;
    department = 'E'; wagerate = 13000; output;
    department = 'E'; wagerate = 14000; output;
    department = 'E'; wagerate = 15000; output;
run;
Obs department wagerate
1 A 1000
2 A 2000
3 A 3000
4 B 4000
5 B 5000
6 C 6000
7 C 7000
8 C 8000
9 D 9000
10 D 10000
11 D 11000
12 D 12000
13 E 13000
14 E 14000
15 E 15000

このデータセットを入力として下記のコードを実行する。

data total;
    set salary(keep = department wagerate);
    by department;
    if first.department then payroll = 0;
    payroll + wagerate;
    if last.department;
run;

各departmentの最初のオブザーベーションで合計値を格納する変数payrollに0を代入、最後のオブザーベーションのときにデータセットに出力するようになっている。

Obs department payroll
1 A 6000
2 B 9000
3 C 21000
4 D 42000
5 E 42000

データセットTOTALにはdepartmentごとのwagerateの合計値が格納されている。