2019年2月1日金曜日

FIRSTOBSオプションの落とし穴




今回は以下2つの記事に関連した内容です。

FIRSTOBS=, OBS=, WHERE を組み合わせたときの挙動
行削除の落とし穴



では本題。まずは適当にサンプルデータ。

data dt1;
  do x="a","b","c";
    output;
  end;
run;


1行目をSQLプロシジャで削除してみます。

proc sql;
  delete from dt1 where x="a";
quit;


すると、削除したオブザベーション番号の「1」が欠番になってしまいます。
これは上の方で示した2個目のリンク記事で紹介済みですね。



この使用できるオブザベーションが歯抜けになってしまう事で、FIRSTOBS=オプションも影響を受けてしまうようです。
たとえば「FIRSTOBS=2」として読み込んだ場合、、

proc print data=dt1 (firstobs=2);
run;

「x="c"」だけがprintされないとおかしいですよね。



SETしなおせば歯抜けが直るんで、想定通りになります。

data dt1;
   set dt1;
run;

proc print data=dt1 (firstobs=2);
run;



0 件のコメント:

コメントを投稿