2016年8月1日月曜日

NOBS=オプションの性質 【オブザベーション数の取得】




「NOBS=」はデータステップで用いるSETステートメントのオプションです。
まず構文から見ていきましょう。



構文


   SET  データセット  NOBS = 適当な一時変数名 ;


・ SETしたデータセットのオブザベーション数を一時変数に格納する事ができます。
・ 一時変数なので、作成したデータセットには残りません。



* サンプルデータ作成 ;
data DT1;
   do X=1 to 3;
       output;
   end;
run;

* オブザベーション数の取得 ;
data DT2;
   set DT1 nobs=_OBS;
   OBS = _OBS;
run;

  X   
 OBS  
   1    3
   2    3
   3    3




NOBS=オプションの性質

NOBS=オプションは、データステップ内の他のプログラムが実行される前に働きます。
以下のプログラムをご覧ください。

data _null_;
   put _OBS;
   stop;
   set DT1 nobs=_OBS;
run;

ログ
3

set DT1 nobs=_OBS;」で一時変数_OBSにオブザベーション数を格納しています。
その前の 「put _OBS;」で、_OBSの値をログにputしてから、「stop;」で、データステップをstopしています。

stopしてるので、その下の「set DT1 nobs=_OBS;」は実行されないんですが、NOBS=オプションだけは他のプログラムが実行される前に既に働いています。

つまり、「SETステートメントは実行しないけど、オブザベーション数だけ先に取ってくる」 という事をやってのけています。



NOBS=の注意点

行削除の落とし穴
http://sas-boubi.blogspot.jp/2014/05/blog-post_20.html




NOBS=の性質を利用したテクニック

【訂正追補】SASデータセットのオブザベーション数をマクロ変数に格納する方法_call symput
http://sas-tumesas.blogspot.jp/2013/10/sascall-symput.html(データステップ100万回)


データステップ内で、色々なデータセットのオブザベーション数を取得する
http://sas-boubi.blogspot.jp/2015/06/blog-post_26.html



0 件のコメント:

コメントを投稿