2014年10月24日金曜日

レポート作成インターフェイス(RWI)入門2




今回はデータセットの中身をRWIで出力する方法を紹介。

(以降、HTMLへの出力が有効になっている前提)


出力するデータ
data DT1;
   V1=1; V2="AAA"; output;
   V1=2; V2="BBB"; output;
   V1=3; V2="CCC"; output;
run;

 V1  
 V2  
  1
 AAA  
  2
 BBB
  3
 CCC


RWIを使って出力

data _NULL_;

   set DT1 end=EOF;

   *** データステップの最初だけ実行する部分 ;
   if _N_=1 then do;

       * RWIを使えるようにして表作成を開始 ;
       dcl odsout ob();
       ob.table_start();

       * 項目名を出力 ;
       ob.head_start();
       ob.row_start();
            ob.format_cell(data: "V1",  style_attr: "background=blue color=white");
            ob.format_cell(data: "V2",  style_attr: "background=blue color=white");
       ob.row_end();
       ob.head_end();

   end;


   *** データの中身を出力 ;
   ob.row_start();
        ob.format_cell(data: V1);
        ob.format_cell(data: V2);
   ob.row_end();

   *** 最後に表作成を終了 ;
   if EOF then ob.table_end();
run;

結果ビューア





処理の流れ


set DT1 end=EOF;

まず、出力するデータセットDT1を読み込む。
end=EOF」で最終オブザベーションを読み込むとき一時変数EOFに「1」が入る。(この一時変数は後で使う)

 ちなみに今回は一時変数名をEOFという名前にしているけど、任意の名前で指定可能。
 

*** データステップの最初だけ実行する部分 ;
if _N_=1 then do;

    * RWIを使えるようにして表作成を開始 ;

    dcl odsout ob();
    ob.table_start();

    * 項目名を出力 ;
    ob.head_start();
    ob.row_start();

         ob.format_cell(data: "V1",  style_attr: "background=blue color=white");
         ob.format_cell(data: "V2",  style_attr: "background=blue color=white");
    ob.row_end();
    ob.head_end();

end;

オブザベーションを読み込むたびに実行する必要がない箇所、
つまり最初の1回実行するだけでいい箇所を「if _N_=1 then do;」と「end;」で囲んであげる。

今回新たに登場した「head_start」「head_endメソッド」では、囲んだ範囲をヘッダーとして扱うことが出来ます。

また、「format_cellメソッド」の「style_attr」というのは、セルのスタイル属性を設定するオプションで、今回は背景色=青、文字色=白にしてます。

セルのスタイル設定
参照名.format_cell( data: "表示するテキスト",  style_attr: "スタイル属性")

※SAS9.4より前のバージョンは「style_attr」ではなく「overrides」で動く。

使いたいスタイル属性は、SAS社の提供してるODSのリファレンスを参照ください。


*** データの中身を出力 ;
ob.row_start();
     ob.format_cell(data: V1);
     ob.format_cell(data: V2);
ob.row_end();

オブザベーション毎に変数値を出力


if EOF then ob.table_end();

一番最初に作った一時変数EOFを使って、最後に表作成を終了させる。




📝注意
記事の中で使用している「_N_」と「END=オプション」は「サブセット化IF」と一緒に使用すると正しく動かなくなりやすいです。

0 件のコメント:

コメントを投稿