2017年2月14日火曜日

annotateマクロの%systemの話

gplotなりsgplotなりグラフを作る時に、annotateマクロを使用することはあると思います。
数あるannotateマクロの中に、%system(hoge,hoge,hoge);があります。今回はそのお話
前にあげた<http://dengonmemo.blogspot.jp/2016/09/sas_29.html>と関連しています。
私も正しく理解しているかは怪しいところなので、間違っているかもしれませんです。

このマクロはannotateで文字やら線やらをグラフ内に書くときに、書く場所の設定をするマクロです。
そもそもsasで出したグラフには、data Area、Graphics Area、output Areaの3つがあります。
その三つを図で書くとだいたい下記のイメージです。(それぞれの斜線部分がそのAreaに対応)

data area(実際にグラフの値があるエリア)
|-----------------------|
|   |-----------------|   |
|   |                       |   |
|   |  ↑ /////////////    |   |
|   | |/////////////    |   |
|   | |/////////////    |   |
|   | |---→  |   |
|   |----------------  |   |
|                               |
|---------------------- |

Graphics Area(画面全体)
|---------------------|
|/////////////////////////|
|/|-----------------|///|
|/|/////////////////////|///|
|/|/ ↑/////////////////|///|
|/|/|////////////////|///|
|/|/|////////////////|///|
|/|/|---→//|///|
|/|/////////////////////|///|
|/|------------------|///|
|//////////////////////////|
|----------------------|

Output Area(全体からheaderとfooterを除いたところ)
|-----------------------|
|                               |
| |-------------------|   |
| |///////////////////////|   |
| |/↑////////////////////|   |
| |/|//////////////////|   |
| |/|//////////////////|   |
| |/|---→////|   |
| |///////////////////////|   |
| |-------------------|   |
|                               |
|----------------------- |

%systemの引数に1,2を指定するとData Area、3,4でGraphics Area、5,6でoutput Areaに
以降で使用するannotateマクロが出力されるようになります。
また1,3,5を指定すると百分率、2,4,6を指定すると座標で、以降のannotateマクロでの座標が指定できるようになります。

例えば%system(2,2,3)で、グラフのdata Areaの座標でannotateマクロを指定できます。
この下に%line( 1 , 30 , 1 , 28.5   , black, 1  , 0.15   );とすると
[1,30]から[1,28.5]に線を引きます。
%system(1,2,3)と記載した際、第一引数が1なので出力が百分率扱いなので、
この下のannotateマクロの指定で100より大きい値は指定できません。(100%が最大値)

また以下の様に一つのデータステップで複数回%systemは指定できます。
指定のたびに設定が切り替わります。
data anno;
    %system(2,2,3);
    *-----lineのX,Yは座標で指定できる;
    %line(~~);

  *-----lineのXは百分率(%)、Yは座標で指定できる;
    %system(1,2,2);

    %line(~~);
run;

%systemの第三引数は私も良くわかっていないので、今は扱っていません。
どなたか教えていただければ…

1 件のコメント:

  1. こんにちは。
    ANNOTATEマクロ使ったことないのでとても勉強になります!

    構文は以下のような感じで、第3引数はサイズ設定に関係しているようですよ。
    %system(xsys,ysys,hsys)

    以下のp17あたりに書いてありました。
    http://www.lexjansen.com/pharmasug/2010/TT/TT02.pdf

    返信削除