今回のゴールはRWIで以下の表をPDF形式で作成することです。
集計に使うデータセットは「SASHELP.CARS」の先頭80obsとします。
(注意:今回のプログラムには、HTML形式でサポートされていないオプションを使用しています)
- まずFREQプロシジャで集計し、結果をデータセットに出力します。
- 結果のデータセットを加工して、RWIで出力しやすい形にします。
*=== 集計 ===========================================;
proc freq data=SASHELP.CARS (obs=80) noprint; tables MAKE / out=OUT1; tables TYPE / out=OUT2; run; *=== 集計結果を出力の形に加工 =======================; data OUT; length NO 8. ITEM1 ITEM2 COL1 COL2 $20.; set OUT1 (in=_IN1) OUT2 (in=_IN2) ; *** 項目No.、項目名の導出 ******************; NO = whichn(1,of _IN:); ITEM1 = choosec(NO, "Make","Type"); ITEM2 = coalescec(MAKE,TYPE); *** Nとパーセントを出力の形に **************; COL1 = cats(COUNT); COL2 = cats( "(", put(round(PERCENT,.1), 8.1) ,")" ); run; |
- 上で作ったデータセットをRWIで出力します。
*=== 出力開始 ===========================================;
options nodate; ods pdf file="出力するファイルのパス\RWI_Sample2.pdf" style = printer; data _NULL_; length LINE $5.; set OUT end=EOF; by NO ; if _N_=1 then do; dcl odsout ob(); ob.title(data:'集計結果'); ob.table_start(); *** 項目名を出力 *************************; LINE = "LR"; ob.head_start(); ob.row_start(); ob.format_cell(data:"因子", inhibit:LINE, style_attr:"background=white cellwidth=3cm just=l"); ob.format_cell(data:"" , inhibit:LINE, style_attr:"background=white cellwidth=3cm just=l"); ob.format_cell(data:"n" , inhibit:LINE, style_attr:"background=white cellwidth=2cm just=r"); ob.format_cell(data:"(%)" , inhibit:LINE, style_attr:"background=white cellwidth=2cm just=l"); ob.row_end(); ob.head_end(); end; *** データの中身を出力 ***********************; * 各集計項目の先頭を1行あける。 ; if first.NO then do; ob.row_start(); ob.format_cell( data:ITEM1 , inhibit:"BLR", column_span:4, style_attr:"just=l"); ob.row_end(); end; * データの中身を出力 ; * 変数LINEに、行毎の罫線の設定を格納 ; LINE = "TBLR"; if EOF then LINE="TLR"; ob.row_start(); ob.format_cell( data:"" , inhibit:LINE, style_attr:"just=l"); ob.format_cell( data:ITEM2 , inhibit:LINE, style_attr:"just=l"); ob.format_cell( data:COL1 , inhibit:LINE, style_attr:"just=r"); ob.format_cell( data:COL2 , inhibit:LINE, style_attr:"just=l"); ob.row_end(); * 最後に表作成を終了 ; if EOF then ob.table_end(); run; ods pdf close; 出力結果 |
- プログラム中の青字のパスを各時環境のパスに変更してください。
- SAS9.4より前のバージョンでは「style_attr」の部分をすべて「overrides」に変えて下さい。
- その他、バージョン毎に構文が変わっている箇所があるので、実行失敗してないかログを要確認。
構文
FORMAT_CELL( INHIBIT:'罫線を非表示にする位置 ' )
罫線を非表示にする位置 T ・・・ 上側 B ・・・ 下側 L ・・・ 左側 R ・・・ 右側 例 : 上下の罫線を非表示にする FORMAT_CELL( INHIBIT : 'TB' ) ; 注意:現状、inhibitオプションはHTML形式ではサポートされていない
|
RWIについては、以下の入門シリーズにまとめています。
レポート作成インターフェイス(RWI)入門1
📝注意
記事の中で使用している「_N_」「END=オプション」「FIRST.BY変数」は「サブセット化IF」と一緒に使用すると正しく動かなくなりやすいです。
(解説記事:「サブセット化IFでありがちな落とし穴」)
0 件のコメント:
コメントを投稿