お世話になっております.
proc sgplotで,月ごとの棒グラフ&折れ線グラフ(X軸:時期,Y軸:度数)を作成しているのですが,
X軸の表示方法についてご教示いただけないでしょうか.
現在,X軸のデータは,2017-01-01,2017-02-01,・・・に対応する
シリアル値をyymmd.で表示させているので2017-01,2017-02・・・の表示になっています.
このときに,"2017-"は,重複する情報なので,各年の最初の値のみ2017-01と表示させ,それ以降は,02,03,・・・と表示させたいのですが,
何か方法はございませんでしょうか(2017-01,・・・,2017-12,2018-01,02,・・・).
フォーマットを作成してみたのですが,フォーマットを適用すると
複数の年があるためか,2017年の2月と2018年の2月のデータがグラフ上重なってしまいます.
何か解決方法がございましたらご教示いただきたく存じます.
よろしくお願い申し上げます.
フォーマットを使用してしまうと、複数の情報が1つに集約されてしまいますので、
Annotateを使用する方法しか思い付きませんでした。
data stocks;
set sashelp.stocks (where=(date >= "01jan2004"d
and date <= "01dec2005"d
and stock = "IBM"));
run;
data annotate;
set stocks;
label=put(date,yymmd.);
if scan(label,2,"-")^="01" then label=scan(label,2,"-");
function="text"; textsize=8;
x1space="datavalue";
y1space="graphpercent";
x1=date; y1=22; anchor="left";
width=100; rotate=-60;
output;
function="line"; linethickness=0.1;
x2space="datavalue";
y2space="graphpercent";
x2=date;
y1=23.5; y2=22.5;
output;
run;
proc sgplot data=stocks sganno=annotate;
title "Stock Volume vs. Close";
vbar date / response=volume;
vline date / response=close y2axis;
xaxis display=(novalues noticks);
yaxis offsetmin=0.15;
y2axis offsetmin=0.15;
run;
title;
sasone様
ありがとうございます.
ご教示頂いた方法で出来ました.
もう一点,annotationについてお伺いしたいのですが,
複数の異なるテキストをannotationで追加することは可能でしょうか.
年月の他に,タイトルのようなものを図中に挿入したいので・・・
annotationに使うデータを複数行にすれば,function="text"は何回も使用可能ですよね・・・?
1つのデータセットの中でfunction="text"を何度も使用することは可能ですが、
プログラムがややこしくなってしまいますので、別々のデータセットで作っておいて
後からつなぎ合わせた方が楽かも知れません。
data stocks;
set sashelp.stocks (where=(date >= "01jan2004"d
and date <= "01dec2005"d
and stock = "IBM"));
run;
data anno1;
set stocks;
label=put(date,yymmd.);
if scan(label,2,"-")^="01" then label=scan(label,2,"-");
function="text"; textsize=8;
x1space="datavalue";
y1space="graphpercent";
x1=date; y1=22; anchor="left";
width=100; rotate=-60;
output;
function="line"; linethickness=0.1;
x2space="datavalue";
y2space="graphpercent";
x2=date;
y1=24.5; y2=23;
output;
run;
data anno2;*タイトルのようなもの;
function="text";
textsize=9; textweight="bold";
drawspace="graphpercent";
x1=35; y1=15; label="2004年";
output;
x1=70; label="2005年";
output;
run;
data annotate; set anno1 anno2; run;
proc sgplot data=stocks sganno=annotate;
vbar date / response=volume;
vline date / response=close y2axis;
xaxis display=(novalues noticks);
yaxis offsetmin=0.15;
y2axis offsetmin=0.15;
run;
sasone様
できました.
継ぎ足していけば良いので,わかりやすいです.
ありがとうございます.
以下、ちょっとご要望通りではないかもですが。。
proc sgplot data=sashelp.stocks (where=(date >= "01jan2004"d and date <= "01dec2005"d and stock="IBM"));;
vbar date / response=volume;
vline date / response=close y2axis;
xaxis type=time interval=month;
format date monyy7.;
run;
月が英語で表示されちゃいます、、
あと上の例だとグラフの幅が小さいために、目盛が一部表示されない(間引かれる)です。
なので、x軸の文字のサイズを小さくするとか、
xaxis type=time interval=month valueattrs=(size=6pt);
最初にグラフ自体のサイズを大きくしちゃうとか、
ods graphics / width=1000;
で目盛が間引かれるのを防げるかと思います。
amatsu様
ご教示ありがとうございました.
英語表記ですが,シンプルで十分な方法です.
ありがとうございました.
ただ,SAS 9.3では,
"BARCHARTPARMステートメントは軸タイプに矛盾があります.プロットは作成されません."
のWARANINGが出てしまいました.
SAS Studioでは上手くいったので,SASのバージョンによるのかもしれません.
ありがとうございました.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!