前回に引き続き複数のグラフを格子状に配置する方法を検証をしていきます
今回はproc reportを検証します。業務ではそこそこ使うプロシジャですから、汎用性は高いはずですが、はたしてどうでしょうか?
前回記事
preimage属性でテーブル内に画像を挿入する
proc report のpreimage属性を使用することで、指定した画像ファイルを挿入できます。
Style=[preimage='画像ファイルパス']
予めproc sgrenderで画像をファイルとして出力し、そのファイルをproc reportを使用して画像を挿入してみます。
今回は前回作成した4枚のグラフを2*2のテーブルの各セルに挿入してみました。
まずグラフをpngファイルとして出力し、そのファイルパスをデータセットに格納します。
data forreport;
length col1-col2 $500;
col1='グラフ1のファイルパス';
col2='グラフ2のファイルパス';
output;
col1='グラフ3のファイルパス';
col2='グラフ4のファイルパス';
output;
run;
このデータセットをproc reportに読み込ませてテーブルを作成します。
ファイルパスをデータセットから取得するため、call defineでpreimage属性の値にデータセットに格納されたファイルパスを挿入することで画像ファイルを定義します。
このままだとデータセット内のファイルパス文字列が表示されてしまうため、preimage属性を設定後にファイルパスを消去しています。
ods pdf file="pdfファイルパス" ;
options orientation=landscape;
options nobyline nodate;
proc report data=forreport nofs nowd
/*テーブルの枠線を非表示にする*/
style(report)={rules=none frame=void};
column col1 col2;
/*ヘッダー文字列は非表示する*/
define col1 / "" ;
define col2 / "" ;
compute col1;
call define(_col_,"Style","Style=[preimage='"!!col1!!"']");
col1=""; *ファイルパスを非表示にする;
endcomp;
compute col2;
call define(_col_,"Style","Style=[preimage='"!!col2!!"']"); col2="";
*ファイルパスを非表示にする;
endcomp;
run;
ods pdf close;
単純にグラフをグリッド上に配置するだけならgtlよりもproc reportのほうが既存のプロシジャやデータステップを有効活用できるので、使いやすいかもしれませんね。
rtfファイルには非対応?
上記のコードはods pdfで出力していますが、残念ながら上記のコードはods rtfでは使えません。
画像フォーマットをpngではなくemfを使えば行けるかと思いましたが、preimage属性はどうやらemfに対応していないです。
一応フィールドコードを挿入する方法であればemfファイルを挿入できるらしいのですが、画像のリンクを挿入しているだけなので使えなさそう。
rtfファイル+emfファイルの組み合わせで成果物を作成する方法は現実的には限られそうですね。