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;
... View more