初めに
表題は、Dataステップを活用するための基礎として必要な知識です。
if文は、プログラミング経験者ならイメージできると思いますが、「outputは何だ?」となるかもしれません。
「output」を理解することは、Dataステップを活用するために必要です。
if文を合わせて説明した方が分かりやすいと思い、本記事でまとめて説明します。
「output」とは
結論
簡単に言うと、Dataステップにおける「レコード出力」コマンドです。
注意
上記結論では、(DBでの表現である)「レコード」と表記しましたが、SASではレコードの事を「オブザベーション」と呼びます。
なので、下記では、(一般で言うところの)「レコード」を「オブザベーション」と表記します。
Dataステップの流れ
outputを理解するため、”そもそもDataステップがどのような流れで処理がされているか?“を前提として理解する必要があります。
Dataステップのポイント・処理フローは下記の通りです。
[ポイント]
- オブザベーション毎に処理を行う。
- 記述した加工を上から順に実行する。
- 「output」のところで出力データセットに加工結果(オブザベーション)を出力。
[処理フロー]
下記Dataステップを例にして説明します。
data table_2;
set table_1;
x=1;
y=2;
output;
run;
上記Dataステップは、下記のフローで処理が行われます。
- [set] table_1から1オブザベーションを取得
- [x=1] 変数xの値を「1」にする。
- [y=2] 変数xの値を「2」にする。
- [output] table_2に上記3.の加工後オブザベーションを出力する。
- table_1の次のオブザベーションに対して、上記1.から順に実行する。
「output」のポイント
「output」に関するポイントは下記の通りです。
- 省略可能。その際、outputはDataステップの「RUN」(最後)の直前で実行される。
- Dataステップ内で一箇所でも「output」を記述したら、上記1.の通りにならない。
- 「output」とif文を用いて、特定のオブザベーションを除外する事ができる。
if文とは
簡単に言うと、「条件別に処理を分ける」ものです。
下記のような枠組みでコードを書くことができます。
[condition]に条件式、条件に合致する場合は[process_1]の処理、合致しない場合は[process_2]の処理が実行されます。
data table_2;
set table_1;
if [condition] then [process_1];
else [process_2];
run;
if文の使用例
下記データセット(result)に対して、”国語(japanese)の点数が70点以上“のデータを抽出してみましょう。
[データ]
student_id | student_name | sex | japanese | math | english | science | society |
---|---|---|---|---|---|---|---|
1 | tanaka | 0 | 50 | 60 | 70 | 80 | 90 |
2 | yoshida | 1 | 60 | 80 | 90 | 90 | 70 |
3 | shimada | 0 | 90 | 100 | 100 | 100 | 100 |
4 | nakamura | 1 | 90 | 60 | 80 | 80 | 70 |
5 | sasaki | 0 | 70 | 90 | 60 | 100 | 80 |
[コード]
data out_data;
set result;
if japanese >= 70 then output;
run;
[出力データセット]
student_id | student_name | sex | japanese | math | english | science | society |
---|---|---|---|---|---|---|---|
3 | shimada | 0 | 90 | 100 | 100 | 100 | 100 |
4 | nakamura | 1 | 90 | 60 | 80 | 80 | 70 |
5 | sasaki | 0 | 70 | 90 | 60 | 100 | 80 |
「output」を記述しているため、その箇所でのみ出力が行われ、”「run」の直前でoutput処理は行われていない“ことに注意です。
最後に
業務で複雑なDataステップを書く際に、「output」の正しい理解ができてるか否かで、エラー対応含め実装時間に大きな差が出ると思います。
上記「output」のポイントはしっかり覚えておきましょう。