解析対象集団とかのフロー図を一緒に書いてみよう!

たまには役に立つ話をしましょうか!!

各解析対象集団のフロー図は、いろんな業界で頻繁に書きますよね
でもだいたいの業界では、SASでは数字だけ出して図は別のソフトとかで書いちゃいます

ただ、医薬系は色々あって、手で数字の切り貼りはあんまりやらないし、
いろんなソフトを組み合わせるのも、ちょっとやりにくかったりします。

完全にSASでやれと言われると結構面倒ですよね。
出力がEXCELならまあ、エクセルの罫線でテンプレート書いといて、セルにDDEやらLIBNAMEで出せばいいかな。

RTFなら?
まあ、EXCELと同じようにWORDで表作って、そこにマクロ変数埋めてproc streamするとか、
proc reportでも頑張れば書けるらしいので、もし先人の作った偉大なマクロがあればそれを使いますね。
putでタグを頑張って表を作るのもありでしょう。

画像で作って欲しいと言われたら?
GPLOTとかSGPLOTで書くのか~。annotateいるのかな~、なんか面倒そうだな~って感じします。

みんなどうしてるんでしょうね

最近の感想としては、9.4からsgplotに一筆書きの感覚でどんな図形でも書き放題のpolygonステートメントができて、四角の枠が書きやすくなったことと(まあ、以前でも直線4つで箱書けばいいんですけどね。)、textステートメントが追加(以前はscatterのマーカーにテキストあててじゃないとできなかったはず)されたことで、エクセル芸を駆使するような特殊なものでなければsgplotで書くのが一番楽なんじゃないかなと思うようになりました

一気に書くと何やってるかわかりにくいので、一個ずつ手順を踏んで一緒に素敵なフロー図をつくましょう

まずは箱を一個作ってみましょう

/*1個目の箱*/
data hako1;
boxid=1;box_x=10;box_y=100;output;
boxid=1;box_x=30;box_y=100;output;
boxid=1;box_x=30;box_y=90;output;
boxid=1;box_x=10;box_y=90;output;
run;

title "Step1 箱を書いてみよう";
proc sgplot data=hako1 noborder noautolegend;
  polygon id=boxid x=box_x y=box_y;
  xaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
  yaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
run;



はい、適当な解説をいれます。
polygonステートメントは1個のをまとまりを作るためにid=でIDを指定する必要があります。
後はx軸の値をy軸の値で四角形になるように座標取りすればいいのですが注意点は
オブザベーションの並びです。四角形の左上→右上→右下→左下

次は箱にテキスト入れてみましょう

/*1個目のテキスト*/
data text1;
text="将棋経験者#N=100";text_x=20;text_y=95;output;
run;

data hakotext1;
set hako1 text1;
run;

title "Step2 文字を入れてみよう";
proc sgplot data=hakotext1 noborder noautolegend;
  polygon id=boxid x=box_x y=box_y;
  text x=text_x y=text_y text=text / textattrs=(size=12 )  splitchar='#' splitpolicy=splitalways;
  xaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
  yaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
run;




楽ですね~。座標と内容を書くだけですね。 split系のオプションを使うことで改行を制御できます

次は矢印ですね!これはseriesにarrow系オプションを併用することでできます

/*1個目の矢印*/
data yaji1;
yajiid=1;yaji_x=20;yaji_y=90;output;
yajiid=1;yaji_x=20;yaji_y=80;output;
run;

data hakotextyaji1;
set hako1 text1 yaji1;
run;

title "Step3 矢印を入れてみよう";
proc sgplot data=hakotextyaji1 noborder noautolegend;
  polygon id=boxid x=box_x y=box_y;
  text x=text_x y=text_y text=text / textattrs=(size=12 )  splitchar='#' splitpolicy=splitalways;
  series x=yaji_x y=yaji_y/ group=yajiid  lineattrs=(color=black) arrowheadpos=end  arrowheadscale=0.3;

  xaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
  yaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
run;



でけたでけた。

じゃあその調子で2段目に2個ブロックを作って、そこに矢印引いてみましょうか

/*2段目の箱*/
data hako2;
boxid=2;box_x=10;box_y=80;output;
boxid=2;box_x=30;box_y=80;output;
boxid=2;box_x=30;box_y=70;output;
boxid=2;box_x=10;box_y=70;output;

boxid=3;box_x=40;box_y=80;output;
boxid=3;box_x=60;box_y=80;output;
boxid=3;box_x=60;box_y=70;output;
boxid=3;box_x=40;box_y=70;output;
run;
/*2段目のテキスト*/
data text2;
text="振飛車党#N=50";text_x=20;text_y=75;output;
text="居飛車党#N=50";text_x=50;text_y=75;output;
run;

/*2段目の矢印★途中で折り曲げてるので3つで1データ*/
data yaji2;
yajiid=2;yaji_x=20;yaji_y=85;output;
yajiid=2;yaji_x=50;yaji_y=85;output;
yajiid=2;yaji_x=50;yaji_y=80;output;
run;

data hakotextyaji2;
set hako1 text1 yaji1 hako2 text2 yaji2;
run;

title "Step4 もう要領つかんだよね";
proc sgplot data=hakotextyaji2 noborder noautolegend;
  polygon id=boxid x=box_x y=box_y;
  text x=text_x y=text_y text=text / textattrs=(size=12 )  splitchar='#' splitpolicy=splitalways;
  series x=yaji_x y=yaji_y/ group=yajiid  lineattrs=(color=black) arrowheadpos=end  arrowheadscale=0.3;

  xaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
  yaxis display=none min=0 max=100 offsetmin=0 offsetmax=0;
run;



矢印をカギ形に曲げたりするのも普通に3点指定するだけなので、そんなに難しくないはず。

ここまで、できた人は、チャレンジで振飛車を中飛車、四間飛車、三間飛車、向かい飛車に分類するフロー図を書いてみましょう!!

僕は面倒なのでここまでで!

0 件のコメント:

コメントを投稿