The GANTT Procedure

Graphics Examples

The following examples illustrate the use of graphics options and the use of PATTERN and SYMBOL statements to produce high resolution graphics quality Gantt charts. In Example 8.3, an extra input data set containing the holiday information is used to mark the holidays used in computing the schedule by PROC CPM. Example 8.4 illustrates the use of the CHART statement to specify milestones and additional variables to be plotted on the chart. Example 8.5 illustrates the use of the COMPRESS option to fit an entire Gantt chart on one page. Example 8.6 illustrates the use of the MININTERVAL= and SCALE= options to control the width of the chart; this example also shows how the chart is divided and continued on the succeeding page when the time axis extends beyond one page. In Example 8.7, the MINDATE= and MAXDATE= options are used to permit viewing of only a portion of the schedule in greater detail. Example 8.8 uses the HOLIDUR= option in conjunction with the INTERVAL= option to mark holidays of varying lengths on the Gantt chart. Example 8.9 illustrates the use of the CALENDAR and WORKDAY data sets to mark holiday information from different calendars on the chart.

In Example 8.10, the actual schedule for each activity is plotted on a separate line in addition to the early and late schedules. Example 8.11 illustrates tracking a project and comparing its progress against a baseline schedule. In Example 8.12, the COMBINE option is used to concatenate the early, late, and actual schedules of a project in progress to produce a single concise schedule that retains all of the vital information of the former schedules. Example 8.13 shows the resource-constrained schedule containing split segments of activities. The ability to bypass the project scheduler, PROC CPM, and directly specify the schedule information to PROC GANTT is demonstrated in Example 8.14. Example 8.15 illustrates the use of the BY statement to obtain Gantt charts for different projects in a multiproject environment. In Example 8.16, the GANTT procedure is used after some data manipulation steps to produce Gantt charts for individuals, each working on different subsets of activities in the project.

In Example 8.17, the HEIGHT= and HTOFF= options are used to modify the text height in relation to the height of the activity bars. The next three examples show you how to invoke the different logic options in order to draw a Logic Gantt chart that displays the precedence relationships between activities. Example 8.18 illustrates use of the ACTIVITY= and SUCCESSOR= options to specify the precedence information in AON format and the LEVEL= option to specify the bar type for the connections. In Example 8.19, the routing control options MAXDISLV=, MAXOFFGV=, MAXOFFLV=, and MININTGV= are used in connection with a project that is specified in AOA format using the TAIL= and HEAD= options in the CHART statement. Example 8.20 demonstrates the specification of nonstandard lag types using the LAG= option in the CHART statement. This example also illustrates use of the PRECDATA= option in the PROC GANTT statement. In Example 8.21, the ANNOTATE= option is used to add graphics and text on a Gantt chart. Example 8.22 illustrates the Automatic Text Annotation facility to label the Gantt chart independently of the SAS/GRAPH Annotate facility. In Example 8.23 a PATTERN variable and a Label data set are used to generate Gantt charts for multiprojects. A very useful chart in project management and multiprocess environments is the multisegment Gantt chart. Example 8.24 illustrates the use of the SEGMT_NO variable and the PATTERN variable to produce a versatile multisegment Gantt chart. In Example 8.25 the ZONE= option is used to produce a zoned Gantt chart. Example 8.26 shows you how to produce a Web-enabled Gantt chart that you can use to drill-down your project. Finally, Example 8.27 uses the CHARTWIDTH= option to produce Gantt charts that are consistent in appearance.

In all the examples presented, the early and late schedules are specified in the data set by means of the variables E_START, E_FINISH, L_START, and L_FINISH; hence, the ES=, EF=, LS=, and LF= options are not needed in the CHART statement. Unless otherwise specified, the pattern statements used in the examples are as follows:

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        */