Green molecular structure illustration

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

How to Choose a Clinical Data Management CRO That Delivers Quality and Compliance 

How to Choose a Clinical Data Management CRO That Delivers Quality and Compliance 

October 9th, 2026 6 minute read

Choosing a clinical data management CRO can feel challenging when many providers make similar claims about quality, c...

Women in Statistics at Phastar: Driving Innovation in Clinical Trials

Women in Statistics at Phastar: Driving Innovation in Clinical Trials

October 6th, 2026 11 minute read

From unlocking new insights to making clinical developments more relevant to people across the world, advanced statis...

Progression Free Survival in Oncology Trials: Regulatory Expectations and the Critical Role of Sensitivity Analyses 

Progression Free Survival in Oncology Trials: Regulatory Expectations and the Critical Role of Sensitivity Analyses 

October 1st, 2026 8 minute read

Progression-free survival (PFS) offers sponsors the opportunity to assess treatment benefit earlier than overall surv...