SAS

GTLで参照線・ガイド線を引く(1)REFERENCELINEステートメント

グラフを作図するときに特定の範囲を強調したいときに参照線を引くことがあります。
GTLでは参照線を引くステートメントがいくつか用意されており、参照線を引くためにデータセットを用意することは必須ではありません。

REFERENCELINEステートメント

REFERENCELINEステートメントはX軸またはY軸に対して平行な直線を表示します。当然ですが2次元グラフでのみ有効です。

線を引く位置はXまたはY座標を直接指定することもできますし、データセットの変数を指定することもできます。変数を指定した場合、格納された非欠損値を用いて複数の参照線を引くことができます。

referenceline x=x座標または変数 / < option >;
referenceline y=y座標または変数 / < option >;

作図例

新型コロナウィルス陽性患者の報告数の推移をプロットして参照線を引いてみます。

座標を直接指定する場合

まずは5月1日に参照線を引いてみます。

proc template; 
define statgraph pat;
begingraph / 
   axisbreaksymbol=squiggle
   axisbreaktype=full;
entrytitle "東京都_新型コロナウイルス陽性患者"; 
   layout overlay;
      seriesplot x=date y=count;
      referenceline x="01MAY2020"d /
        lineattrs=(thickness=2 color=blue)
        curvelabel="5月1日";
   endlayout;
endgraph;
end;
run;

proc sgrender data=ds2 template=pat;
run;
実行結果

5月1日に対応する日付値は”01MAY2020″dと入力していますが、SAS関数で日付値を生成する場合はeval関数を使用します。上のコードはこのように書くこともできます。

referenceline x=eval(mdy(5,1,2020));

変数を指定する場合

次は参照線を表示する位置をデータセットの変数で指定します。
まず参照線を位置を格納した以下のデータセットを作成します。refxはx軸の参照線の位置、refyはy軸の参照線の位置です。

refxrefy
2020-04-0150
2020-05-01100

このデータセットを陽性患者の集計データセットにマージ(横結合)します。キーは設定しません。

/*参照線用*/ 
data ref;
format refx yymmdd10.; 
refx=mdy(4,1,2020); 
refy=50; 
output; 

refx=mdy(5,1,2020); 
refy=100; 
output; 
run;

 /*時系列データにマージ*/ 

data ds3;
   merge ds2 ref;
run;

proc template;
define statgraph pat; 
begingraph / 
   axisbreaksymbol=squiggle
   axisbreaktype=full;
entrytitle "東京都_新型コロナウイルス陽性患者"; 

   layout overlay;
      seriesplot x=date y=count;
      referenceline x=refx / 
         lineattrs=(thickness=2 color=blue)
         curvelabel=refx;
      referenceline y=refy / 
         lineattrs=(thickness=2 color=red pattern=shortdash) 
         curvelabel=refy;
   endlayout;
endgraph; 
end; 
run; 

proc sgrender data=ds3 template=pat; 
run;
実行結果

ラベルとして表示する値も変数を指定することができます。テンプレートに参照線の座標を直接指定するよりも変数にしてデータセットで座標を指定したほうが汎用性は高いでしょう。