1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

同一名称のDATAステップの挙動

Last updated at Posted at 2025-06-23

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;

出力結果:
result1



途中で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;

出力結果:
result2



同じ名称の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;

出力結果:
result3

私が慣れ親しんでいるプログラミング言語の例として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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?