With the Halloween weekend upon us, here's a SAS ODS Graphics Polygon + Bubble + Text + Lineparm + Ellipseparm plot take on a DIY Halloween Card craft project from the it's me,JD blog (parabola math refresher here). Happy Halloween, all!
* Fun With SAS ODS Graphics: Para-boo!-la Halloween Card
SAS ODS Graphics take on craft project at itsmejd.com/easy-diy-halloween-cards-make-minimal-supplies/;
data paraBOOla; * Generate x-y point coordinates, text for charts;
retain id 1; * Polygons require ID #;
/*Polygon*/ do x=-3.3 to 3.3 by .1; y=x**2/-4*2.5+1.95; output; end; * Parabola formula used to draw top of 'ghost';
y=-6; output; x=-3.3; output; * Close off polygon with rectangular bottom of 'ghost';
/*Eyes */ x=.; x2=-0.75; y=-.25; size=.35; output; x2=.75; output; * Eyes of 'ghost';
/*Text1 */ x2=.; x3=0; y=-3.5; txt='boo! '; output; * Add some text to card;
/*Text2 */ x3=.; x4=2.9; y=-4.75; txt='HAPPY HALLOWEEN'; output;
/*Circles*/ x4=.; r=.6; do x5=-2.5 to 2.5 by 1; output; end; * Circles (r=radius) used to draw bottom of 'ghost';
ods graphics / reset width=6in height=8in antialias ;
proc sgplot data=paraBOOla nowall pad=0 noautolegend subpixel; * Let's make a Halloween card!;
styleattrs backcolor=cxFE9A0A; * 'Halloween orange';
polygon x=x y=y id=id / fillattrs=(color=white) fill lineattrs=(color=white); * Parabola 'ghost';
bubble x=x2 y=y size=size / fillattrs=(color=black) dataskin=matte bradiusmin=.5 bradiusmax=.5 absscale; * Eyes (bubbles w/radius=.5);
text x=x3 y=y text=txt / backlight=1 textattrs=(color=white weight=bold size=90pt) contributeoffsets=none; * Boo! with backlight effect;
text x=x4 y=y text=txt / textattrs=(color=black weight=bold size=21pt) position=left contributeoffsets=none; * Happy Halloween;
lineparm x=-3.1 y=-5 slope=0 / lineattrs=(color=black thickness=3pt) clip; * Line separator;
ellipseparm semimajor=r semiminor=r / xorigin=x5 yorigin=-6.2 clip fillattrs=(color=cxFE9A0A) fill; * Circles at bottom of 'ghost' (cheesy drape effect!);
xaxis display=none values=(-3 3) offsetmin=0 offsetmax=0 thresholdmin=0 thresholdmax=0; * Limit x range to 'crop' ghost at sides;
yaxis display=none values=(-6 2.2) offsetmax=0; * Limit y-range;
run;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.