HTMLファイルにグラフを段組で出力する方法

[OS]ALL
[リリース] 8.1, 8.2
[キーワード] ODS HTML, TABLE

[質問]

SAS 8.2でODSを使用し、HTMLファイルにグラフを貼り付けて公開しています。都合上、以下のような「段組」の表を作成し、それぞれにグラフを貼り付けようと思っていますが、良い方法はありませんか。

段組のイメージ

graph1 graph2
graph3 graph4

[回答]

SAS/GRAPHの「DEVICE=WEBFRAME」のようなグラフィックデバイスを使って簡単に上記の表を作成する方法、ODSステートメントを使って簡単に作成する方法は残念ながらありません。下のようなプログラムを使っての出力を検討してください。

マクロプログラム

/*** グラフを出力するに当たって、初期化を行うマクロ(gtableinit) ***/
%MACRO gtableinit(cat         = work.gseg,
                   across      = 2,
                   pagewidth   = 640,
                   pad         = 10,
                   dirpath     = D:\web\,
                   body        = gtable.html,
                   title       = 段組グラフ出力の例,
                   webfont     = MS ゴシック,
                   tableborder = 2);

  %GLOBAL xpixels ypixels gifdir gcat cells cellpad tabletitle htmlbody
          face border;
  %LET gifdir     = &dirpath;
  %LET gcat       = &cat;
  %LET cells      = &across;
  %LET cellpad    = &pad;
  %LET tabletitle = &title;
  %LET face       = &webfont;
  %LET border     = &tableborder;
  %LET xpixels    =
       %eval(%eval(&pagewidth-(%eval(&pad*(%eval(&across-1)))))/&across);
  %LET ypixels    = %eval(%eval(&xpixels/4)*3);

  FILENAME _gtable  "&dirpath&body";
  FILENAME _gsfname "&dirpath";

  GOPTIONS  RESET     = all
            DEVICE    = gif
            XPIXELS   = &xpixels
            YPIXELS   = &ypixels
            GSFMODE   = replace
            GSFNAME   = _gsfname;

  PROC GREPLAY IGOUT=&cat NOFS;
    DELETE _all_;
  RUN;
  QUIT;
%MEND;

/*** TABLEタグを使って、HTMLに表を作成するマクロ(gtable) ***/
%MACRO gtable;
  PROC CATALOG CAT=&gcat ENTRYTYPE=grseg;
    CONTENTS OUT=_templist;
  RUN;
  PROC SORT DATA=_templist;
    BY moddate;
  RUN;
  DATA _null_;
    LENGTH name $256;
    FILE _gtable;
    SET _templist END=eof;
    IF _N_=1 THEN DO;
       PUT "<HTML>"/
       "<!-- Generated by GTABLE Macro -->"/
       "<HEAD>"/
       "<TITLE>&tabletitle</TITLE>"/
       '<META http-equiv="Content-type" content="text/html">'/
       "</HEAD>"/
       "<BODY>"/
       "<TABLE  cellspacing=&cellpad border=&border>"/
       /* title */
       '<TR> <TD COLSPAN="'
          "&cells"
          '" ALIGN=center ><FONT  face="'
          "&face"
          '" size="5" color="#002288">'/
          "<B>&tabletitle</B></FONT></TD></TR>";
    END;
    i+1;
    IF i=1 then PUT"<TR>";
    PUT "<TD height=&ypixels width=&xpixels nowrap ALIGN=center>";
    name=TRIM(name)||".gif";
    PUT '<IMG SRC="' name  '"> </TD>';
    IF i=&cells or eof THEN DO;
       i=0;
       PUT "</TR>";
    END;
    IF eof then put "</TABLE> </BODY> </HTML>";
  RUN;
%MEND;


(実際の実行プログラム例)

  /* グラフ初期化 */
%gtableinit(dirpath=D:\web\,across=2,pagewidth=640,body=2columns.htm);

  /* 出力用グラフ作成 */
DATA test;
  DO hbar=1 TO 3;
     DO subgroup='A','B','C';
        sumvar=uniform(12345);
        OUTPUT;
     END;
  END;
RUN;
PROC GCHART;
  HBAR hbar / subgroup=subgroup sumvar=sumvar nostats;
  VBAR hbar / subgroup=subgroup sumvar=sumvar;
RUN;
PROC GCHART;
  HBAR hbar / subgroup=subgroup sumvar=sumvar nostats;
  VBAR hbar / subgroup=subgroup sumvar=sumvar;
RUN;
QUIT;

  /* HTMLファイル出力 */
%gtable;