SAS言語は他のプログラミング言語と比較してコードの並びと実行タイミングが直感的でない場合が多いです。例えば、それが体現されている状況として下記の場合が挙げられます。同じ名称のDATAステップが並んでいるのですが、これは同じデータを一度読み取った上で加工するのかと思いきやデータは再定義されます。この挙動は後半に記載する「set」ステートメントで解決することになります。
data b;
input Name_b $ Age_b Height_b;
datalines;
John 15 5.5
Mary 16 5.7
James 14 5.8
Sophia 17 5.9
;
data b;
hoge = Age_b + 2;
run;
proc print data=b;
title 'Dataset B';
run;
途中でRUN文を挟んでも同一名称のDATAステップは内容が上書きされるためやはり前半の内容はなくなっています。つまり、DATAステップ境界を意図的に設定しても上書きされる仕様だということです。
data b;
input Name_b $ Age_b Height_b;
datalines;
John 15 5.5
Mary 16 5.7
James 14 5.8
Sophia 17 5.9
;
run;
data b;
hoge = Age_b + 2;
run;
proc print data=b;
title 'Dataset B';
run;
同じ名称のDATAステップを編集したい場合には、2回目のDATAステップの中で「set」ステートメントを使用して前回のDATAステップを参照する必要があります。
data b;
input Name_b $ Age_b Height_b;
datalines;
John 15 5.5
Mary 16 5.7
James 14 5.8
Sophia 17 5.9
;
run;
data b;
set b;
hoge = Age_b + 2;
run;
proc print data=b;
title 'Dataset B';
run;
私が慣れ親しんでいるプログラミング言語の例としてPythonを挙げると、Pythonは1行ごとに実行する逐次実行であり、仮に同じ名前の名前のデータフレームへ再代入することがあっても明示的でありわかりやすいです。SAS言語の処理のタイミングはステップごとであり、「run;」を書いた時点で処理がまとめられ一括の処理として扱われるため上書き自体が気づきにくいです。さらにステップの概念と相まって挙動が把握しにくくなっていました。
おそらく、慣れが解決してくれる範疇の問題かと考えております。
SAS言語の実行環境
SAS言語の動作環境はAltair SLC 及び Altair Analytics Workbenchを使用しております。詳細や最新情報はAltair公式サイトをご覧ください。
動作確認を行なった環境
- MacBookPro(2020 M1)
- RAM 16GB
- macOS Sonoma 14.4.1
- Altair SLC 2024 (05.24.03.00.001528)
- Altair Analytics Workbench 5.24.3.0.1528-GA-release-2024.2