Thank you!
I updated my polar rose code to add animation:
ods graphics / imagefmt=GIF width=4in height=5in; /* each image is 4in x 5in GIF */
options papersize=('4 in', '5 in') /* set size for images */
nodate nonumber /* do not show date, time, or frame number */
animduration=0.5 animloop=yes noanimoverlay /* animation details */
printerpath=gif animation=start; /* start recording images to GIF */
ods printer file="&outpath\Anim.gif"; /* images saved into animated GIF */
%macro makedata;
data Roses;
/* the array below has a list of multipliers that make
pretty roses, it is temporary, so will not be saved
with the data*/
array klist{11} _temporary_ (4, 5, 6, 1.5, 2.5, 1.333333, 2.33333, .75, 1.25, 1.2, .8333333);
do flower=1 to 12;
n = ceil( 11*rand("Uniform") );
/*pick a random number
between 1 and 11*/
k=klist{n}; /*assign k to be the nth multiplier*/
/* draw the rose r=cos(k * theta) */
do theta = 0 to 12*constant("pi") by 0.1;
r = cos(k * theta); /* generalized rose */
x = r*cos(theta); /* convert to Euclidean coords */
y = r*sin(theta);
/*move the rose to the right spot*/
if flower <= 5 then
do;
cx=2*flower+1;
cy=9;
end;
else if 6<= flower<=9 then
do;
cx=(2*flower-8);
cy=10.5;
end;
else if 10<= flower<=12 then
do;
cx=(2*flower-15);
cy=12;
end;
x=x+cx;
y=y+cy;
group=flower;
do i=0 to flower; output; end;
/*make the stem*/
group=flower+.5;
x=cx;
y=cy;
do i=0 to flower; output; end;
x=7;
y=3;
do i= 0 to flower; output; end;
end;
end;
/*bow*/
do theta = constant("pi")*7.5/12 to constant("pi")*28.5/12 by 0.01;
r = cos(2 *(theta)); /* rose */
x = r*cos(theta); /* convert to Euclidean coords */
y = r*sin(theta);
group=100;
i=0;
if y<abs(x) then
do;
x=x+7;
y=y+3;
output;
end;
end;
run;
%mend;
%makedata;
data roses2 ;
set roses;
i=13-i;
run;
proc sort data=roses2;
by i group;
run;
options nobyline;
proc sgplot data=Roses2 aspect=1 noautolegend
noborder nowall noopaque;;
by i;
styleattrs datacontrastcolors=
(
red green
bippk green red green purple green bippk green
blue green purple green bippk green red green purple green
blue green red green
crimson
) datalinepatterns=(1);
series x=x y=y /group=group;
xaxis min=1 max=13 display=none;
yaxis min=2 max=13 display=none;
title1 "Happy Valentine's Day";
title2 "A Dozen Random Polar Roses for &for";
footnote1 "From, &from";
/* footnote2 " Polar Roses: r = cos(k*theta)";
footnote3 " Generated with the SAS System 9.4";
footnote4 "see: http://blogs.sas.com/content/iml/2015/12/16/polar-rose.html";
*/
run;
/* restore screen output */
options printerpath=gif animation=stop; /* stop recording images */
ods printer close;
title;
footnote;
If you want one to send to someone and do not want to run the code yourself feel free to copy the one below
Featured in the SAS Software Instagram today!
https://www.instagram.com/p/Bt3caapHbmC/
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.