This example shows how to control the format of the Gantt chart using CHART state- ment options. The Schedule data set used by PROC GANTT is the same as that used in Example 4.1. The output is on four pages; the first two pages contain a detailed description of the various symbols used by the procedure to plot the schedule. This description is produced by using the SUMMARY option. The next two pages con- tain the Gantt chart. The LINEPRINTER option invokes the procedure in line-printer mode. The FILL option causes the first page to be filled as completely as possible be- fore the second page is started. Thus, the first page of the chart contains 17 activities while the second page contains only 11 activities.
The SKIP=2 specification causes 2 lines to be skipped between observations. The NOLEGEND option suppresses displaying of the legend, while the NOJOBNUM option causes job numbers to be omitted. The CRITFLAG option is used to produce the flag to the left of the main chart indicating if an activity is critical. Specifying BETWEEN=2 sets the number of columns between consecutive ID columns equal to 2. The REF= option produces the reference lines shown on the chart on the specified dates. The INCREMENT=5 specification indicates to the procedure that labels are to be displayed in increments of 5 units of the MININTERVAL= value, which by default is DAY. The ID statement is used to display the activity names to the left of the chart. The ID statement also causes the activity ’strip’ to appear only once in the chart. Thus, there are only 28 activities in this chart instead of 29, as in Example 4.1.
title ’Gantt Example 2’;
title2 ’Customizing the Gantt Chart’; proc gantt lineprinter;
chart / summary fill skip=2 nolegend
nojobnum critflag between=2
ref=’10jun92’d to ’30aug92’d by 15 increment=5;
id activity; run;
Example 4.2. Customizing the Gantt Chart 439
Output 4.2.1. Customizing the Gantt Chart
Gantt Example 2 Customizing the Gantt Chart
Summary
Symbols used for different times on the schedule
Variable Symbol Variable Symbol
E_START < L_START < E_FINISH > L_FINISH >
Miscellaneous Symbols
Symbol Explanation
| Reference Line
* Overprint character when start or finish times coincide
Symbols used for joining start and/or finish times
Symbol Explanation
- Duration of non-critical job
. Slack time for non-critical job
= Duration of critical job
- Slack time(neg.) for supercritical job
* Duration of supercritical job
Gantt Example 2 Customizing the Gantt Chart
Summary (Contd.)
Some examples of typical strings
String Description
<-->...<...> Duration followed by slack time: early finish before late start
<--<-->...> Duration followed by slack time: early finish after late start
<--*...> Duration followed by slack time: early finish equals late start
*===* Duration of job on critical path
<-->--<***> Duration preceded by negative slack time for a supercritical job: late finish before early start
<--<***>***> Duration preceded by negative slack time for a supercritical job: late finish after early start
<--****> Duration preceded by negative slack time for a supercritical job: late finish equals early start
Gantt Example 2 Customizing the Gantt Chart
JUN JUN JUL JUL JUL JUL JUL JUL JUL AUG AUG AUG AUG AUG AUG SEP activity Flag 21 26 01 06 11 16 21 26 31 05 10 15 20 25 30 04 -+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+- | | | | | | | | | | | | | | form CR |*===* | | | | | | | | | | | | | | | | | | | pour CR | *=* | | | | | | | | | | | | | | | | | | | core CR | | *============|* | | | | | | | | | | | | | | | | | | strip CR | | |*=* | | | | | | | | | | | | | | | | | | curtain_wall CR | | | *====* | | | | | | | | | | | | | | | | | | plumbing | | | <---*.|...> | | | | | | | | | | | | | | | | | risers | | | <---<--->.|..> | | | | | | | | | | | | | | | | | doors | | | <>...|...<> | | | | | | | | | | | | | | | | | electrical_walls | | | <---<-|-->...>| | | | | | | | | | | | | | | | | balance_elevator | | | <->...|...<..>| | | | | | | | | | | | | | | | | port_masonry | | | <->...|...<.>| | | | | | | | | | | | | | | | | finish_masonry | | | <->...|...<|.> | | | | | | | | | | | | | | | | glaze_sash CR | | | *====* | | | | | | | | | | | | | | | | | | spray_fireproof CR | | | *=|==* | | | | | | | | | | | | | | | | | insulate_walls | | | <-|->...<....>| | | | | | | | | | | | | | | | | ceil_ducts_fixture CR | | | | *====* | | | | | | | | | | | | | | | | | test CR | | | | *==* | | | | | | | | | | | | | | | | | -+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-
Graphics Examples 441
Gantt Example 2 Customizing the Gantt Chart
JUN JUN JUL JUL JUL JUL JUL JUL JUL AUG AUG AUG AUG AUG AUG SEP activity Flag 21 26 01 06 11 16 21 26 31 05 10 15 20 25 30 04 -+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+- | | | | | | | | | | | | | | insulate_mechanical CR | | | | *==*| | | | | | | | | | | | | | | | | lath CR | | | | *|=* | | | | | | | | | | | | | | | | plaster CR | | | | | *====* | | | | | | | | | | | | | | | | marble_work | | | | | <-<>.> | | | | | | | | | | | | | | | | acoustic_tiles CR | | | | | *====* | | | | | | | | | | | | | | | | tiling | | | | | <-<>.> | | | | | | | | | | | | | | | | floor_finish CR | | | | | *====* | | | | | | | | | | | | | | | | paint CR | | | | | *==|=* | | | | | | | | | | | | | | | finish_mechanical CR | | | | | *==|=* | | | | | | | | | | | | | | | finish_paint CR | | | | | | *=* | | | | | | | | | | | | | | | caulking_cleanup CR | | | | | | *===* | | | | | | | | | | | | | | | -+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-
Graphics Examples
The following examples illustrate the use of graphics options and the use of PAT- TERN and SYMBOL statements to produce high resolution graphics quality Gantt charts. In Example 4.3, an extra input data set containing the holiday information is used to mark the holidays used in computing the schedule by PROC CPM. Ex- ample 4.4 illustrates the use of the CHART statement to specify milestones and ad- ditional variables to be plotted on the chart. Example 4.5 illustrates the use of the COMPRESS option to fit an entire Gantt chart on one page. Example 4.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 suc- ceeding page when the time axis extends beyond one page. In Example 4.7, the MINDATE= and MAXDATE= options are used to permit viewing of only a portion of the schedule in greater detail. Example 4.8 uses the HOLIDUR= option in con- junction with the INTERVAL= option to mark holidays of varying lengths on the Gantt chart. Example 4.9 illustrates the use of the CALENDAR and WORKDAY data sets to mark holiday information from different calendars on the chart.
In Example 4.10, the actual schedule for each activity is plotted on a separate line in addition to the early and late schedules. Example 4.11 illustrates the tracking of
a project and comparing its progress against a baseline schedule. In Example 4.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 4.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 4.14. Example 4.15 illustrates the use of the BY statement to obtain Gantt charts for different projects in a multiproject environment. In Example 4.16, the GANTT procedure is used after some data ma- nipulation steps to produce Gantt charts for individuals, each working on different subsets of activities in the project.
In Example 4.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 dis- plays the precedence relationships between activities. Example 4.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 4.19, the routing control options MAXDISLV=, MAXOFFGV=, MAX- OFFLV=, 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. Ex- ample 4.20 demonstrates the specification of nonstandard lag types using the LAG= option in the CHART statement. This example also illustrates use of the PREC- DATA= option in the PROC GANTT statement. In Example 4.21, the ANNOTATE= option is used to add graphics and text on a Gantt chart. Example 4.22 illustrates the Automatic Text Annotation facility to label the Gantt chart independently of the SAS/GRAPH Annotate facility. In Example 4.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 4.24 illustrates the use of the SEGMT–NO variable and the PATTERN vari- able to produce a versatile multisegment Gantt chart. In Example 4.25 the ZONE= option is used to produce a Zoned Gantt chart. Finally, Example 4.26 shows you how to produce a "web-enabled" Gantt chart that you can use to drill-down your project. 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.