また、こちらでお世話になりたく、標記の件につきまして、ご存じでしたらご助言お願いします。
添付した画像のような合計と内訳を表示する二重円グラフを作りたいと思っています。
いろいろ試行錯誤しましたが、実現できず。データの持ち方と円グラフタスクの設定をご存じでしたらコメントいただけますと幸いです。
なお、現在は円グラフを2つ重ねてどうにか表現しておりますが、微妙にずれているため見た目が美しくない状態です。
sas7016 様
コードで実現できそうとのこと、ご連絡いただきありがとうございます。
週次で変化していくデータのため、VAでもそのように表示したく、更新データもコード化していく必要があります。
現在、SASプログラムはあまり知識がないため、データの持ち方とカスタムグラフなどでどうにかできないかと考えていたところです。
もう少し方法を探してみようと思います。
引き続きよろしくお願い申し上げます。
コードであればPROC GCHARTのdetailオプションを使って下記のように書けるようです。
data test; length Area $16 Pref $16 Value 8; input Area $ Pref $ Value; datalines; 関東 神奈川 29 関東 東京 43 関東 千葉 31 関西 京都 13 関西 大阪 45 ; run; proc gchart data=test; pie Area / detail=Pref sumvar=Value detail_value=best; run;
「タスク」の場合は、Enterprise GuideでもSAS Studioでもうまくできる方法は見つけられなかったです。
参考:
PROC GCHART のマニュアル: https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/graphref/p13h0w5vhbfvern1a23b0f3lvfyh.htm
2重円グラフの例: https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/graphref/p0rykxji060wvzn1x2crrwuhvfzy.htm
sas7016 様
コードで実現できそうとのこと、ご連絡いただきありがとうございます。
週次で変化していくデータのため、VAでもそのように表示したく、更新データもコード化していく必要があります。
現在、SASプログラムはあまり知識がないため、データの持ち方とカスタムグラフなどでどうにかできないかと考えていたところです。
もう少し方法を探してみようと思います。
引き続きよろしくお願い申し上げます。
sas7016様
テクニカルサポートにも問い合わせましたが、VAでの表示は不可能ということでご案内いただきました。
ただ、その後VAで内訳を表示することが目的なので、元データを円グラフの内側と外側に区分を追加し、カスタムソートを使うなどして、対応できましたので自己解決としたいと思います。
ご助言ありがとうございました。
data freq1;
input Area $ percent;
length datalabel $ 80;
datalabel=catx(' ',Area,cats(percent,'%'));
datalines;
関東 64
関西 36
;
run;
data freq2;
input Area $ Pref $ percent;
length datalabel $ 80;
datalabel=catx(' ',Pref,cats(percent,'%'));
datalines;
関東 神奈川 18
関東 東京 27
関東 千葉 19
関西 京都 8
関西 大阪 28
;
run;
%macro circular_plot(dataset_in=,id=);
data temp;
set &dataset_in.;
id+1;id=1000*&id.+id;
pi=PERCENT*0.01*2*constant('pi');
cum_pi+pi;
lag_cum_pi=lag(cum_pi);
if _n_=1 then lag_cum_pi=0;
run;
data plot;
set temp;
/*for a Polygon*/
do _pi=lag_cum_pi to cum_pi by 0.001;
x=&id.*cos(_pi);y=&id.*sin(_pi);output;
end;
x=&id.*cos(_pi);y=&id.*sin(_pi);output;
do _pi=cum_pi to lag_cum_pi by -0.001;
x=%eval(&id.+1)*cos(_pi);y=%eval(&id.+1)*sin(_pi);output;
end;
x=%eval(&id.+1)*cos(_pi);y=%eval(&id.+1)*sin(_pi);output;
keep x y id ;
run;
%CENTROID (plot, sgplot, id)
data want;
merge plot sgplot(rename=(x=centroid_x y=centroid_y)) temp(keep=id datalabel) ;
by id;
output;
call missing(of _all_);
run;
proc append base=final_want data=want force;run;
%mend;
proc delete data=final_want;run;
%circular_plot(dataset_in=freq1,id=2)
%circular_plot(dataset_in=freq2,id=1)
ods graphics/ANTIALIASMAX=1000000 ;
proc sgplot data=final_want aspect=1 noautolegend noborder subpixel;
polygon x=x y=y id=id/fill outline lineattrs=(color=white thickness=2) group=id;
scatter x=centroid_x y=centroid_y/datalabel=datalabel markerattrs=(size=0)
datalabelattrs=(size=10) labelstrip splitchar=' ' splitjustify=center datalabelpos=center ;
xaxis offsetmin=0 offsetmax=0 display=none;
yaxis offsetmin=0 offsetmax=0 display=none;
run;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!