2016年8月2日火曜日

0オブザベーションの時、1行追加して「該当データなし」みたいな値を入れる方法



サンプルデータ

data DT1;
   length A $20.;
   delete;
run;
           A          


やりたい事

上記のようにデータセットが0オブザベーションだったら、「該当データなし」みたいな値を入れた行を追加したい。
A
  該当データなし 



解決案
data OUT1;

   if _OBS=0 then do;
        A = "該当データなし";
        output;
   end;

   set DT1 nobs=_OBS;
   output;

run;
A
  該当データなし 

0オブザベーション以外の時は「該当データなし」の行は追加されません。


解説

以下リンク記事を読んでいただくと8割がた上記処理の理解につながると思います。

・ 暗黙のOUTPUTステートメント
・ NOBS=オプションの性質 【オブザベーション数の取得】

補足すると、SETするデータセットのOBS数が0の場合、SETステートメントの後にどんな処理を入れても作成されるデータセットも0OBSとなってしまいます。(データステップの性質上)

なので、0OBSにされる前に、先に青字のプログラムで「該当データなし」の行をOUTPUTしてから、最後にSETステートメントを実行するようにしています。 なんかパズルみたいですね。


その他

NOBSの注意事項
行削除の落とし穴


0 件のコメント:

コメントを投稿