2023年10月24日火曜日

複合パネルのグラフの作り方についての紹介

 先日のsasユーザー総会で散布図行列の作り方なる素晴らしい発表があってからというもの、あちこちで散布図行列の作り方や一ページに複数枚のグラフを貼った、複合パネルのグラフの作り方が紹介されている。これだけ色々なところで取り上げられているなら便乗しないともったいない。

例えばかの有名なブログではRWIで複合パネルのグラフを作る方法について紹介されている
https://sas-tumesas.blogspot.com/2023/10/blog-post.html

普通に考えればGTLでやればいいというのは全くその通りなのだが、sgplotで書いたグラフ画像をproc reportを使って一ページに複数枚配置する方法について紹介する。需要?多分無いよ

グラフについては各々sgplotで出力してもらうとして、今回は以下のようなpngを3*3で配置してみようと思う。どこにでもあるpngですね。PharmaSUG 2023 SDEは大阪で開催予定です。ぜひご参加下さい。

この画像を3*3にproc reportで並べたものをrtf出力すると以下のようなイメージに。もうちょっと縦に伸ばすとぴったりはいるが、どうせ脚注やら何かしらを入れるので余白のままにしている。そこまでの調整がめんどくさかったわけではないんです本当です信じてください。


以下が出力プログラム。データセットに出力したいpng名を指定した変数を作って、proc reportでそれぞれを呼び出して並べています。あくまでpingを並べているだけなので相関係数などの文字列だけ出したいときは、それだけの画像を良い感じに準備すればok。散布図行列ではないので複数グラフ共通のラベルなどは出せないのであしからず。

%let path = piyopiyo ;

data V_GRAPH ;

    L1 = "&path.\PharmaSUG.png" ; R1 = "&path.\PharmaSUG.png" ; output ;

    L1 = "&path.\PharmaSUG.png" ; R1 = "&path.\PharmaSUG.png" ; output ;

    L1 = "&path.\PharmaSUG.png" ; R1 = "&path.\PharmaSUG.png" ; output ;   

run ;


title1 ;

title2 ;


options orientation=portrait papersize=A4;

ods rtf file = "&path.\multi.rtf" nogtitle nogfootnote ;

      proc report data=V_GRAPH nowindows style(report)=[rules = none frame = void] ;

         column L1 R1 ;

        /*- style --*/

        define L1   / style={cellwidth=9.5 cm cellheight = 6.5 cm } "" ;

        define R1   / style={cellwidth=9.5 cm cellheight = 6.5 cm} "" ;

        compute L1 ;

            call define(_col_ , "style" , "style=[preimage='"||L1||"' just = center]") ;

            L1 = "" ;

        endcomp ;

        compute R1 ;

            call define(_col_ , "style" , "style=[preimage='"||R1||"' just = center]");

            R1 = "" ;

        endcomp ;

        footnote1 j=l "test" ;       

      run;

ods rtf close;