%let gpath='C:\';
%let dpi=200;
ods html close;
ods listing gpath=&gpath image_dpi=&dpi;
%include 'C:\BezierMacro.sas';
data Nodes;
Node='A'; xn=0; yn=5; output;
Node='B'; xn=6; yn=8; output;
Node='C'; xn=5; yn=6; output;
Node='D'; xn=8; yn=3; output;
run;
data Links;
Id=1; xl=0; yl=5; output;
Id=1; xl=2; yl=5; output;
Id=1; xl=4; yl=8; output;
Id=1; xl=6; yl=8; output;
Id=2; xl=0; yl=5; output;
Id=2; xl=2; yl=5; output;
Id=2; xl=3; yl=6; output;
Id=2; xl=5; yl=6; output;
Id=3; xl=0; yl=5; output;
Id=3; xl=2; yl=5; output;
Id=3; xl=6; yl=3; output;
Id=3; xl=8; yl=3; output;
run;
data diagram;
merge nodes links;
run;
ods html;
proc print data=diagram; run;
ods html close;
/*--Compute Bezier curves--*/
%let n=20;
%beziermacro (data=links, x=xl, y=yl, group=id, out=bezier, outx=xlb, outy=ylb, outg=idb, n=&n);
data diagram2;
merge nodes bezier;
run;
data diagram3;
merge diagram bezier;
if id > 1 then xl= .;
run;
ods html;
proc print; run;
ods html close;
data attrmap;
id='Line';
value='A'; linestyle='graphdata1'; output;
value='B'; linestyle='graphdata2'; output;
value='C'; linestyle='graphdata3'; output;
value='D'; linestyle='graphdata4'; output;
run;
ods graphics / reset attrpriority=color width=3in height=2in imagename="DiagramLine";
title "Diagram using original line segments";
proc sgplot data=diagram dattrmap=attrmap nowall noborder;
series x=xl y=yl / group=id lineattrs=(thickness=5) name='b';
scatter x=xn y=yn / group=node markerattrs=(symbol=squarefilled size=20) dataskin=gloss
filledoutlinedmarkers dataskin=gloss datalabel=node datalabelpos=center
datalabelattrs=(size=10 weight=bold);
keylegend 'b' / linelength=20;
xaxis display=none;
yaxis display=none;
run;
title "Diagram using Lines with SmoothConnect";
ods graphics / reset attrpriority=color width=3in height=2in imagename="DiagramSmooth";
proc sgplot data=diagram dattrmap=attrmap nowall noborder;
series x=xl y=yl / group=id lineattrs=(thickness=5) smoothconnect name='b';
scatter x=xn y=yn / group=node markerattrs=(symbol=squarefilled size=20) dataskin=gloss
filledoutlinedmarkers dataskin=gloss datalabel=node datalabelpos=center
datalabelattrs=(size=10 weight=bold);
keylegend 'b' / linelength=20;
xaxis display=none;
yaxis display=none;
run;
title "Diagram using Spline Segments";
footnote j=l "Spline Segments = &n";
ods graphics / reset attrpriority=color width=3in height=2in imagename="DiagramBezier";
proc sgplot data=diagram2 dattrmap=attrmap nowall noborder;
series x=xlb y=ylb / group=idb lineattrs=(thickness=5) name='b';
scatter x=xn y=yn / group=node markerattrs=(symbol=squarefilled size=20) dataskin=gloss
filledoutlinedmarkers dataskin=gloss datalabel=node datalabelpos=center
datalabelattrs=(size=10 weight=bold);
keylegend 'b' / linelength=20;
xaxis display=none;
yaxis display=none;
run;
title "Spline Control Points";
ods graphics / reset attrpriority=color width=3in height=2in imagename="BezierSpline";
proc sgplot data=diagram3(where=(idb=1)) dattrmap=attrmap nowall noborder noautolegend;
series x=xl y=yl / group=id markers lineattrs=(pattern=shortdash) legendlabel='Control Points' name='a';
series x=xlb y=ylb / group=idb lineattrs=(thickness=2) legendlabel='Spline' name='b';
xaxis display=none;
yaxis display=none min=4 max=9;
run;
title "Diagram using Spline Segments";
ods graphics / reset attrpriority=color width=2.7in height=1.8in imagename="DiagramIcon";
proc sgplot data=diagram2 dattrmap=attrmap nowall noborder;
series x=xlb y=ylb / group=idb lineattrs=(thickness=5) name='b';
scatter x=xn y=yn / group=node markerattrs=(symbol=squarefilled size=20) dataskin=gloss
filledoutlinedmarkers dataskin=gloss datalabel=node datalabelpos=center
datalabelattrs=(size=10 weight=bold);
keylegend 'b' / linelength=20;
xaxis display=none;
yaxis display=none;
run;
title;
footnote;
title;
footnote;