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の第三引数は私も良くわかっていないので、今は扱っていません。
どなたか教えていただければ…
2017年2月14日火曜日
2017年2月3日金曜日
グラフの中の軸の範囲外の値を、はみ出ていることが分かるように出力する話
通常sasのgplotで出力したグラフは、軸に設定した値に収まらないデータがいる場合、
ログに範囲外のデータがいますよってnoteを出してくれます。
出してくれますが、出力したグラフを見てもどこが範囲外のデータなのかはわかりません。
今回ははみ出たデータをグラフにそれとわかるように出力するお話です。
data hoge;
a = 1; Y = 2; output;
a = 2; Y = 3; output;
a = 3; Y = 4; output;
a = 4; Y = 5; output;
a = 5; Y = 3; output;
a = 6; Y = 7; output;
a = 7; Y = 4; output;
a = 8; Y = 8; output;
a = 9; Y = 4; output;
run;
*---------- 何の設定もしない場合;
proc gplot data = hoge;
plot Y * A / vaxis = axis1 haxis = axis2 ;
symbol1 c = black V = dot I = join;
*---------- y軸目盛;
axis1
order = (1 to 5 by 1)
origin=(10, 30)
;
*---------- x軸目盛;
axis2
order=( 1 to 10 by 1 )
origin=(10, 30)
;
run;
範囲外のデータがいますよのログ
グラフ
追加する設定は、symbolステートメントに追加された mode = include のことです。
*---------- 軸の幅を値が超えていたらはみ出るように設定;
proc gplot data = hoge;
plot Y * A / vaxis = axis1 haxis = axis2 ;
symbol1 mode = include c = black V = dot I = join;
*---------- y軸目盛;
axis1
order = (1 to 5 by 1)
origin=(10, 30)
;
*---------- x軸目盛;
axis2
minor = none major = (w = 1.5)
order=( 1 to 10 by 1 )
origin=(10, 30)
;
run;
これではみ出たことがわかります。
はみ出るだけでなく、範囲外のデータを計算に含めることもできます。
ログに範囲外のデータがいますよってnoteを出してくれます。
出してくれますが、出力したグラフを見てもどこが範囲外のデータなのかはわかりません。
今回ははみ出たデータをグラフにそれとわかるように出力するお話です。
data hoge;
a = 1; Y = 2; output;
a = 2; Y = 3; output;
a = 3; Y = 4; output;
a = 4; Y = 5; output;
a = 5; Y = 3; output;
a = 6; Y = 7; output;
a = 7; Y = 4; output;
a = 8; Y = 8; output;
a = 9; Y = 4; output;
run;
*---------- 何の設定もしない場合;
proc gplot data = hoge;
plot Y * A / vaxis = axis1 haxis = axis2 ;
symbol1 c = black V = dot I = join;
*---------- y軸目盛;
axis1
order = (1 to 5 by 1)
origin=(10, 30)
;
*---------- x軸目盛;
axis2
order=( 1 to 10 by 1 )
origin=(10, 30)
;
run;
範囲外のデータがいますよのログ
グラフ
追加する設定は、symbolステートメントに追加された mode = include のことです。
*---------- 軸の幅を値が超えていたらはみ出るように設定;
proc gplot data = hoge;
plot Y * A / vaxis = axis1 haxis = axis2 ;
symbol1 mode = include c = black V = dot I = join;
*---------- y軸目盛;
axis1
order = (1 to 5 by 1)
origin=(10, 30)
;
*---------- x軸目盛;
axis2
minor = none major = (w = 1.5)
order=( 1 to 10 by 1 )
origin=(10, 30)
;
run;
これではみ出たことがわかります。
はみ出るだけでなく、範囲外のデータを計算に含めることもできます。
登録:
投稿 (Atom)