RETAIN データステップ

【SAS】データセットの結合時に見落としがちなRETAINについて

以下のプログラムを実行して、各データセットを作成します。

data sample1;
	do a = 1 to 10;
		output;
	end;
run;

data sample2;
	b=.;
run;

data sample3;
	set sample1 - sample2;
run;

すると、以下のようなデータセットが作成されます。

sample1 sample2 sample3

ここまでは問題ないでしょう。

 

次に、以下のように条件を追記し、変数に値を代入してみます。

data sample4;
	set sample1 - sample2;
	
	if _n_=5 then do;
		a=99;
		b=99;
	end;
	
run;

すると、変数bについて、5オブザベーション目(_n_=5)のみならず、それ以外のレコードにも99が格納されています。

これは、データステップ開始時に設けられるプログラムデータベクトル(PDV)の値について、sample1を読み込んでいるときは変数aの値のみが更新され、sample1に存在しない変数bはそのまま保持され続けるからです。(表現が難しい・・・)

sample1の読込みは、sample2の変数bの値(PDV)に影響を及ぼさない、と言った方が分かりやすいかもしれません。

未だに、このRETAINの仕様を忘れてしまい、ミスしてしまうことがあるので注意が必要です。