Season’s Greetings from Phastar’s 2023 SAS Art Competition Winner!

3 minute read

Published: December 14th, 2023

Season’s Greetings from the Phastar team!

Each year Phastar holds an internal competition among its programmers to create a work of festive art, using only their imagination and SAS software!

If you’d like to see how it all works , find the SAS code below:

data xmas;
%annomac;
length style $200;
vpos = 100;
hpos = 105;

green = ‘cx2A8307 cx3C6629 cx5B993D cx185920 cx16A629 cx388C4C cx118044 cx2E734E cx5D8C64 cx3B593F cx2E332C cx0A260E cx6EA688 cx143322 cx118044’;
orn = ‘cxFF0000 cx13478C cx3230B2 cx6130B2 cx90B0D9 cx4DBFBC cx138C89 cxCC1B2B cxE599A7 cxA030B2 cx731F65 cxAEE554 cxE5B82E cxD9892B cxDC143C cxFFF5EE cx73002E CXAF95A6’;

%system(4,4,1);

*background;
*%bar(0,0,105,100,cx1B1B26 ,0,solid); * dark blue;
%bar(0,0,105,100,cx142233 ,0,solid); *deep greenish blue;
%bar(0,15, 105,50, cxBFBFBF, 0, solid); *light gray;
%bar(0,0, 105,15, cxFFFFFF, 0, solid); *white;

*moon;
%slice(12,90,0,365,5, cxDEDDED, ps, whole);

*mountain 1;
%poly(0,50, cx373740, solid, 1); *dary grayish blue;
%polycont(30,85);
%polycont(34,84);
%polycont(40,90);
%polycont(45,85);
%polycont(55,95);
%polycont(65,80);
%polycont(69,85);
%polycont(74,79);
%polycont(77,83);
%polycont(95,60);
%polycont(95,50);

  • mountain snow;
    %poly(25,80, cxFFFFFF, solid, 1);
    %polycont(30,85);
    %polycont(34,84);
    %polycont(40,90);
    %polycont(45,85);
    %polycont(55,95);
    %polycont(65,80);
    %polycont(69,85);
    %polycont(74,79);
    %polycont(77,83);
    %polycont(75,79);
    %polycont(75,75);
    %polycont(72,78);
    %polycont(63,74);
    %polycont(57,80);
    %polycont(51,75);
    %polycont(44,74);
    %polycont(35,77);
    %polycont(30,75);

*mountain 2;
%poly(0,50,cx8C8883, solid, 1); *light brownish gray;
%polycont(0,74);
%polycont(5,70);
%polycont(15,80);
%polycont(25,69);
%polycont(30,75);
%polycont(47,50);
*snow on mountain;
%poly(0,50,cxFFFFFF, solid, 1); *light brownish gray;
%polycont(0,74);
%polycont(5,70);
%polycont(15,80);
%polycont(25,69);
%polycont(30,75);
%polycont(25,65);
%polycont(23,64);
%polycont(20,65);
%polycont(14,69);
%polycont(10,64);
%polycont(7,68);
%polycont(3,65);
%polycont(0,67);

  • Mountain 3;
    %poly(73,50,cx535359, solid, 1); *dark blueish gray;
    %polycont(100,85);
    %polycont(105,80);
    %polycont(105,50);
    *mountain snow;
    %poly(92,75,cxFFFFFF, solid, 1);
    %polycont(96,73);
    %polycont(101,76);
    %polycont(105,72);
    %polycont(105,80);
    %polycont(100,85);

*trees behind Chalet;
do i = 0 to 103 by 2;
%poly(0+i,50, Cx172118, solid,1);
%polycont(1+i,57);
%polycont(2+i,50);
end;

do i = 0 to 100 by 3;
%poly(1+i,45, Cx3B593F , solid,1);
%polycont(3+i,55);
%polycont(5+i,45);
end;

%poly(0,47, Cx264C14, solid,1);
%polycont(3,55);
%polycont(6,47);

do i = 0 to 100 by 5;
%poly(0+i,45, Cx143322 , solid,1);
%polycont(2.5+i,55);
%polycont(5+i,45);
end;

%poly(9,50, Cx264C14, solid,1);
%polycont(10,56);
%polycont(11,50);

%poly(19,47, Cx264C14, solid,1);
%polycont(21,55);
%polycont(23,47);

%poly(53,48, Cx264C14, solid,1);
%polycont(54,57);
%polycont(53,48);

%poly(65,45, Cx264C14, solid,1);
%polycont(68,54);
%polycont(71,45);

%poly(80,40, Cx172118, solid,1);
%polycont(85,60);
%polycont(90,40);

%poly(99,47, Cx264C14, solid,1);
%polycont(100,55);
%polycont(101,47);

%poly(2,49, cx2A8307, solid,1);
%polycont(10,20);
%polycont(0,20);

%poly(80,55, cx0A260E , solid,1);
%polycont(84,25);
%polycont(76,25);

%poly(101,57,cx185920, solid,1);
%polycont(105,27);
%polycont(95,27);

%poly(97,49, cx3B593F , solid,1);
%polycont(103, 15);
%polycont(92,16);

%poly(77,52,cx16A629,solid,1);
%polycont(82,17);
%polycont(72,17);

%bar(89,17, 91,22, cx593B18 , 0, solid);
%poly(90,57, cx264C14 , solid,1);
%polycont(95,49);
%polycont(85,49);
%poly(90,51, cx264C14, solid,1);
%polycont(98,40);
%polycont(82,40);
%poly(90,45, cx264C14, solid,1);
%polycont(100,30);
%polycont(80,30);
%poly(90,35, cx264C14, solid,1);
%polycont(101,21);
%polycont(79,21);

%poly(16,52, cx47592A, solid,1);
%polycont(12,43);
%polycont(16,44);
%poly(16,46, cx47592A, solid,1);
%polycont(16,40);
%polycont(12,38);
%poly(16,42, cx47592A, solid,1);
%polycont(16,32);
%polycont(10,30);
%poly(16,54, cx47592A, solid,1);
%polycont(20,43);
%polycont(16,44);
%poly(16,46, cx47592A, solid,1);
%polycont(16,40);
%polycont(20,38);
%poly(16,42, cx47592A, solid,1);
%polycont(16,32);
%polycont(22,30);

%poly(61,50, cx1F261C, solid,1);
%polycont(61, 47);
%polycont(59, 46);
%poly(61,47, cx1F261C, solid,1);
%polycont(61, 43);
%polycont(57, 42);
%poly(61,45, cx1F261C, solid,1);
%polycont(61, 36);
%polycont(56,34);
%poly(61,50, cx1F261C, solid,1);
%polycont(61, 47);
%polycont(63, 46);
%poly(61,47, cx1F261C, solid,1);
%polycont(61, 43);
%polycont(65, 42);
%poly(61,45, cx1F261C, solid,1);
%polycont(61, 36);
%polycont(67,34);

%poly(12,47, cx143322, solid,1);
%polycont(9,30);
%polycont(15,30);

%poly(3,40, cx0A260E, solid,1);
%polycont(0, 15);
%polycont(6,15);

%poly(65, 59, cx5D8C64, solid,1);
%polycont(60,20);
%polycont(70,20);

%bar(99.5,11, 100.5,20, cx593B18 , 0, solid);
%poly(100,37, cx2A8307, solid,1);
%polycont(95,14);
%polycont(105,14);

*Chalet;
*chimney;
%bar(20,30,22.5,55, cx171719, 0, solid);
roof green; %poly(7.5,15, cx185920, solid,1);green;
%polycont(27.5,57);
%polycont(30,57);
%polycont(10,15);

*face red;
%poly(10,15, cxFF0000, solid,1);
%polycont(30,57);
%polycont(50,15);
%poly(10,15, cx4C2714, n,3);
%polycont(30,57);
%polycont(50,15);

*doors and windows;
%bar(25,15,35,30,cx185920, 0, solid);
%bar(25,15,35,30,cx118044, 0, empty);
%bar(25,15,30,30,cx118044, 0, empty);

%bar(19,15, 24, 30, cxE5B82E, 0, solid);
%bar(19,15, 24, 30, cx185920, 0, empty);
%bar(19,25, 24, 30, cx185920, 0, empty);

%bar(36,15, 41, 30, cxE5B82E, 0, solid);
%bar(36,15, 41, 30, cx185920, 0, empty);
%bar(36,25, 41, 30, cx185920, 0, empty);

%bar(25,31,35,45,cxE5B82E, 0, solid);
%bar(25,31,35,45,cx185920, 0, empty);
%bar(25,31,30,45,cx185920, 0, empty);

%poly(24,31, cxE5B82E, solid,1);
%polycont(24, 40);
%polycont(19, 31);

%poly(36,31, cxE5B82E, solid,1);
%polycont(36,40);
%polycont(41, 31);

%poly(24,31, cx185920, empty, 1);
%polycont(24, 40);
%polycont(19, 31);

%poly(36,31, cx185920, empty,1);
%polycont(36,40);
%polycont(41, 31);

*door knob;
%slice(29,22.5,0,365,.7, cxFF0000, ps, whole);
%slice(31,22.5,0,365,.7, cxFF0000, ps, whole);

*roof white;
%poly(27.5,57, cxDEDDED, solid,1);
%polycont(50,57);
%polycont(72.5, 15);
%polycont(50,15);

*trees in front of chalet;
%bar(70,13,72,22, cx803009, 0, solid);
%poly(61, 19, cx0A260E, solid,1);
%polycont(70,51);
%polycont(79,19);

%bar(7,13,9,22, cx8C411C, 0, solid);
%poly(3,21, cx47592A , solid,1);
%polycont(8,60);
%polycont(13,21);

*snow;
do i=1 to 900 by 1;
%slice(rand(“uniform”,1,104), rand(“uniform”,1,99), 0,360,rand(“uniform”, .001,.5), cxFFFFFF,ps, whole);
end;

%bar(3, 3, 102, 12, CXAF95A6,0, solid);
%bar(3, 3, 102, 12, cx73002E,0, empty);
%label(52.5, 7.5, “Season’s Greetings from Phastar”, cx73002E, 0, 0, 8.3, OLDENG, +); * stuggling with the font-update length style fixed it;

run;

proc gslide annotate = xmas;
run;
quit;

Related articles

Advancing Early-Phase Trials: Emerging Practices and Insights 

Advancing Early-Phase Trials: Emerging Practices and Insights 

January 27th, 2026 6 minute read

The landscape of early-phase clinical research continues to evolve rapidly. As new therapeutic modalities emerge...

Expert Opinion on FDA Recommendations on Bayesian Methods for Drug Development

Expert Opinion on FDA Recommendations on Bayesian Methods for Drug Development

January 27th, 2026 6 minute read

On the 12th January  2026 the FDA brought out recommended guidance on the use of Bayesian me...

Understanding Key Statistical Concepts in Early-Phase Clinical Trials 

Understanding Key Statistical Concepts in Early-Phase Clinical Trials 

January 20th, 2026 5 minute read

Statistics sit at the heart of every early-phase clinical trial. From dose escalation to determining the Ma...