初めに

表題は、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ステップは、下記のフローで処理が行われます。

  1. [set] table_1から1オブザベーションを取得
  2. [x=1] 変数xの値を「1」にする。
  3. [y=2] 変数xの値を「2」にする。
  4. [output] table_2に上記3.の加工後オブザベーションを出力する。
  5. table_1の次のオブザベーションに対して、上記1.から順に実行する。

「output」のポイント

「output」に関するポイントは下記の通りです。

  1. 省略可能。その際、outputはDataステップの「RUN」(最後)の直前で実行される。
  2. Dataステップ内で一箇所でも「output」を記述したら、上記1.の通りにならない。
  3. 「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_idstudent_namesexjapanesemathenglishsciencesociety
1tanaka05060708090
2yoshida16080909070
3shimada090100100100100
4nakamura19060808070
5sasaki070906010080
テスト結果(result)

[コード]

data out_data;
set result;
if japanese >= 70 then output;
run;

[出力データセット]

student_idstudent_namesexjapanesemathenglishsciencesociety
3shimada090100100100100
4nakamura19060808070
5sasaki070906010080
国語70点以上の生徒(out_data)

「output」を記述しているため、その箇所でのみ出力が行われ、”「run」の直前でoutput処理は行われていない“ことに注意です。

最後に

業務で複雑なDataステップを書く際に、「output」の正しい理解ができてるか否かで、エラー対応含め実装時間に大きな差が出ると思います。
上記「output」のポイントはしっかり覚えておきましょう。

By clear

データエンジニア・機械学習・分析等を主とし、Webアプリ開発も行っているフリーランスです。