BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
nobokun3
Obsidian | Level 7

また、こちらでお世話になりたく、標記の件につきまして、ご存じでしたらご助言お願いします。
添付した画像のような合計と内訳を表示する二重円グラフを作りたいと思っています。

 

いろいろ試行錯誤しましたが、実現できず。データの持ち方と円グラフタスクの設定をご存じでしたらコメントいただけますと幸いです。

 

なお、現在は円グラフを2つ重ねてどうにか表現しておりますが、微妙にずれているため見た目が美しくない状態です。

 

image.png

1 ACCEPTED SOLUTION

Accepted Solutions
nobokun3
Obsidian | Level 7

sas7016 様

 

コードで実現できそうとのこと、ご連絡いただきありがとうございます。
週次で変化していくデータのため、VAでもそのように表示したく、更新データもコード化していく必要があります。

現在、SASプログラムはあまり知識がないため、データの持ち方とカスタムグラフなどでどうにかできないかと考えていたところです。

もう少し方法を探してみようと思います。

 

引き続きよろしくお願い申し上げます。

 

View solution in original post

4 REPLIES 4
sas7016
SAS Employee

コードであれば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

nobokun3
Obsidian | Level 7

sas7016 様

 

コードで実現できそうとのこと、ご連絡いただきありがとうございます。
週次で変化していくデータのため、VAでもそのように表示したく、更新データもコード化していく必要があります。

現在、SASプログラムはあまり知識がないため、データの持ち方とカスタムグラフなどでどうにかできないかと考えていたところです。

もう少し方法を探してみようと思います。

 

引き続きよろしくお願い申し上げます。

 

nobokun3
Obsidian | Level 7

sas7016様

 

テクニカルサポートにも問い合わせましたが、VAでの表示は不可能ということでご案内いただきました。

ただ、その後VAで内訳を表示することが目的なので、元データを円グラフの内側と外側に区分を追加し、カスタムソートを使うなどして、対応できましたので自己解決としたいと思います。

ご助言ありがとうございました。

Ksharp
Super User

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;


Ksharp_0-1718005331573.png

 

SAS Innovate 2025: Register Now

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!

Discussion stats
  • 4 replies
  • 1107 views
  • 2 likes
  • 3 in conversation