%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;