2016年8月2日火曜日

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



サンプルデータ

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

           A          



やりたい事

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

A
  該当データなし 



解決案

(プログラム中の「NOBS=オプション」は正しく動かない状況もあるので、下の各リンク記事も要確認!)

data OUT1;
   length A $30.;
   if _OBS=0 then do;
        A = "該当データなし";
        output;
   end;

   set DT1 nobs=_OBS;
   output;
run;

A
  該当データなし 

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


解説

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

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

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

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



その他

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


5 件のコメント: