The ordering is based on the formatted levels (i.e. alphabetic is what's shown as 1=AP, 2=APCP, 3=CP, 4=Controls).
You can either adjust your format as:
proc format;
value grpLabel 1='01Controls' 2='02AP' 3='03CP' 4='04APCP';
run;
But I guarantee you don't want this because of the appearance on the graph.
Instead, change your %new_surv call as the following:
%newsurv(DATA=three, TIME=dur, CENS=PDAC, CEN_VL=0, SUMMARY=0, CLASS=Group,
CLASSREF=Controls, CLASSORDER=4 1 3 2, COLOR=black red green blue,
PATTERN=solid, LINESIZE=3pt, SYMBOLSIZE=10pt, METHOD=CIF, EV_VL=1);
Note the 4 1 3 2 matches the label order that you want (as above 4=Controls, 1=AP, 3=CP 2=APCP).
Hope this helps
... View more