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

徒然なるままにSAS暮らし

----

スポンサーサイト  

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Posted on --/--/-- --. --:-- [edit]

CM: --
TB: --

0822

datapanelステートメントとdatalatticeステートメント  

Graph Template Language(GTL)で分類変数のカテゴリごとのグラフを出力する場合に用いるdatapanelステートメントとdatalatticeステートメントを紹介します。双方のステートメントでほとんど同じオプションが使用できるのですが、datapanelステートメントが3個以上の分類変数を指定できるのに対して、datalatticeステートメントはその名の通り格子型の出力を想定しているので、行と列の2変数までの指定となります。もちろんSGRENDERプロシジャのby変数で他のカテゴリ変数のカテゴリごとに出力することは可能です。

・GTL内の主な構文
proc template ;
define statgraph _XXX94 ;
begingraph ;
entrytitle <"タイトル"> ;
layout datapanel<またはdatalattice> classvars=(変数1 変数2・・・) ;
layout prototype ;
plotステートメント ;
endlayout ;
sidebar ;
DiscreteLegendステートメント ;
endsidebar ;
endlayout ;

endgraph ;
end ;
run ;


・datapanelステートメントとdatalatticeステートメントの主な違い
項目datapaneldatalattice
分類変数の指定classvars=(変数1 変数2…)columnvar=列の分類変数 rowvar=行の分類変数
レイアウトカテゴリが各セル上部に表示される。行側・列側に格子状にカテゴリが表示される。
sparseオプション全てのカテゴリの組み合わせについて、true(空セル出力)またはfalse(空セル非出力)なし
skipemplycell(行と列の数と分類変数のカテゴリ数が一致しない場合)true(空セル出力)またはfalse(空セル非出力)true(空セル出力)またはfalse(空セル非出力)


datapanelステートメントとdatalatticeステートメントを使用して、以下の条件で生成した架空の臨床試験データ(変数VAL)で3群の平均値推移図を作成します。
・200例の被験者
・被験者ごとに2個の分類変数(CAT1, CAT2)
・3治療群、4時点の継時的なデータ(GRP, VISIT)

テストデータ作成
*** テストデータ作成 ;
data test ;
do I = 1 to 200 ;
GRP = rantbl(100,1/3,1/3,1/3) ;
CAT1 = rantbl(100,1/2,1/2) ;
CAT2 = rantbl(100,1/3,1/3,1/3) ;
do VISIT = 1 to 4 ;
VAL = 10 + GRP + CAT1 + CAT2 + GRP*CAT1 + GRP*CAT2 + VISIT + rannor(100) ;
output ;
end ;
end ;
run ;

*** 要約統計量の算出 ;
proc summary data=test nway ;
class CAT1 CAT2 VISIT GRP ;
var VAL ;
output out=_OUT(drop=_TYPE_ _FREQ_ ) mean=mean ;
run ;


続いて、GTLによるグラフ作成部分を以下に示します。細かいオプションは余力があれば別途紹介したいと思います。
①datapanelステートメント
proc template ;
define statgraph _XXX94 ;
begingraph / datacontrastcolors = (orange purple blue)
datalinepatterns = (1)
datasymbols = (circlefilled trianglefilled diamondfilled) ; *--- SGPLOTのstyleattrsに対応 ;
entrytitle "test" ;
layout datapanel classvars=(CAT1 CAT2)
/ start = topleft border = false headerlabeldisplay = namevalue skipemptycells = false sparse = false
columnaxisopts = (type=discrete display=(line ticks tickvalues label) label="Visit")
rowaxisopts = (display=all label='VAL (mg/dL)')
columndatarange = unionall rowdatarange = unionall
columngutter = 5 rowgutter = 1
columns = 3 rows = 3 ;

layout prototype ;
SeriesPlot X=VISIT Y=mean
/ group=GRP Lineattrs=(Thickness=1px) name="G" legendlabel="Group" groupdisplay=overlay display=(markers) ;
endlayout ;
sidebar / align=right ;
DiscreteLegend "G" "S" / displayclipped=true location=outside across=1 title="Group" border=false ;
endsidebar ;
endlayout ;

endgraph ;
end ;
run ;
*** グラフ出力 ;
proc sgrender data=_OUT template=_XXX94 ;
run ;


結果は以下になります。
datapanel_1.png

②datalatticeステートメント
*** datalatticeステートメント ;
*** 2変数指定の場合,行列の出力レイアウトが決まるのでdatalatticeにはsparseオプションは存在しない ;
proc template ;
define statgraph _YYY94 ;
begingraph / datacontrastcolors = (orange purple blue)
datalinepatterns = (1)
datasymbols = (circlefilled trianglefilled diamondfilled) ; *--- SGPLOTのstyleattrsに対応 ;
entrytitle "test" ;
layout datalattice columnvar=CAT1 rowvar=CAT2
/ start = topleft border = false headerlabeldisplay = namevalue skipemptycells = false
columnaxisopts = (type=discrete display=(line ticks tickvalues label) label="Visit")
rowaxisopts = (display=all label='VAL (mg/dL)')
columndatarange = unionall rowdatarange = unionall
columngutter = 5 rowgutter = 1
columns = 3 rows = 3 ;

layout prototype ;
SeriesPlot X=VISIT Y=mean
/ group=GRP Lineattrs=(Thickness=1px) name="G" legendlabel="Group" display=(markers) ;
endlayout ;
sidebar / align=bottom ;
DiscreteLegend "G" / displayclipped=true location=outside across=3 title="Group" border=false ;
endsidebar ;
endlayout ;

endgraph ;
end ;
run ;
*** グラフ出力 ;
proc sgrender data=_OUT template=_YYY94 ;
run ;


結果は以下になります。どちらも柔軟なレイアウトを指定できますので、カテゴリの出力レイアウトや分類変数の数でdatapanelとdatalatticeを使い分けましょう。
datalattice_1.png
スポンサーサイト

Posted on 2015/08/22 Sat. 23:38 [edit]

CM: 0
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。