2014年12月1日月曜日

変数名などの定義情報を比較する方法



以下に、似てるようで似てない2つのデータセットがあります。

data DT1;
  length A $20. B C 8.;
  A="xxx";
  B=1;
  C=2;
run;

 A  
  B   
  C  
 xxx 
  1
  2

data DT2;
  length A C $10. D 8.;
  A="yyy";
  C="zzz";
  D=3;
run;

  A  
  C   
  D   
 yyy
 zzz
  3



この2つの変数定義を比較したい場合、以下の例のようにCOMPAREプロシジャを使うと楽です。

注意:
COMPAREプロシジャには変数の順番を比較する機能はないようです (例えば片方のデータセットでは変数A, B, C の順、もう片方では変数A, C, B の順で定義されてても、定義不一致として検出してくれません)


proc compare  base=DT1(obs=0)  compare=DT2(obs=0) listvar;
run ;


結果の一部




解説


  • listvar を指定すると、一方にしかない変数名をリストアップしてくれます。
  • それと、今回比較するのは変数定義だけで、変数値の比較結果は必要ありません。なので、(obs=0) をつけてオブザベーションを読み込まないようにします。
  • ログに「同等なオブザベーションが見つかりません。」みたいなWARNINGが出てしまうけど、オブザベーションを読み込んでないから出るメッセージです。



もし厳密にWARNINGを出したくない場合は、以下のようにかけばok

proc compare  base=DT1  compare=DT2  listvar  novalues ;
run ;



novaluesで変数値の比較結果を出力しないようにします。
(といっても裏では変数値の比較をしてるので、重たいデータセットだと実行がモタつくかも)


0 件のコメント:

コメントを投稿