僕の頁 <SASと臨床試験と雑談と>

徒然なるままにSAS暮らし

0814

続・RWI:ODS LAYOUTとの比較編  

前回に引き続き、RWIで遊んでみました。内容は例のごとくSAS忘備録で紹介されているもので、今回はODS LAYOUTによるグラフの出力をRWIでも実行してみました。出力内容は2013年のSASユーザー総会の「ODS LAYOUTによるワクチンの臨床開発におけるDashboardの作成」の例示の部分です(資料はユーザー登録すればSASプレミアムラウンジからダウンロード可能です)。
自動車関連の情報を格納したsashelp.carsデータセットを用いて、馬力、価格、燃費等を要約した4個のグラフを白黒で2行2列のレイアウトに出力します。
①ODS LAYOUTで出力
2x2のグリッドを定義して、PDFファイルに4個のグラフを出力する。この際に作成したグラフを所定のフォルダに保存しておく(ods listingのgpathオプション、imagenameオプション)。
②RWIで出力
①で保存した画像ファイルを2x2のレイアウトで出力する。

まずは白黒スタイル作成部分。SAS9.4では以前紹介したstyleattrsステートメントを使用すればSGプロシジャ内で定義できますが、ここでは分けて記述します。
options nocenter nodate nonumber papersize=A4 orientation=landscape nofmterr mprint ;

*** グレースケール用のスタイルテンプレート ;
proc template ;
define style Mystat ;
parent=styles.statistical ;
class Graphdata1 /
contrastcolor = black linestyle = 1 linethickness = 1px markersymbol = "trianglefilled" foreground = CXdcdcdc ;
class Graphdata2 /
contrastcolor = black linestyle = 1 linethickness = 1px markersymbol = "circlefilled" foreground = CXb7b7b7 ;
class Graphdata3 /
contrastcolor = black linestyle = 1 linethickness = 1px markersymbol = "diamondfilled" foreground = CX808080 ;
class Graphdata4 /
contrastcolor = black linestyle = 1 linethickness = 1px markersymbol = "triangle" foreground = CX555555 ;
class Graphdata5 /
contrastcolor = black linestyle = 1 linethickness = 1px markersymbol = "circle" foreground = CX3f3f3f ;
class Graphdata6 /
contrastcolor = black linestyle = 1 linethickness = 1px markersymbol = "diamond" foreground = black ;
end ;
run ;

続いて、メインのグラフ作成部分です。まずODS LAYOUTで出力し、RWIではimageメソッドで作成した画像ファイルを指定してPDFに出力します。
*** 1. ODS LAYOUTのグリッドでグラフを出力する ;
ods graphics on / width=5.3in height=3.5in imagename="test" ; *--- testという名前の連番で画像ファイル保存 ;
ods listing gpath="/test" style=Mystat dpi=150 ; *--- 画像ファイル作成の際に白黒適用 ;
ods pdf file="/test/test.pdf" style=Mystat nogtitle dpi=150 ; *--- PDF出力に白黒適用 ;

title "ODS LAYOUT statement" ;
ods layout start columns=2 rows=2 ; *--- 2x2のグリッドを定義 ;
ods region ; *--- 1個目の領域 ;
proc sgpanel data=sashelp.cars ;
panelby TYPE / novarname ;
hbar Origin / response=Horsepower group=Origin stat=mean datalabel dataskin=gloss ;
label Horsepower="Horsepower (ps)" ;
format Horsepower 7.1 ;
run ;

ods region ; *--- 2個目の領域 ;
proc sgplot data=sashelp.cars ;
hbar Origin / response=MSRP group=Type stat=sum datalabel dataskin=gloss groupdisplay=cluster ;
label MSRP="MSRP($)" ;
run ;

ods region ; *--- 3個目の領域 ;
proc sgplot data=sashelp.cars ;
vbar Origin / response=MPG_City group=Type stat=mean datalabel dataskin=gloss groupdisplay=cluster ;
label MPG_City="Miles per Gallon" ;
format MPG_City 7.1 ;
run ;

ods region ; *--- 4個目の領域 ;
proc template ;
define statgraph CreatePie ;
begingraph ;
layout region ;
piechart category=Type response=MSRP
/ group=Origin groupgap=5 dataskin=sheen name="pie" ;
discretelegend "pie" / border=true ;
endlayout ;
endgraph ;
end ;
run ;

proc sgrender data=sashelp.Cars template=CreatePie ;
run ;

title ;

ods layout end ;
ods pdf close ;
ods graphics / reset=all ; *--- filenameの連番リセットだけならreset=index ;

*** 2. 上記で作成したグラフをRWIで出力する ;
ods pdf file="/test/test2.pdf" style=Mystat dpi=150 ;
title "layout_gridded method in RWI" ;
data _null_ ;
dcl odsout rwi() ;
rwi.layout_gridded(rows: 2,columns: 2) ; *--- 2x2のグリッドを定義 ;
rwi.region() ; *--- 1個目の領域 ;
rwi.image(file: "C:\test\test.png") ; *--- 1個目のグラフ(画像ファイル) ;
rwi.region() ; *--- 2個目の領域 ;
rwi.image(file: "C:\test\test1.png") ; *--- 2個目のグラフ(画像ファイル) ;
rwi.region() ; *--- 3個目の領域 ;
rwi.image(file: "C:\test\test2.png") ; *--- 3個目のグラフ(画像ファイル) ;
rwi.region() ; *--- 4個目の領域 ;
rwi.image(file: "C:\test\test3.png") ; *--- 4個目のグラフ(画像ファイル) ;
rwi.layout_end() ;

run ;
title ;
ods pdf close ;

結果は以下になります。titleが異なるのと、少しだけODS LAYOUTのほうが綺麗に出力されている気がしますが、dpiも同じ値にしてるし理由は分かりません。また、ODS LAYOUTでは当然ながらグラフの作成と出力が同時に実行できますが、今回の例のように、RWIは一度グラフを画像ファイルで保存しておくしかないのだとしたら、ひと手間余計に掛かってしまうことになります。もしDATAステップの中でSGPLOTを実行して出力ファイルをRWIで使用できるなんていう離れ業が1ステップで実現できれば、RWI以外にも様々な可能性が広がりそうですね。
RWI_02_1.png
RWI_02_2.png

Posted on 2015/08/14 Fri. 01:28 [edit]

CM: 0
TB: 0

« 申請時電子データ提出におけるADaMの位置付け  |  Report Writing Interface (RWI)を試してみる »

Comments
Post a comment
Secret

Trackbacks
TrackbacksURL
→http://sasboku.blog.fc2.com/tb.php/55-ac7cf77c
Use trackback on this entry.

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top