---
title: 症例フロー図の作成
tags:  #[第3回大阪sas勉強会]  
author: [森岡裕[SASユーザー総会世話人]](https://www.docswell.com/user/6484025)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/3EKDQ22MJD.jpg?width=480
description: [第3回大阪sas勉強会]山野辺浩己
published: March 31, 24
canonical: https://www.docswell.com/s/6484025/5RX1X1-2024-03-31-110807
---
# Page. 1

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

症例フロー図の作成
山野辺
浩己


# Page. 2

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

フロー図の作成
• フロー図の作成は，毎回結構頭を悩まされます
• 最近，方々の手段を用いて作成しています
• それらの紹介を致します
• エクセルDDE
• Proc stream
• Proc odstable
• Sgplot(polygon statement)


# Page. 3

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

Excel DDE
• エクセルで事前に雛形を作成し，
• そこにDDEでゴリゴリ書き出す方法
• 利点
• 使い慣れたエクセルを使えるため手間がいらない
• デメリット
• 他の帳票がrtfな中，エクセルで作成する点


# Page. 4

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

• さしておもしろくない方法なのでコードと見本は省略します


# Page. 5

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

Proc stream
• 雛形を事前に作成して，それをproc streamで流します
• 利点
• コードが短く，単純な構造で済ませられること
• デメリット
• 事前の雛形が必要になること


# Page. 6

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

• 雛形


# Page. 7

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

%let m1 =21;
%let m2 =54;
%let m3 =25;
%let m4 =21;
...
%let m16=21;
%let time=2018-06-22;
filename in &quot;F:\DS\SA1\部内専用\SA1\7G_work\個人用\山野辺\大阪勉強会\03\test_in.rtf&quot; lrecl = 32755;
filename out &quot;F:\DS\SA1\部内専用\SA1\7G_work\個人用\山野辺\大阪勉強会\03\test_out.rtf&quot; lrecl = 32755;
proc stream outfile=out resetdelim=&quot;rdlm&quot; quoting=single;
begin rdlm;
%include in;
;;;;


# Page. 8

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

• 実行後


# Page. 9

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

• Rtf上にマクロを埋め込むことで，擬似的な集計も可能
• phamaSUGの論文を一部紹介


# Page. 10

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



# Page. 11

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

Macro cx
• %macro cx(flag);
•
%global rx;
•
%let u1=%sysfunc(dosubl(
•
&#039;proc sql noprint;
•
select sum(&amp;flag.)
•
into :rx TRIMMED
•
from adsl;
•
quit;&#039;));
•
&amp;rx.
• %mend cx;
Cx内では，dosubl関数を使っています．
１．SQLを呼び出しています．
２．引数のカウントを取って，マクロ変数rxへ
３．マクロ変数rxを展開して，返り値としています
dosubl(呼出し文);
SASが読み込んだ瞬間に，呼出し文にあたる部分
のコードが，実行されます．


# Page. 12

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

Macro cx
• %macro cx(flag);
•
%global rx;
•
%let u1=%sysfunc(dosubl(
•
&#039;proc sql noprint;
•
select sum(&amp;flag.)
•
into :rx TRIMMED
•
from adsl;
•
quit;&#039;));
•
&amp;rx.
• %mend cx;
Cx内では，dosubl関数を使っています．
１．SQLを呼び出しています．
２．引数のカウントを取って，マクロ変数rxへ
３．マクロ変数rxを展開して，返り値としています


# Page. 13

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

Macro cx
• %macro cx(flag);
•
%global rx;
•
%let u1=%sysfunc(dosubl(
•
&#039;proc sql noprint;
•
select sum(&amp;flag.)
•
into :rx TRIMMED
•
from adsl;
•
quit;&#039;));
•
&amp;rx.
• %mend cx;
Cx内では，dosubl関数を使っています．
１．SQLを呼び出しています．
２．引数のカウントを取って，マクロ変数rxへ
３．マクロ変数rxを展開して，返り値としています


# Page. 14

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

Macro cx
• %macro cx(flag);
•
%global rx;
•
%let u1=%sysfunc(dosubl(
•
&#039;proc sql noprint;
•
select sum(&amp;flag.)
•
into :rx TRIMMED
•
from adsl;
•
quit;&#039;));
•
&amp;rx.
• %mend cx;
Cx内では，dosubl関数を使っています．
１．SQLを呼び出しています．
２．引数のカウントを取って，マクロ変数rxへ
３．マクロ変数rxを展開して，返り値としています


# Page. 15

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

Macro cx
• %macro cx(flag);
•
%global rx;
•
%let u1=%sysfunc(dosubl(
•
&#039;proc sql noprint;
•
select sum(&amp;flag.)
•
into :rx TRIMMED
•
from adsl;
•
quit;&#039;));
•
&amp;rx.
• %mend cx;
Flagに与えた変数をカウントして，
結果を返してくれるマクロ！
Cx内では，dosubl関数を使っています．
１．SQLを呼び出しています．
２．引数のカウントを取って，マクロ変数rxへ
３．マクロ変数rxを展開して，返り値としています


# Page. 16

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



# Page. 17

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



# Page. 18

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

Proc odstable
• テーブルを書いて，擬似的にフロー図に見せかける
• 利点
• テンプレートを用意せずに済む．
• 出力する内容に左右されない
• デメリット
• テーブルで図を描くというもどかしさ
• Programが書きづらく読み難い


# Page. 19

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



# Page. 20

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

←データセットの1行目
←データセットの2行目
←データセットの3行目
←データセットの4行目


# Page. 21

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

proc odstable data=test_data;
** 罫線処理;
style={frame=void};
** column;
column out1 - out5;
** 罫線処理;
cellstyle _row_=1 and _col_ in (1)
as {borderbottomwidth=1
borderleftwidth=1 bordertopwidth=1 }
,_row_=1 and _col_ in (2)
as {borderbottomwidth=1 borderrightwidth=1
bordertopwidth=1 }
,_row_=2 and _col_ in (1)
as {
borderrightwidth=1
}
,_row_=2 and _col_ in (2,3,4) as {borderbottomwidth=1
}
,_row_=3 and _col_ in (1,4) as {borderbottomwidth=1 borderrightwidth=1
}
,_row_=3 and _col_ in (2,5) as {borderbottomwidth=1
}
,_row_=4 and _col_ in (1,4) as {borderbottomwidth=1
borderleftwidth=1 bordertopwidth=1 }
,_row_=4 and _col_ in (2,5) as {borderbottomwidth=1 borderrightwidth=1
bordertopwidth=1 }
;
** header;
define header header1; start=out1; end=out1; end;
define header header2; start=out2; end=out2; end;
define header header3; start=out3; end=out3; end;
define header header4; start=out4; end=out4; end;
define header header5; start=out5; end=out5; end;
** column;
define out1; print_headers=off; just=left;
style={cellwidth=200}; end;
define out2; print_headers=off; just=right;
style={cellwidth=100}; end;
define out3; print_headers=off; just=left;
style={cellwidth=100}; end;
define out4; print_headers=off; just=left;
style={cellwidth=200}; end;
define out5; print_headers=off; just=right;
style={cellwidth=100}; end;
run;


# Page. 22

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

Sgplot(polygon statement)
• Polygonで自由線を引き，フロー図を作成する
• 利点
• Figureをsgplotで画像データとして作成できる
• テンプレートが不要で，rtfに出力できる
•
•
•
•
デメリット
画像のため，数字の切り貼りが出来ない
編集や扱いに難有り
Programが書きづらく読み難い


# Page. 23

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

Proc sgplot
• Polygon statement
・指定した座標から座標へ，線を描く
・（イメージ）一筆書きで，連続した線を描く
→座標を指定したデータセットを作成しなければならない・・・
ということで・・・


# Page. 24

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



# Page. 25

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

•
•
/*枠線の座標*/
do boxid=&quot;1&quot;;
•
x = 0 ; y = 100; output;
•
x = 33 ;
output;
•
y = 87 ;
output;
•
x=0;output;
•
•
call missing(boxid);
end;
•
/*区切り線の座標*/
•
do boxid=&#039;1-1&#039;;
•
x = 0 ; y = 96.5 ; output;
•
x = 33 ; y = 96.5 ; output;
•
call missing(boxid);
•
end;
•
/*テキスト部分*/
•
do textid=&#039;1&#039;;
•
text = &quot;登録例&quot;
•
text = &quot;&amp;n1_0. 例&quot; ; x = 22 ; y = 98 ; output;
•
text = &quot;AAAA群&quot;
•
text = &quot; &amp;n1_1. 例&quot; ; x = 22 ; y = 95 ; output;
•
text = &quot;BBBB群&quot;
•
text = &quot; &amp;n1_2. 例&quot; ; x = 22 ; y = 92 ; output;
•
text = &quot;CCCC群&quot; ; x = 5 ; y = 89 ; output;
•
text = &quot; &amp;n1_3. 例&quot; ; x = 22 ; y = 89 ; output;
•
call missing(of text textid);
•
end;
; x = 1 ; y = 98 ; output;
; x = 5 ; y = 95 ; output;
; x = 5 ; y = 92 ; output;
←１つのブロックを書くための情報
これをブロックの分，書いてやる
今回は7個分書くため，左のコード×7


# Page. 26

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

• proc sgplot data=samp1 pad=(top=10% left=10%) noborder noautolegend;
•
/*箱の線を引いている部分*/
•
polygon id=boxid x=x y=y/lineattrs=(thickness=2);
•
/*テキスト描画部分
•
--セル内改行したい場合は、データセットの値に#をいれる。
•
•
*/
text x=x y=y text=text / textattrs=(size=8 family=&quot;MS PGothic&quot; ) position=right splitchar=&#039;#&#039; ;
•
/*つなぎ線部分*/
•
series x=line_x y=line_y/ group=lineid lineattrs=(color=black pattern=1 thickness=2) ;
• /*軸設定*/
• xaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
•
yaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
• run;


# Page. 27

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

参考
• データステップ100万回
http://sas-tumesas.blogspot.com/2016/11/blog-post_15.html
・コード提供
森岡さん
• Joseph Hinson,2018
https://www.pharmasug.org/proceedings/2017/BB/Pharma
SUG-2017-BB02.pdf


