Hash Object SUMINCについて

SASのSUMINCメソッドについて紹介します。

がその前にハッシュオブジェクトの概要を説明します。

 

  • ハッシュオブジェクトとは

 SASのHash Objectはプログラム実行時にデータセットをメモリに格納し、キー、データの単位でテーブルルックアップを実行するオブジェクトになります。

 

ARRAYステートメントなどのコンパイルステートメントコンパイル時に指定された単位で作成されるため、データは固定的です。

 

Hash objectはSASプログラム実行時に実装され、かつ処理内容によってデータのサイズが変化します。そのため、データステップと組み合わせることで大量データのルックアップの検索効率が大幅に改善されることが期待されます。

  • SUMINCメソッド

Hash objectのsumincメソッドを使用するとdata stepではグループ集計、マージの際に事前にソートが必要になっていた面倒な処理がhash objectを使用することで処理が一回で済みます。

 

例:Hash objectでグループ集計+ソート

data hashdup;
    input id data;
    datalines;
3 100
1 10
1 15
2 16
2 9
1 5
;
run;

/* ハッシュオブジェクト例(ソート集計) */
data _null_;
    length id data suminc 8;

    if _N_=1 then
        do;
            call missing(id, data, suminc);
            dcl hash h(ordered:"yes", multidata:"yes", suminc:"suminc");
            h.definekey("id");
            h.definedata("id", "data", "suminc");
            h.definedone();
            dcl hiter hi("h");
        end;

    do until(last.eof);
        set work.hashdup end=eof;
        by id notsorted;
        suminc=data;
/*      check and add */
        h.ref();
/*      summate */
        h.sum(sum:suminc);
/*      replace whole obs */
        h.replace();
/*      output; */
        if eof then h.output(dataset:"work._hashdup(drop=data)");
    end;
run;