---
title: 小さく始めるSGPLOT・SGPANEL
tags:  #[第8回大阪sas勉強会]  
author: [森岡裕[SASユーザー総会世話人]](https://convert.docswell.com/user/6484025)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/Y79WK19Y73.jpg?width=480
description: [第8回大阪sas勉強会] 森田祐介
published: March 29, 24
canonical: https://convert.docswell.com/s/6484025/5NRDED-2024-03-29-061404
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/Y79WK19Y73.jpg)

第８回
大阪SAS勉強会
小さく始める
SGPLOT・
SGPANEL
ノーベルファーマ株式会社
データサイエンス室
森田 祐介


# Page. 2

![Page Image](https://bcdn.docswell.com/page/G78NR49KJD.jpg)

イントロ：可視化で価値化
• データを集める時代から、データが集まる時代へ
• データを価値ある情報へ
• データを可視化する技術の重要性UP
• Risk Based Monitoring
• 大規模データに対するクリーニング：Central Statistical Monitoring
• 可視化に関する本も増えているような…
• SASの進化
• GPLOTからSGPLOTへ
• SGPANELも便利
• RやSpotfireに負けそうだけど
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/L7LPK6WPJR.jpg)

SGPLOT／SGPANELを小さく始める
• いろいろオプションはあるけども、はじめの一歩を踏み出す
• 手を動かしていただきたい
• 眠気防止
• 治験でよく作るグラフだけ紹介
•
•
•
•
•
箱ひげ図
散布図／回帰
個別症例の推移図
平均±SDの推移図
異なるグラフを重ねる
• SGPANELも紹介
• SGPLOTと文法は似ている 、まとめて習得がお得
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/4EM42592JW.jpg)

箱ひげ図
proc sgplot data = test;
X軸の変数
vbox CHG / group=TRTP category=AVISITN;
run;
Y軸の変数
群の変数
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/PERWM3G5J9.jpg)

散布図／回帰
proc sgplot data = test3;
run;
scatter x = CHG4 y = CHG12/group=TRTP;
X軸の変数
Y軸の変数
群の変数
proc sgplot data = test3;
run;
reg x = CHG4 y = CHG12/group=TRTP;
線形回帰はregに変更するだけ
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/P7XPV4XXJX.jpg)

個別症例の推移図
proc sgplot data = test;
run;
被験者を識別するための変数
series x = AVISITN y = CHG/markers group=USUBJID;
データの位置にシンボルを表示
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/37KDQZW9ED.jpg)

平均±SDの推移図
proc sgplot data = test;
Y軸の変数
群の変数
群別にずらして表示
平均を結んで
vline AVISITN /response = CHG group = TRTP groupdisplay = cluster stat = mean
limitstat = stddev limits = both markers ;
run;
ひげはSD
ひげは上下に表示
X軸の変数
SGPLOTが
平均値とSDを
計算して作図
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LJ3RPD19E5.jpg)

異なるグラフを重ねる（蜂峰図）
proc sgplot data = test;
同じ値(Y)はずらして表示
scatter x = AVISITN y = CHG/group=TRTP groupdisplay=cluster jitter;
vbox CHG /group=TRTP category=AVISITN nofill nooutliers;
run;
箱ひげ図は塗りつぶさない
外れ値は表示しない
(scatterに任せる)
散布図と箱ひげ図
の重ね合わせ
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/8JDYLPX8JG.jpg)

異なるグラフを重ねる（散布図と回帰）
proc sgplot data = test3;
scatter x = CHG4 y = CHG12/group=TRTP;
run;
reg x = CHG4 y = CHG12/nomarkers /*group=TRTP*/;
個別データは表示しない
（scatterに任せる）
群別の散布図と
群を区別しない回帰
の重ね合わせ
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/VEP62NPW78.jpg)

SGPANEL（施設別の散布図）
proc sgpanel data = test3;
黄色マーカー以外はSGPLOT
の文法と同じ
panelby SITEID/rows=2 columns=3;
run;
scatter x = CHG4 y = CHG12/group=TRTP;
施設別に
群別の散布図を
作成
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/27V3DK29JQ.jpg)

SGPANEL（群別の個別推移図）
proc sgpanel data = test noautolegend/*凡例非表示*/;
黄色マーカー以外はSGPLOT
の文法と同じ
panelby TRTP/rows=1 columns=2 novarname;
run;
series x = AVISITN y = CHG/markers group=USUBJID;
パネルの上部に変数名を表示しない
群別に
個別症例の推移図を
作成
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/5JG3YQR4EL.jpg)

困ったら…「SGPLOT」で画像検索
ChatGPTも相談に
乗ってくれそう
• 同じ問題に出会って解決した賢い先人がいる
• 検索結果からイメージに近いグラフを見つけてサンプルコードを入手
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/47Q5MKVREP.jpg)

まとめ：SGPLOT／SGPANELを小さく始めた
• いろいろオプションはあるけども、はじめの一歩を踏み出した
• 手を動かした
• 誰も眠っていない？
• 治験でよく作るグラフだけ紹介した
•
•
•
•
•
箱ひげ図
散布図／回帰
個別症例の推移図
平均±SDの推移図
異なるグラフを重ねる
• SGPANELも紹介
• SGPLOTと文法は似ている、まとめて習得がお得
• 質は量に比例する
• たくさん手を動かして体得する
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/KE49VPMQJ1.jpg)

Backup:テストデータ作成
data test;
proc transpose data = test out = test2 prefix=CHG;
call streaminit(20230324);
STDDEV = 4;
do USUBJID = 1 to 40;
TRTPN = mod(USUBJID, 2);
if TRTPN = 0 then TRTP = &quot;Placebo&quot;;
else TRTP = &quot;Active&quot;;
SITEID = mod(USUBJID, 5);
do AVISITN = 0 to 12 by 4;
by USUBJID SITEID TRTP:;
var CHG;
id AVISITN;
run;
data test3;
set test2;
label CHG4 = &quot;Change from Baseline (Week 4)&quot; CHG8 =
&quot;Change from Baseline (Week 8)&quot; CHG12 = &quot;Change from
Baseline (Week 12)&quot;;
run;
if AVISITN = 0 then CHG = 0;
else CHG = rand(&quot;Normal&quot;, AVISITN
* TRTPN, STDDEV);
output;
end;
end;
label TRTP = &quot;Planned Treatment&quot; SITEID =
&quot;Site ID&quot; AVISITN = &quot;Analysis Visit (N)&quot; CHG =
&quot;Change from Baseline&quot;;
run;
14


