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

Rethinking Performance: How to Measure Success in Flexible Biometrics FSP Solutions 

Rethinking Performance: How to Measure Success in Flexible Biometrics FSP Solutions 

August 10th, 2026 4 minute read

As the functional service provider biometrics model evolves, so too must the way sponsors measure its success. Tradit...

Meet the Team: Debreena Chatterjee, Strategic Engagement Director 

Meet the Team: Debreena Chatterjee, Strategic Engagement Director 

August 6th, 2026 6 minute read

In our “Meet the Team” series, we highlight the talented individuals who drive Phastar’s success. Each te...

When Do Flexible Biometrics FSP Solutions Work Best in Clinical Development? 

When Do Flexible Biometrics FSP Solutions Work Best in Clinical Development? 

July 27th, 2026 3 minute read

As clinical trials become more complex, global, and data-intensive, biopharma organizations are under pressure to del...