処理前後のデータセットの更新内容を確認するマクロ

昔、自分が書いたコードを整理していて、見つけたのですが、以下のマクロが結構面白かったです。

%macro updatecomp(base,update,key);
 proc datasets;
   modify &base(genmax=2);
 run;
 data &base;
  update &base &update;
  by &key;
 run;
 proc compare base=&base comp=&base(gennum=-1);
 run;
%mend;

マスターとなるデータを、更新用のデータでどんどん更新していく処理をしていた時に、SAS初心者で、怖かったため、実行の都度、どこがどのように更新されたかをアウトプットウインドウで確認したくて書いたみたいです。
全く覚えてなかったですが、初心者にしてはなかなか渋いコード書くなぁと感心しました。

genmaxとgennumについては

「世代管理機能でデータセットの更新履歴(更新前後のDS)を残す_GENMAX=オプション」
http://sas-tumesas.blogspot.jp/2013/11/dsgenmax.html

で紹介しています。

使い方としては

例えば

data Q1;
do X=1 to 30;
 Y='A';output;
end;
run;

data Q2;
 do X=1,3,15;
  Y='B';output;
 end;
run;

のような二つのデータセットがあって、
Xをキーとして、Q1のデータをQ2で更新したい場合、

%updatecomp(Q1,Q2,X)

とすると、Q1が更新され、アウトプットには








と、更新処理の前後の差異がでてきます。









0 件のコメント:

コメントを投稿