ハッシュオブジェクトの世界⑥ outputメソッド ordered

続きましては、ハッシュオブジェクトのdataをSASデータセットにする方法です。

data Q3;
 X=3;Y='C';output;
 X=1;Y='A';output;
 X=2;Y='B';output;
run;

というデータセットがあって

以下のコードを実行します。

data _NULL_;
 if _N_=0 then set Q3;
  declare hash hq1(dataset:'Q3');
   hq1.definekey('X');
   hq1.definedata('Y');
   hq1.definedone();
   hq1.replace(key:3,data:'D');
   hq1.output(dataset:'A1');
   stop;
run;

すると A1というデータセットが作成され、中身は







です。

outputメソッドはハッシュオブジェクトのdataを指定した名前でデータセットにしてくれます。
outputされる際のオブザベーションの並び順はランダムです。

で、当然、dataだけじゃなくてkeyも欲しいとなるかもしれませんが、今のところ僕が知っているのは
以下のような方法だけです。

data _NULL_;
 if _N_=0 then set Q3;
  declare hash hq1(dataset:'Q3');
   hq1.definekey('X');
   hq1.definedata('X','Y');
   hq1.definedone();
   hq1.replace(key:3,data:3,data:'D');
   hq1.output(dataset:'A1');
   stop;
run;







keyで指定した変数をdataにも指定できるというわけです。

さて、outputされる際のオブザベーションの並び順にソートをかけるのはorderedというものを使います。

proc sort data=Q3 out=A2;
 by X;
run;

と同じことをハッシュでやる場合

data _NULL_;
 if _N_=0 then set Q3;
  declare hash hq1(dataset:'Q3',ordered:'a');
   hq1.definekey('X');
   hq1.definedata('X','Y');
   hq1.definedone();
   hq1.output(dataset:'A2');
   stop;
run;

でできます。

ordered:'a' のaはascendingのa、要は昇順ですね。ordered:'y' ordered:'yes'でも昇順になります。
逆にordered:'d'なら降順になります。
Keyに指定している値で順にソートされます。

この一度、データセットをハッシュオブジェクトに入れてソートして、データセットに吐きだす方法、データセットの大きさや、ハードの性能など状況によっては結構効率いいという噂を聞きますが、実証していません。
まあ正直、やりたいことがソートだけならわざわざハッシュ使いませんよね、めんどい。



0 件のコメント:

コメントを投稿