The GANTT Procedure

Example 8.20 Nonstandard Precedence Relationships

This example demonstrates the use of nonstandard precedence relationships and specification of the PRECDATA= option in the PROC GANTT statement.

The project and nonstandard precedence relationships are defined by the WIDGLAG2 data set, which is a modification of the WIDGLAG data set that was used in Example 4.11 to illustrate the CPM procedure. The activity and successor variables are represented by the TASK and SUCC variables, respectively, and the lag type of the relationship is defined by the LAGDUR variable. The LAGDUR variable defines the lag type in keyword_duration_calendar format for the purpose of passing the information to PROC CPM. Although PROC GANTT accepts this format for a lag variable, it does not use the duration and calendar values when drawing the connection since the schedule is already computed at this time (presumably by PROC CPM).

As in the WIDGLAG data set, the WIDGLAG2 data set specifies a Start-to-Start lag of nine days between the activity 'Prototype' and its successors, 'Materials' and 'Facility,' and a Finish-to-Start lag of two days between 'Facility' and 'Init. Prod.'. In addition, changes to the widget design are permitted to be made no earlier than six days after in-house evaluation of the product has begun. Furthermore, the Engineering department has to ensure that there will be at least three days available for any changes that need to be carried out after the test market results have come in. These constraints are incorporated in the WIDGLAG data set by setting the value of the LAGDUR variable equal to 'ss_6' for the relationship between 'Evaluate' and 'Changes' and equal to 'ff_3' for the relationship between 'Test Market' and 'Changes.'

The project is scheduled using PROC CPM subject to weekends and the holidays defined in the HOLIDAYS data set. Specifying the COLLAPSE option in the PROC CPM statement ensures that there is one observation per activity. The WIDGLAGH data set is created by deleting the successor variable from the Schedule data set produced by PROC CPM.

Since there is no precedence information contained in the WIDGLAGH data set, specifying DATA=WIDGLAGH in the PROC GANTT statement without the PRECDATA= option produces a nonprecedence Gantt chart. You can produce a Logic Gantt chart by specifying the precedence information using the PRECDATA= option in the PROC GANTT statement as long as the activity variable is common to both the schedule and Precedence data sets.

The Gantt chart shown in Output 8.20.1 is produced by specifying PRECDATA= WIDGLAG2. The lag type of the precedence connections is indicated to PROC GANTT using the LAG= option in the CHART statement. The width of the precedence connections is set to 2 with the WPREC= option, and the color of the connections is set to blue using the CPREC= option. The MININTGV= and MINOFFLV= options are specified in the CHART statement in an attempt to minimize the number of 5-segment connections. A reference line with a line style of 2 is drawn at the beginning of every month by using the REF= and LREF= options in the CHART statement.

options ps=60 ls=100;

title h=2 'Gantt Example 20';
 /* Activity-on-Node representation of the project with lags */
data widglag2;
   format task $12. succ $12. lagdur $4. ;
   input task & days succ & lagdur $ ;
   datalines;
Approve Plan   5  Drawings      .
Approve Plan   5  Study Market  .
Approve Plan   5  Write Specs   .
Drawings      10  Prototype     .
Study Market   5  Mkt. Strat.   .
Write Specs    5  Prototype     .
Prototype     15  Materials     ss_9
Prototype     15  Facility      ss_9
Mkt. Strat.   10  Test Market   .
Mkt. Strat.   10  Marketing     .
Materials     10  Init. Prod.   .
Facility      10  Init. Prod.   fs_2
Init. Prod.   10  Test Market   .
Init. Prod.   10  Marketing     .
Init. Prod.   10  Evaluate      .
Evaluate      10  Changes       ss_6
Test Market   15  Changes       ff_3
Changes        5  Production    .
Production     0  .             .
Marketing      0  .             .
;

data holidays;
   format holiday holifin date7.;
   input holiday & date7. holifin & date7. holidur;
   datalines;
24dec03  26dec03  4
01jan04  .        .
;
proc cpm data=widglag2 holidata=holidays date='1dec03'd
         interval=weekday collapse;
   activity task;
   succ     succ / lag = (lagdur);
   duration days;
   holiday  holiday / holifin=(holifin);
   run;
data widglagh;
   set _last_;
   drop succ;
   run;
* set up required pattern statements;
pattern1 c=blue  v=s;  /* duration of a noncrit. activity  */
pattern2 c=blue  v=e;  /* slack time for a noncrit. act.   */
pattern3 c=red   v=s;  /* duration of a critical activity  */
pattern4 c=red   v=e;  /* slack time for a supercrit. act. */
pattern5 c=red   v=r2; /* duration of a supercrit. act.    */
pattern6 c=cyan  v=s;  /* actual duration of an activity   */
pattern7 c=black v=x1; /* break due to a holiday           */

* set graphics options;
goptions vpos=50 hpos=100 htext=1.025;

title2 c=black h=1.5
   'Nonstandard Precedence Relationships and the PRECDATA= Option';

proc gantt graphics data=widglagh precdata=widglag2
                    holidata=holidays;
   chart / compress dur=days height=1.5
           holiday=(holiday) holifin=(holifin)
           cmile=blue cprec=blue wprec=2
           ref='01dec03'd to '01mar04'd by month
           cref=black lref=2 reflabel caxis=black
           act=task succ=(succ) lag=(lagdur)
           minintgv=2 minofflv=.5;
   id task;
   run;

Output 8.20.1: Nonstandard Precedence Relationships