2016年11月30日水曜日

PROC ODSTABLEによるレポート出力



HTMLやRTFなどにレポート出力したい場合、REPORTプロシジャを使う事が多いと思います。
また以下のようにTEMPLATEプロシジャとデータステップで出力する方法もあります。

(以降、出力先がHTMLの場合の結果を示します)

proc template ;
  define table test;
    column NAME SEX AGE HEIGHT HEIGHT_CM;

    define HEIGHT;
       style={color=red};
    end;

    define HEIGHT_CM;
       compute as round((HEIGHT*2.54),0.1);
       header="Height (cm)";
       format=8.1;
       style={color=blue};
    end;
  end;
run;

data _null_;
   set SASHELP.CLASS;
   file print ods=(template="TEST");
   put _ods_;
run;




そして、SAS9.3からODSTABLEプロシジャが追加されました。構文はTEMPLATEプロシジャと同じです。

たとえば、上で書いたTEMPLATEプロシジャの青字部分をコピーして、以下のように「proc odstable」と「run」で囲むだけで完成です。

proc odstable data=SASHELP.CLASS ;
    column NAME SEX AGE HEIGHT HEIGHT_CM;

    define HEIGHT;
       style={color=red};
    end;

    define HEIGHT_CM;
       compute as round((HEIGHT*2.54),0.1);
       header="Height (cm)";
       format=8.1;
       style={color=blue};
    end;
run;


TEMPLATEプロシジャのように出力用のデータステップを書かなくていいのが便利ですね。
構文もなんとなくREPORTプロシジャに似てます。


あと便利だなーと思ったのが、以下のような場合。

proc odstable data=SASHELP.CLASS;
    column NAME SEX (HEIGHT WEIGHT) ;
    define HEIGHT;
       header="Height, Weight";
    end;
run;

変数HEIGHTとWEIGHTを縦に並べて出力しています。
REPORTプロシジャだとこれが出来ないんですよね。


注意点

TEMPLATEプロシジャと構文が一緒だけど一部ODSTABLEでは使えない機能があるようです。
また、HTML, RTF, LISTING等の出力先によって挙動が異なったり、動作しない機能などもあると思うので、別途リファレンスを確認したり、挙動確認をして下さい。



ちなみに以下、入門記事も書いています。


2 件のコメント:

  1. こんにちは。先日,SASプログラミング掲示板で質問させていただいたTYです。少し前からブログを作ってSAS等についてまとめようと思っています。しばらくはSQLの勉強しようと思っており,Matsuさんのブログはとても参考になりますので,時々,寄らせてください。宜しくお願い申し上げます。

    返信削除
  2. こんにちは、コメント有難うございます!
    私のブログは色々拙い部分ありますが、是非寄って頂けると嬉しいです。
    そしてYamabeさんのブログにも寄らせて下さい!更新楽しみにしております。

    返信削除