SAS

SASで複数のグラフを配置する(2) proc report

前回に引き続き複数のグラフを格子状に配置する方法を検証をしていきます

今回はproc reportを検証します。業務ではそこそこ使うプロシジャですから、汎用性は高いはずですが、はたしてどうでしょうか?

前回記事

SASで複数のグラフを配置する(1) ods layout前回は評価項目ごとにグラフを出力しましたが、複数のグラフを格子状(グリッド)に配置するケースは多いと思います。 グリッド上に配置する方...

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ファイルの組み合わせで成果物を作成する方法は現実的には限られそうですね。