2014年11月6日木曜日

RWIでカレンダーを作ってみる。


遊び回です。
RWIで、カレンダー作ってみました。

style_attrで細かい書式設定をしてるため、ごちゃごちゃして見えますが、そこを見なければプログラムとしてはシンプルな構造になってます。


*** 年月を指定 ;
%let YEAR = 2014;
%let MONTH = 11;


*** RWIでカレンダーを作る ;
data _NULL_;

  * 月の開始日と終了日を取得 ;
  STDT = mdy(&MONTH, 1, &YEAR);
  ENDT = intnx("month", STDT, 0, "end");

  * カレンダー作成開始 ;
  dcl odsout ob();
  ob.table_start();

     * 月を出力 ;
     ob.head_start();
     ob.row_start();
          ob.format_cell( data: put(STDT,monname20.), column_span:7,
                                 style_attr: "background=midnightblue  color=white
                                                  fontsize=10  fontweight=bold  just=left");
     ob.row_end();

     * 曜日を出力 ;
     ob.row_start();
          do i = 1 to 7;
              ob.format_cell( data: char("SMTWTFS",i) ,
                                    style_attr: "background=skyblue color=white fontsize=5") ;
          end;
     ob.row_end();
     ob.head_end();

      * 日付を出力 ;
     ob.row_start();
          do i = STDT to ENDT;

              * 1日が日曜以外であれば空白を埋める ;
              if i=STDT then do i2=1 to weekday(STDT)-1;
                  ob.format_cell();
              end;

              * 日付を出力 ;
              ob.format_cell( data:day( i ) ,  style_attr:"height=2cm width=2cm fontsize=5;");

              * 土曜日であれば折り返す ;
              if weekday( i )=7 and i^=ENDT then do;
                   ob.row_end();
                   ob.row_start();
              end;

          end;
     ob.row_end();

  ob.table_end();
run;

結果




補足

・大体以下で紹介した事をもとにしてます。
レポート作成インターフェイス(RWI)入門1
レポート作成インターフェイス(RWI)入門2
レポート作成インターフェイス(RWI)入門3


・SAS9.4より前のバージョンでは、以下を変える必要あり。

 1) format_cellメソッドの「style_attr」を「overrides」に置き換える。
 2) SAS9.2ではプログラム先頭に「ods html file="出力パス\ファイル名.html";」、最後に「ods html close;」と書く。
 3) 出力する年月を変えたい場合は、プログラム先頭の以下の箇所を変えてあげる。

*** 年月を指定 ;
%let YEAR = 2014;
%let MONTH = 11;


・PDFなどに出力して印刷したい場合は、プログラムの先頭と最後に以下の文を挿入すればok。
 先頭: ods pdf file="結果を保存するパスを指定\SAS_Calendar.pdf";
 最後: ods pdf close;


0 件のコメント:

コメントを投稿