前の投稿で、なぜSET;SET;なのにif _N_=1で処理の終了を回避できるのかという僕の投げっぱなしの質問に対して、コメントをいただきました。
それは、SASがファイル終端を検知するのは、最終OBSを読み込んだ時点ではなく、その次を読み込もうとしてそれ以上OBSがないとなった時点ではないかと。だとするとデータセットが1obsならファイル終端が検知されるのは_N_=2で処理が行われたその時なので、それを回避すれば、処理は止まらず、値は保持されたまま引き延ばされると。
ならば、ならばですが
今、以下の3つのデータセットがあったとします。
data Q1;
do X=1 to 10;
output;
end;
run;
data Q2;
do Y=1 to 5;
output;
end;
run;
data Q3;
do Z=1 to 3;
output;
end;
run;
これで、以下のコードを実行すればどうなるか
data A1;
set Q1;
if _N_<=tobs2 then set Q2 nobs=tobs2;
if _N_<=tobs3 then set Q3 nobs=tobs3;
run;
以下の結果になります。
10obsに足りない部分は、一番最後の値で引き延ばされて補完されています。
これは結構使えそうじゃないですか?
コメント有難うございます。
久しぶりにとても清々しい気持ちになれました。
データステップ楽しい
0 件のコメント:
コメントを投稿