PDVの初期化と値保持の仕組み
先日、プログラムデータベクトル(PDV)の込み入った話ということで
意図せず変数の値がretainされている、という内容の記事を書きました。
その後調べたところ、なんと、setステートメントでは、PDVは初期化されていないということを知りました。
PDVが毎回初期化されるのは生データだけだった模様です。知りませんでした。
参考までに、SAS® 9.4 ステートメントリファレンス第 4 版RETAIN ステートメントの項より
おさらいです。
読み込むデータセットが変わるときにだけPDVが初期化される、ということですので、
データセットA、Bを使った次のようなプログラムでは
data c; set a b; if i=5 then j='55'; run;
こうなります。
では、インターリーブではどうでしょうか。
data d; set a b; by i;/* インターリーブ読み込み */ if i=5 then j='55'; run;
「読み込むデータセットが変わるときにだけPDVが初期化される」のでこんな感じになります。
なにか使えるかな…。制御できない(データ依存になる)ので使い所が難しいですね。