Resources

Resource Driven Durations and Res.Calendars (cpm24)

 /****************************************************************/
 /*          S A S   S A M P L E   L I B R A R Y                 */
 /*                                                              */
 /*    NAME: CPM24                                               */
 /*   TITLE: Resource Driven Durations and Res.Calendars (cpm24) */
 /* PRODUCT: OR                                                  */
 /*  SYSTEM: ALL                                                 */
 /*    KEYS: CPM                                                 */
 /*   PROCS: CPM                                                 */
 /*    DATA:                                                     */
 /*                                                              */
 /* SUPPORT:                             UPDATE:                 */
 /*     REF: Example 24 from the CPM Chapter (PM User's Guide)   */
 /*    MISC: Resource Driven Durations and Resource Calendars    */
 /*                                                              */
 /****************************************************************/

data software;
     input Activity & $15. dur mandays act s1 s2 Programmer Tester;
datalines;
Plans & Reqts    2   .   1   2  3  1   1
Product Design   .   3   2   4  5  1   .
Product Design   .   1   2   .  .  .   1
Test Plan        3   .   3   6  7  .   1
Documentation    .   2   4   9  .  .2  .
Documentation    .   1   4   .  .  .   .5
Code             10  .   5   8  .  .8  .
Test Data        5   .   6   8  .  .   .5
Test Routines    5   .   7   8  .  .   .5
Test Product     6   .   8   9  .  .5  1
Finish           0   .   9   .  .  .   .
;


title 'Software Development';
title2 'Activity Data Set SOFTWARE';
proc print;
   id Activity;
   var act s1 s2 dur mandays Programmer Tester;
run;

goptions hpos=70 vpos=30;

pattern1 v=e c=green;
title h=2 'Software Development';
title2 h=1.5 'Project Network';
proc netdraw graphics data=software;
     actnet / act=act succ=(s1 s2) compress height=6
              ybetween=15
              id=(Activity) nodefid nolabel spantree;
     run;


proc cpm data=software out=sftout ressched=rsftout
         date='12apr04'd interval=weekday resout=rout;
   act act;
   succ s1 s2;
   dur dur;
   res Programmer Tester / work=mandays
                        rschedid=Activity;
   id Activity;
run;


title 'Software Development';
title2 'Resource Schedule Data Set RSFTOUT';
proc print data=rsftout heading=v;
   id Activity;
run;


data gant;
   set rsftout;
   if resource ^= ' ' then Activity=' ';
   run;



pattern1 c=green v=s;     /* duration of a non-critical activity   */
pattern2 c=green v=e;     /* slack time for a noncrit. activity    */
pattern3 c=red   v=s;     /* duration of a critical activity       */
pattern4 c=magenta v=e;   /* slack time for a supercrit. activity  */
pattern5 c=magenta v=s;   /* duration of a supercrit. activity     */
pattern6 c=cyan v=s;      /* actual duration of an activity        */
pattern7 c=black v=e;     /* break due to a holiday                */
pattern8 c=blue v=s;      /* resource schedule of activity         */
pattern9 c=brown v=s;     /* baseline schedule of activity         */

title h=2 'Software Development';
title2 h=1.5 'Project Schedule';



proc gantt graphics data=gant;
   id Activity resource;
   chart / compress scale=3 increment=4 interval=weekday
           height=2.8 nojobnum between=5
           hmile=2
           cprec=cyan cmile=magenta
           caxis=black;
run;


title 'Software Development';
title2 'Resource Usage Data Set ROUT';
proc print data=rout;
run;

data resin;
   input per date7. otype $ Programmer Tester;
   format per date7.;
   datalines;
12apr04  reslevel 1  1
;



title 'Software Development';
title2 'Resource Availability Data Set';
proc print;
   run;

proc cpm data=software resin=resin
         out=sftout1 resout=rout1
         rsched=rsftout1
         date='12apr04'd interval=weekday;
   act act;
   succ s1 s2;
   dur dur;
   res Programmer Tester / work=mandays addcal
                        obstype=otype
                        period=per
                        rschedid=Activity;
   id Activity;
run;

title 'Software Development';
title2 'Resource Constrained Schedule: Common Resource Calendar';
proc print data=rsftout1 heading=h;
   id Activity;
run;

data gant1;
   set rsftout1;
   if resource ^= ' ' then Activity=' ';
   run;



title h=1.5 'Software Development';
title2 h=1 'Resource Constrained Schedule: Common Resource Calendar';
proc gantt graphics data=gant1 (drop=e_: l_: );
   id Activity resource;
   chart / compress scale=3 increment=4 interval=weekday
           height=2.8 nojobnum nolegend between=5
           hmile=2
           cprec=cyan cmile=magenta
           caxis=black
           ;
run;

data calendar;
   _cal_=1; _fri_="holiday";
   run;


data resin2;
   input per date7. otype $ Programmer Tester;
   format per date7.;
   datalines;
.        calendar 0  1
12apr04  reslevel 1  1
;



title 'Software Development';
title2 'Calendar Data Set CALENDAR';
proc print data=calendar;
   run;
title 'Resource Data Set RESIN2';
proc print data=resin2;
   run;

 proc cpm data=software resin=resin2
         caledata=calendar
         out=sftout2 rsched=rsftout2
         resout=rout2
         date='12apr04'd interval=weekday;
   act act;
   succ s1 s2;
   dur dur;
   res Programmer Tester / work=mandays addcal
                           obstype=otype
                           period=per
                           rschedid=Activity;
   id Activity;
 run;

data gant2;
   set rsftout2;
   if resource ^= ' ' then Activity=' ';
   run;


title h=1.5 'Software Development';
title2 h=1 'Resource Constrained Schedule: Multiple Resource Calendars';
proc gantt graphics data=gant2 (drop=e_: l_: )
     caledata=calendar;
   id Activity resource;
   chart / compress scale=3 increment=4 interval=weekday
           height=2.8 nojobnum nolegend between=5
           hmile=2
           cprec=cyan cmile=magenta
           caxis=black
           ;
run;

title 'Software Development';
title2 'Resource Constrained Schedule: Multiple Resource Calendars';
proc print data=rsftout2 heading=h;
   id Activity;
run;