Chap 6
Chap 6
The PM Procedure
OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
GETTING STARTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
SYNTAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
PROC PM Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
PM WINDOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
User Interface Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Project Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
Table View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
Gantt View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Creating and Editing Projects . . . . . . . . . . . . . . . . . . . . . . . . . . 650
Setting Activity Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
Saving and Restoring Preferences . . . . . . . . . . . . . . . . . . . . . . . 654
Sorting Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
Setting the Project Font . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
Renumbering the Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
DETAILS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Schedule Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
Project Data Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
TIMENOW Macro Variable . . . . . . . . . . . . . . . . . . . . . . . . . . 660
MDBTOPM Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
EXAMPLES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Example 6.1 Defining a New project . . . . . . . . . . . . . . . . . . . . . . 661
Example 6.2 Adding Subtasks to a Project . . . . . . . . . . . . . . . . . . . 666
Example 6.3 Saving and Comparing Baseline Schedules . . . . . . . . . . . 668
Example 6.4 Effect of Calendars . . . . . . . . . . . . . . . . . . . . . . . . 671
Example 6.5 Defining Resources . . . . . . . . . . . . . . . . . . . . . . . . 674
Example 6.6 Editing Progress . . . . . . . . . . . . . . . . . . . . . . . . . 678
634 Chapter 6. The PM Procedure
Getting Started
Consider the simple Software Development Project described in the "Getting Started"
section of Chapter 2, “The CPM Procedure.” Recall that the Activity data set, SOFT-
WARE, contains the activity descriptions, durations, and precedence constraints. The
following statements (identical to the PROC CPM invocation) initialize the project
data and invoke the PM procedure.
636 Chapter 6. The PM Procedure
data software;
input Descrpt $char20.
Duration 23-24
Activity $ 27-34
Succesr1 $ 37-44
Succesr2 $ 47-54;
datalines;
Initial Testing 20 TESTING RECODE
Prel. Documentation 15 PRELDOC DOCEDREV QATEST
Meet Marketing 1 MEETMKT RECODE
Recoding 5 RECODE DOCEDREV QATEST
QA Test Approve 10 QATEST PROD
Doc. Edit and Revise 10 DOCEDREV PROD
Production 1 PROD
;
proc pm data=software
out=intro1
interval=day
date=’01mar99’d;
id descrpt;
activity activity;
duration duration;
successor succesr1 succesr2;
run;
When you invoke the PM procedure, the PM Window appears (see Figure 6.1), con-
sisting of the Table View and the Gantt View of the project. The activities are listed
in the order in which they are defined in the Activity data set. The two views are
separated by a dividing line that can be dragged to the left or right, controlling the
size of the two views. Further, the two views scroll together in the vertical direction
but can scroll independently in the horizontal direction.
The Table View contains several editable columns (in white) that can be used to edit
the project data as well as add new activites to the project. Some of the columns (in
gray), such as the Schedule times, are not editable. The Gantt View contains a Gantt
chart of the project and displays the precedence relationships between the activities.
You can use the Gantt View to add or delete precedence constraints between activities
and to change the durations or alignment constraints of the activities by dragging the
schedule bars. Details of the interface are described in the “PM Window” section on
page 639.
Syntax
The syntax for PROC PM is virtually identical to that for PROC CPM. The main dif-
ference is that you replace the PROC CPM statement with the PROC PM statement.
Note also that the TAILNODE and HEADNODE statements are not supported in
PROC PM.
The form of the PROC PM statement is
PROC PM options ;
PROC PM Statement
PROC PM options ;
All the options that are available in the PROC CPM statement can also be specified in
the PROC PM statement. However, there are a few additional options available with
PROC PM, and some of the other PROC CPM options are not needed as they are the
default behavior in PROC PM.
Options Specific to PROC PM
The following options can be specified on the PROC PM statement.
NODISPLAY
invokes the procedure in a noninteractive mode. The schedule for the project is still
computed and the requested output data sets are created and saved. However, the
PM Window is not displayed. This option is useful for scheduling large projects
that do not need to be updated interactively. Note that invoking PROC PM with the
NODISPLAY option is similar to invoking PROC CPM; however, since the format of
the Schedule Output data set is different for the two procedures, you may see some
differences in the order and content of the observations. See the “Schedule Data Set”
section on page 658 for details.
PROJECT=SAS-data-set
identifies a SAS data set that can be used to save and restore preferences that control
the project view. For example, preferences such as the font, column order, column
widths, filters, and so forth, can be saved from one invocation to another. See the
“Project Data Set” section on page 659 for more details about this data set and the
preferences that can be saved in it.
PROJECTNAME=’string’
PROJNAME=’string’
NAME=’string’
specifies a descriptive string identifying the name of the project. This string is used
to label the PM Window.
Default Options in PROC PM
The following options are the default in PROC PM.
ADDACT
ADDALLACT
EXPAND
indicates that an observation is to be added to the Schedule output data set (and the
Resource Schedule output data set) for each activity that appears as a value of the
variables specified in the SUCCESSOR or PROJECT statements without appearing
as a value of the variable specified in the ACTIVITY statement. This option is the
default in PROC PM. In other words, the Schedule output data set produced by PROC
PM contains one observation for every activity that appears as a value of the ACTIV-
ITY, SUCCESSOR, or PROJECT variables (as long as it has not been deleted in the
current invocation of the procedure). It also contains an observation for every activity
that is added to the project via the graphical user interface.
AUTOUPDT
requests that the procedure should assume automatic completion (or start) of activities
that are predecessors to activities already completed (or in progress). This option is
the default in PROC PM.
ESTIMATEPCTC
ESTPCTC
ESTPCTCOMP
ESTPROG
indicates that a variable named PCT– COMP is to be added to the Schedule output
data set (and the Resource Schedule output data set) that contains the percent com-
pletion time for each activity (for each resource used by each activity) in the project.
This option is the default in PROC PM.
SHOWFLOAT
indicates that activities that are completed or in progress should have nonzero float.
This option is the default in PROC PM.
XFERVARS
indicates that all relevant variables are to be copied from the Activity data set to the
Schedule data set. This option is the default in PROC PM. The procedure carries
over to the output data set all the relevant variables from the input data set. Thus,
the Schedule output data set contains all the project information that is necessary to
schedule it.
PM Window
The PM Window provides the standard editing and viewing functions of a typical
project management tool. It can be displayed by invoking the PM procedure or via
the Activities Window in the PROJMAN application. For an existing project, the PM
Window is populated with the activities in the project. For a new project, the PM
window is empty. Figure 6.2 displays the PM Window for one of the sample projects
included with the PROJMAN application.
After you have finished editing the project, you can close the PM Window to save the
new project data in the Schedule output data set that was specified in the invocation
of the PM procedure.
In addition to the pull-down menus, context sensitive pop-up menus are available in
the Table and Gantt Views, the Time axis, along the arcs, and from select columns
in the Table View. Pop-up menus are displayed by positioning the cursor over a
particular object and clicking the right mouse button. For example, clicking the right
mouse button on an arc in the Gantt View displays the arc pop-up menu shown in
Figure 6.4.
In some situations, the pop-up menu selection can lead to a dialog box that requires
you to type in a value in one or more of the fields in the box. For example, selecting
“Edit Lag...” from the arc pop-up menu leads to the dialog box displayed in Figure
6.5. (See the “Create Nonstandard Precedence Relationships” section on page 652
for a discussion of nonstandard precedence constraints.)
The Table View displays project data in a tabular format. Some of the columns are
editable (white background) while other columns, which are computed by the proce-
dure, are not editable (gray background). The Gantt View always displays the early
start schedule of the project. In addition, it also displays the resource-constrained
schedule (if resources are present), the actual schedule (if the project has started and
is in progress), and the baseline schedule (if a baseline schedule is saved for the
project.) The display of all the schedule bars (except the Early Schedule bar) can be
toggled on or off using the pop-up menu from the Gantt View.
Note that each row of the combined Table View and Gantt View represents one ac-
tivity (also referred to as task in this chapter). Any change in data or movement of a
row in one view is also reflected in the other.
In addition to the pull-down and pop-up menu actions, several drag-and-drop type of
actions are available within the PM Window. You can move the columns and rows
of the Table View by selecting a row or column and dragging to the desired position.
You can also change the width of the columns by dragging the column dividers in the
Table header region.
You can manipulate the durations of the tasks by changing the length of the Early
Schedule bar in the Gantt View. You can also move the task in time by dragging
the Early Schedule bar over to a new position. This affects the Target Date for the
associated task.
Any of the preceding tasks may result in a change to the project schedule that is
immediately reflected in the Table and Gantt Views. All editing abilities and the cor-
responding changes to the schedule are described in detail in the following sections.
Project Hierarchy
The PM procedure displays a hierarchical project structure if it is invoked with the
PROJECT statement. If the procedure is invoked without a PROJECT statement, the
supertask and subtask relationship is not supported, and all the activities are consid-
ered to be at the same level, belonging to a single project. Note that, in the PROJMAN
application, the PM procedure is always invoked with the PROJECT statement.
If the PROJECT statement is used, then a task’s level in the project hierarchy is
indicated in the Table View by using small square boxes to the left of the activity
number in the Job Nbr column. Empty boxes indicate that the activity does not have
any subtasks (it is a leaf activity), while filled boxes indicate that the activity is a
supertask. Further, a Project Summary task is included to represent the root task (or
Summary Task) of the project. This task is positioned at the top of the list of activities,
and its display can be toggled on or off by selecting “Display Summary Task” from
the “View” pull-down menu (see Figure 6.6).
In the Gantt View, supertasks are indicated by vertical cones at the end of their corre-
sponding schedule bars.
Note that the durations of the supertasks are determined by the overall duration of
their subtasks. Thus, you cannot change the duration of a supertask.
If there is no PROJECT statement, all menu selections that correspond to the multi-
project structure are grayed out and are unavailable for selection. For example, the
“Display Summary Task” selection in Figure 6.6 will be grayed out.
Table View
The Table View displays information about a project in tabular form. It displays activ-
ities along with their descriptions, various activity schedules, resource requirements,
calendars, and target dates. The hierarchical information about an activity is provided
in the Job Nbr column by a number of small square boxes to the left of the activity
number. The number of square boxes corresponds to the level of the activity in the
project hierarchy. Empty boxes indicate that the activity does not have any subtasks
or that it is a leaf activity, while filled boxes indicate that the activity is a supertask.
Some columns in the Table View are editable while others are write-protected. The
editable columns are lighter in color than the noneditable ones. In general, a user can
type into all columns that provide input to the project while all other columns that
contain output values from PROC PM are write-protected. For example, in Figure
6.2, the WBS Code column cannot be edited while the activity and Duration columns
can be edited.
In the Table View you can add or delete activities, add subtasks, change the order of
the columns or the activities, edit activity information, and so on. These tasks are
described in the following sections.
Add/Copy/Delete Tasks
Clicking with the right mouse button on any task in the Table View displays the pop-
up menu shown in Figure 6.7. From this pop-up menu, you can Add/Copy/Delete
the selected task. If the “Add Task” menu item is selected, the new task is added
immediately following the selected task. If the PM procedure is invoked with the
PROJECT statement (as is always the case if you use PROJMAN), you can also add
a subtask to the selected task. If the “Copy Task” menu item is selected, a copy of
the selected task is added to the bottom of the Table View. The new task has the same
duration and calendar as the selected task. If the selected task is a supertask, all its
subtasks (and any internal precedence constraints) are copied as well.
The display order of columns in the Table View can be changed in several ways:
Drag the column in the header row and drop it to the destination.
Select “View” from the pull-down menu and then choose “Move Columns to
Left” (see Figure 6.8). Choosing any of the available options moves the corre-
sponding columns to the leftmost portion of the Table View.
Edit Durations
To change the duration of an activity, edit the Duration column in the Table View.
Note that changing an activity’s duration to 0 changes the activity into a Milestone.
Activity durations can also be changed in the Gantt View.
Edit Alignment Constraints
Scroll to columns named Target Date and Target Type. Enter one of either SGE, SLE,
MS, MF, FGE or FLE in the Target Type column. You can either type the values or
select them from the pop-up menu displayed by pressing the right mouse button in
the Target Type column (see Figure 6.9). Enter the appropriate date in the Target
Date column. You can also view these columns by selecting View->Move Columns
to Left->Target Dates from the pull-down menu (Figure 6.8). You can also change an
activity’s alignment constraints in the Gantt View.
Edit Calendars
To change an activity’s calendar, you can enter the calendar number in the Activity
Calendar column or the calendar description in the Calendar Name column. Note
that the calendars that can be assigned to an activity are predefined in the Calendar
data set. To see a list of the calendars, you can click in one of the calendar columns
with the right mouse button. This will pop up a list of calendars, from which you can
select the activity’s calendar. See Figure 6.10 for an example of a calendar pop-up
menu with two calendars.
View. Note that by changing one of these columns, all the other related progress
columns may also be affected. For example, entering 100 in the Percent Complete
column for an activity that is in progress updates the Remaining Duration column to
0, and the Actual Finish column is filled in appropriately. You can also modify the
progress information of an activity in the Gantt View.
Expand/Collapse Supertasks
Double clicking on a supertask in the Table View toggles the expand/collapse switch.
This action enables you to either view or hide all the subtasks of the supertask.
Hide Tasks
An individual task can be hidden by clicking the right mouse button over the task
in the Table View and choosing “Hide” from the menu shown in Figure 6.7. Tasks
can also be hidden from view using several filters described in the “Setting Activity
Filters” section on page 654.
Move Tasks
Drag with the left mouse button anywhere in the row corresponding to an activity you
want to move and drop it to the destination.
Gantt View
In the Gantt View, activity schedules are pictorially depicted by horizontal bars. There
is one bar for each of the early, resource, actual, and baseline schedules. For the Early
Schedule bar, critical activities are marked in different colors than the noncritical
activities. Weekends are marked by shaded vertical rectangles running through the
chart. Supertasks are differentiated from leaf activities by anchoring vertical cones at
the ends of their Early Schedule bars.
The Gantt View is displayed with a rectangular grid that can be turned on or off by
selecting “Grid” from the pop-up menu (see Figure 6.11) that is displayed by clicking
anywhere in the Gantt View with the right mouse button.
The pop-up menu in the Gantt View also enables you to toggle the display of the
Actual, Resource, or Baseline Schedule bars. Note that these bars can be displayed
in the Gantt View only if the project data contain the actual, resource-constrained, or
baseline schedules, respectively.
In addition to displaying the activity schedules in an easy-to-view format, the Gantt
View in the PM Window can also be used to change the durations of the activities, add
or delete precedence constraints, set activity alignment constraints, or set progress
information.
You can also change several of the display attributes of the Gantt View by using the
Time Axis pop-up menu (see Figure 6.12) to set the scale of the axis, format the time
axis labels, set the units of display, and so forth. All of these tasks are described in
the following sections.
Change Increments
Increments in the Gantt View define the number of tick marks on the minor axis per
tick mark on the major axis. They can be changed by clicking with the right mouse
button on the header area and choosing “Increment” from the pop-up menu. The
available selections are shown in Figure 6.15.
Change Units
The Time Axis Units in the Gantt View can be changed by clicking with the right
mouse button on the header bar in the Gantt View and selecting “Units” (see Figure
6.17). The default value of the units used for display is based on the specification of
the INTERVAL= parameter in the invocation of the PM procedure.
You can modify the type of the precedence constraint or the lag value associated
with the precedence constraint by clicking on the arc with the right mouse button
and selecting “Edit Lag.” The ensuing dialog box is shown in Figure 6.20. Enter the
value of the lag duration in the first field and the type of the lag in the second field.
Valid values of lag are Finish-to-Start (FS), Start-to-Start (SS), Start-to-Finish (SF),
and Finish-to-Finish (FF).
If calendars are defined in the project, the “Edit Lag” dialog includes the lag calendar
associated with the selected precedence constraint. You can change the lag calendar
by selecting from the list of available calendars that is displayed within the Edit Lag
dialog shown in Figure 6.21.
Add Activities
An activity (or task) can be added to the Project in the PM Window by clicking the
right mouse button in the Table View. If “Add Task” is chosen from the pop-up
menu, then an activity is added at the same level as the selected activity. Subtasks of
an activity can be added by selecting “Add Subtask.” These actions are also available
from the “Edit” pull-down menu (Figure 6.22) whenever an activity is selected in the
Table View. Note that the selected activity is highlighted.
To add a new task at the topmost level of the project hierarchy, choose “New Task”
from the “Edit” pull-down menu.
If you want to delete the Baseline information from the project data, you can
select “Delete Baseline” from the “Edit” pull-down menu.
mouse button on the parent activity in the Table View. Then choose “Add Subtask”
from the background menu. The newly created subtask has one more little square box
than the parent task in the Job Nbr column in the Table View. The empty square boxes
denote that it is a leaf activity (a task with no subtasks). The number of boxes denote
a task’s level in the project hierarchy starting with level 0 for the Project Summary
task.
Delete Activities
An activity can be deleted in the Table View by clicking the right mouse button any-
where in the task row and choosing “Delete Task.” If the selected task is a supertask,
all its subtasks are deleted as well. Note that, in this case, a Confirmation Dialog
confirms the “Delete Supertask” action.
Delete Precedence Constraints
To delete a precedence constraint, click anywhere on the arc with the right mouse
button and choose “Delete” from the pop-up menu.
Edit Activity Alignment Constraints
Activity alignment constraints can be added/modified as described in the “Edit Align-
ment Constraints” section on page 644 and in the “Modify Activity Alignment
Constraints” section on page 648.
Edit Baseline Information
To edit the baseline schedule, scroll to the Baseline Start and Baseline Finish
columns, and type in the new values of the baseline start and finish times. Note
that you cannot change the baseline values by moving the Baseline Schedule bars.
See the “Add Baseline Information” section on page 651.
Edit Calendar Specifications
Calendars are defined by the CALEDATA= option in the PROC PM statement. This
option is similar to the corresponding option in PROC CPM. Once calendars are
defined in the Project, an activity’s calendar can be changed or set in the Table View
by editing the Activity Calendar or Calendar Name columns. You can either type
the values or select them from the pull-down menu displayed by pressing the right
mouse button in either of the Calendar columns. See the “Edit Calendars” section on
page 644.
Edit Resource Requirements
The resource requirement information for an activity can be edited in the Table View.
A column for a resource is created in the Table View when it is specified in the
RESOURCE statement.
The resource requirement information for each activity is displayed and can be edited
in the Table View. A column for a resource is created in the Table View when it is
specified in the RESOURCE statement of the PROC PM invocation, or it is created
by the Resource Manager of PROJMAN. For details about the RESOURCE state-
ment, the Resource data set, and Resource Allocation, see Chapter 2, “The CPM
Procedure.” Changing the resource requirement causes the project to be rescheduled
using the new resources.
Activities at different levels in the hierarchy can be viewed by selecting “View” from
the pull-down menu (Figure 6.24 and choosing the appropriate level of the project
hierarchy to filter out the higher level tasks. For example, selecting “Level 2 Tasks”
displays only the tasks that are at Level 2 or lower. All activities can be viewed by
selecting “Tasks at All Levels” from the “View” pull-down menu.
Activities can also be filtered using different criteria by choosing View->Filters from
the “View” pull-down menu (see Figure 6.24). The available filters are shown in
(Figure 6.25). By default, no filter is in effect (the selection is “None”); you can save
the filter of your choice in the Preference data set (see the “Saving and Restoring
Preferences” section on page 654).
preference. You can also choose a different level of display or set some activity filters
(see the “Setting Activity Filters” section on page 654).
PROC PM enables you to save the attributes of the display in an indexed data set
that is specified in the PROC PM statement, using the PROJECT= option. You can
use this data set to save display preferences such as the font, column order, column
widths, filters, and so forth. See the “Project Data Set” section on page 659 for details
regarding the format of this data set.
You can save and restore the preferences from the “Project” pull-down menu, which
contains the Preferences submenu (Figure 6.26). Note that you have to explicitly save
the project preferences using the “Save” selection from this pull-down menu. Closing
the PM Window saves only the activity data of the project; it does not automatically
save the project preferences. When you restore preferences, the state used is the one
that was last saved for the project in the specified preference data set.
Sorting Activities
Activities can be sorted by activity number, early start, late start, and resource start by
choosing Project->Sort from the “Project” pull-down menu (see Figure 6.27). Once
the activities are sorted, the Schedule output data set contains the activities in the new
sorted order. See the “Renumbering the Activities” section on page 656.
Printing
The PM Window provides functionality to print the Gantt View, the Table View, or
both, provided that a printer has been selected and the correct information has been
set in the Printer Setup Window. For more information on setting up the printer
options, see the SAS companion for your operating environment or contact the SAS
Support Consultant at your site for further instructions. Print Preview can be used to
view the information before printing, and the printed output can be saved to a file. All
the printing functions are available from the “File” pull-down menu (Figure 6.29).
Details
The computation of the schedule, the resource constrained scheduling algorithm,
the resource usage information, and all other aspects of the scheduling engine for
PROC PM are the same as the ones for PROC CPM. Refer to Chapter 2, “The CPM
Procedure,” for details. A few minor differences in the content of the Schedule Out-
put data set and the Project data set (not available in PROC CPM) are described in
the following sections.
The PM procedure automatically includes all relevant variables that are needed
to define the project. Thus, the ACTIVITY, SUCCESSOR, LAG, DURATION,
ALIGNDATE, and ALIGNTYPE variables are included in the output data set
by default. If the RESOURCE statement is used, all the resource variables are
also included. Likewise, if actual progress is entered for the project during the
course of the interactive session, all the progress-related variables are added to
the output data set.
The PM procedure contains two sets of observations, identified by two different
values of a new variable, OBS– TYPE. The first set of observations contains
one observation for every activity in the project. The value of the OBS– TYPE
variable for these observations is ‘SCHEDULE’. These observations contain
all the activity information such as the duration, the start and finish times, the
resource requirements, and so forth. The second set of observations contains
one observation for every precedence constraint in the project. The value of the
OBS– TYPE variable for these observations is ‘LOGIC’. These observations
contain all the precedence information such as the activity, successor, and lag
information.
The order of the activities in the Schedule data set produced by PROC PM
corresponds to the order in which the activities appear in the Table View at the
end of the interactive session. Likewise, when the procedure is first invoked,
the order of the activities in the Table View corresponds to the order in which
the activities are defined in the Activity input data set. If, during the course
of the session, some of the activties are reordered, or deleted, or if some new
activities are added, the Schedule output data set contains all the activities that
are defined in the Table View at the end of the session.
The PM procedure also assigns a numeric identifier for each activity. These
values are assigned by PROC PM consecutively in the order of the activities
in the Table View and saved in a variable called ACTID (see the “Renumber-
ing the Activities” section on page 656). In addition to the ACTID variable,
the Schedule data set also contains a numeric variable called SUCCID, which
contains the numeric identifier for the succesor activities in the LOGIC ob-
servations. If the PROJECT statement is used in the invocation of the PM
procedure, a numeric variable called PNTID is added to the Schedule data set;
this variable identifies the parent task for each activity.
Note: If the ACTIVITY variable in the Activity input data set is a character
variable, the ACTID, SUCCID, and PNTID variables are added to the Schedule
data set in addition to the ACTIVITY, SUCCESSOR, and PROJECT variables.
On the other hand, if the ACTIVITY variable in the Activity input data set is
numeric, the new ACTID, SUCCID, and PNTID variables replace the numeric
ACTIVITY, SUCCESSOR, and PROJECT variables, respectively.
text font
time increment
time units
major time axis format
minor time axis format
schedule bars displayed (for example, Actual, Baseline, and so forth)
chart grid
chart scale
table column widths
table column order
Table View-Gantt View dividing line
activity filters
activity level
project summary
window dimensions
The Project data set uses three variables to save the preference information:
Note that the Project data set is used internally by the PM procedure and is not de-
signed to be altered or edited directly. Its contents may not be meaningful except to
the PM procedure.
MDBTOPM Macro
MDBTOPM is a SAS macro that converts Microsoft Project data saved in MDB
format to a form that is readable by the PM procedure. In the event of a succesful
conversion, the macro proceeds to invoke an instance of the PM procedure using
values for the relevant options that were determined during the course of the data
conversion. Execution of the MDBTOPM macro requires SAS/ACCESS software.
The MDBTOPM macro has two arguments; one that specifies the location of the
.MDB file and another that specifies the location of the directory for storing the SAS
data sets. The following SAS data sets are generated by the MDBTOPM macro:
Examples
This section illustrates some of the interactive features of PROC PM using a few
simple examples that lead you through different stages of entering and editing project
data. A simple software development project is used in all the examples. The output
data set from one example is used as input to the next example. Where necessary,
additional data sets are created, or the input data set is modified using simple data
step code.
You could also use PROJMAN to create the software project and then proceed to each
succeeding example using the application to define the calendars, resources, and so
forth. The PROJMAN application automatically manages the required data sets.
data softattr;
length projattr $8. pratcval $200.;
input projattr pratnval pratcval;
datalines;
;
id activity;
run;
In the PM Window, enter the following tasks with the corresponding durations in the
Table View:
Design 5
Develop 10
Document 8
Test 8
Ship 0
As each task is entered, the Schedule columns in the Table View are updated with
the early and late start times, and the Early Schedule bars appear in the Gantt View.
Output 6.1.2 shows the PM Window after the five tasks have been entered. To view
the Schedule columns, you can scroll the Table View to the right or use the “View”
pull-down menu (Figure 6.6) to move the Schedule columns to the left.
To enter precedence constraints between two activities, such as ‘Design’ and ‘De-
velop’, draw an arc, using the left mouse button, from the end of the predecessor task
to the beginning of the successor task. Use the Gantt View to enter the following
precedence constraints:
Output 6.1.3 shows the Software Project as the last precedence constraint is being
drawn. Note that, in this view of the PM Window, the Schedule columns have been
moved to the left, the grid lines in the Gantt View have been turned off (using the
menu in Figure 6.11), and the Gantt View has been scrolled to the right to bring the
end of the schedule bar for ‘Test’ into view.
To check the overall project status, you can bring the Project Summary task into view
by selecting “Display Summary Task” from the “View” pull-down menu (Figure 6.6).
Note that the project duration is 23 days. The critical activities are shown in black
while the noncritical activities are gray. The Summary Task is indicated by vertical
cones at the end of its schedule bar.
For the next few examples, the units used in the Gantt View are changed to “Weeks”
using the Axis pop-up menu shown in Figure 6.12, the Summary Task is displayed
at the top of the list of activities, and the Activity description columns are shown
in the Table View. The “Project” pull-down menu can be used to save these window
settings in the Project data set. The view of the project corresponding to these settings
is shown in Output 6.1.4. You can end the interactive editing session by closing the
window. All the activity and precedence information is saved in the output data set,
SOFTOUT1, displayed in Output 6.1.5. Note the two sets of observations in this
data set: the first contains all the schedule information for all the activities, and the
second lists all the precedence relationships between activities.
O P P W d a S
B R R B u c U
S O O S S r P t C
_ P J J _ A U a A i C
T N _ _ C C C t R v E
O Y T D L O T C i E i S
b P I U E D I I o N t S
s E D R V E D D n T y R
A A E L
L L E _ L _ T F E L
G G _ F _ F _ _ E S L S
N N S I S I F F S _ S _
D T T N T N L L _ D _ D
O L A Y A I A I O O A E A E
b A T P R S R S A A S S S S
s G E E T H T H T T C C C C
In the invocation of PROC PM, the output data set name is the same as the input data
set. Thus, it is possible to make changes to the Activity data set using PROC PM and
then save the results back to the original data set.
In the current view of the Software Project, you want to add some subtasks to the
‘Design’ and ‘Develop’ tasks. Suppose that these two tasks are broken into two
subtasks each, one for ‘Module 1’ and the other for ‘Module 2’. Further, you want
to remove the precedence constraint between the ‘Design’ and ‘Develop’ phases and
add constraints between the respective modules. You can accomplish these tasks by
making the following editing changes in the PM Window.
1. Use the Table View pop-up menu to add the following subtasks to ‘Design’:
Module 1: 5 days
Module 2: 3 days
The resulting project schedule is displayed in Output 6.2.2 and saved in the data set
SOFTOUT1. Note that the new project duration is 24 days.
Output 6.2.2. Project Schedule
Use the “Set Baseline” pull-down menu (Figure 6.23) to save the current Early Sched-
ule as a Baseline Schedule. The resulting display is shown in Output 6.3.1. Note that
the Gantt View now shows the Baseline schedule, in addition to the Early Schedule.
Also, the activities have been numbered to be sequential in the current view (see the
“Renumbering the Activities” section on page 656).
Output 6.3.1. Using Baseline Schedules
The baseline schedule is useful in determining the effect of changes to the project on
the schedule. For example, suppose there is a directive from the Director of your divi-
sion that all the developers are required to attend a User Interface Standards Meeting
before starting the development of Module 2. This meeting has been scheduled to
start on March 15, 1999 and is expected to take 3 days. What is the effect of this
directive on your project schedule?
To see this, you can make the following changes in the PM Window:
1. Add a new task to the project by selecting “New Task” from the “Edit” pull-
down menu.
2. To edit the newly entered task, you may need to scroll down.
3. Type in the name of the task: ‘UI Meeting’. Set its duration to 3.
4. In the Gantt View, draw a link from this new task to Task 6 (‘Module 2’ under
‘Develop’).
5. Also in the Gantt View, grab the task, ‘UI Meeting’, using the left mouse button
and drag it to the tick mark corresponding to 15Mar99.
The resulting view is shown in Output 6.3.2. Note that the view may differ depending
on the display parameters of your device. It is easy to see that, due to the 3-day
meeting that is mandated, there is a delay in the project schedule (the project duration
is now 26 days).
Output 6.3.2. Effect of UI Meeting on Schedule
You can get a complete picture of the effect on the schedule by examining all the
Schedule columns that are shown in the Table View. Output 6.3.3 shows the Schedule
columns, the Baseline columns, and the Target Date and Type columns in the Table
View. To obtain this view, some of the columns have been moved and the Baseline
Schedule bars (in the Gantt View) have been hidden from the display.
Output 6.3.3. Table View Showing all Schedules
If the project delay resulting from the UI Meeting is of concern, you may want to
schedule the Meeting on an earlier date. Suppose the revised start date of the Meeting
is March 10, 1999. To see the effect of the change, you can do the following:
1. Revert to the saved project preferences so that both the Table and the Gantt
Views are visible.
2. Use the “View” pull-down menu to move the Target Dates columns to the left
in the Table View.
3. Scroll down, if necessary, to bring the task ‘UI Meeting’ into view.
4. Change the Target Date column for this task to ‘10Mar99’.
The resulting view is displayed in Output 6.3.4. Note that, as a result of this change,
all the activities are back on schedule as the new schedule coincides with the saved
baseline schedule. The last activity was defined after the baseline schedule had been
saved in Example 6.2; hence, there is no baseline schedule bar for this activity. You
can use the “Fill Missing Baseline” selection from the pull-down menu shown in
Figure 6.22 to set the baseline schedule for the ‘UI Meeting’ to be the current early
schedule.
When the PM procedure initializes the PM Window, it attempts to restore all the
display settings using the values in the Project data set, SOFTATTR. However, the
new Activity data set has an extra variable, calid, which leads to two new columns in
the Table View, one for the Activity Calendar (which displays the Calendar ID) and
the other for the Calendar Name. These columns are added at the right end of the
Table View and can be seen by scrolling to the right. The resulting view is displayed
in Output 6.4.1.
Output 6.4.1. Calendar Columns
By default, all the activities are assumed to follow the standard 5-day calendar. Now,
you want to change the calendar for the supertask ‘Develop’ and all its subtasks to be
the Sixday calendar defined in the data set CALENDAR. Note that, in the calendar
definition, it is sufficient to specify that Saturday is a working day. All the other days
of the week default to the default calendar’s work pattern (see the “Default Calendar”
section on page 97 in Chapter 2, “The CPM Procedure”).
To facilitate the editing of the calendar values and to see the effect on the project
duration, reorder the columns (using the left mouse to drag the columns in the Ta-
ble Header) to display the activity, Activity Calendar, Calendar Name, and Duration
columns in the Table View. You may need to move the dividing line between the
Table and Gantt Views.
You can enter the Calendar values by typing in the number, 1, in the Activity Calendar
column or the value ‘Sixday’ in the Calendar Name column. You can also use the
Calendar pop-up menu in one of the calendar columns to select the desired calendar
(see Output 6.4.2). Note that the project duration has reduced to 22 days as a result
of the 6-day calendar.
Output 6.4.2. Effect of Sixday Calendar
To see the effect on the individual activities, change the units to “Days” in the Gantt
View and enlarge the Gantt View, as shown in Output 6.4.3.
Tester=.;
Programmer=.;
run;
Output 6.5.1 shows the Table and Gantt Views of the project after rearranging some
of the columns, moving the dividing line to show the resource columns, and bringing
the Resource Schedule bar into display. The Resource Schedule bar is shown be-
tween the Early Schedule bar and the Baseline Schedule bar. Note that the resource
schedule coincides with the early schedule because no resource requirements have
been specified for either of the two resources.
You can now use the Table View to enter the resource requirements for each task. Set
the requirement for the resource Tester to ‘1’ for the tasks ‘Document’ and ‘Test’,
and the requirement for the resource Programmer to ‘1’ for the tasks numbered ‘2’,
‘3’, ‘5’, and ‘6’. The resulting schedule is displayed in Output 6.5.2. In this view, the
baseline schedule is not displayed. You can see that several of the tasks have been
delayed, resulting in lengthening the project duration to 29 weekdays.
Output 6.5.2. Editing Resource Requirements
You can set the resource constrained schedule as a baseline to do some "what-if"
analysis. For example, suppose you would like to determine the effect of adding
another programmer to the project. In order to change the resource availability, you
need to save the current project, edit the Resource availability data set to add another
programmer, and then reinvoke the PM procedure.
First, in the PM Window displayed in Output 6.5.2, do the following:
datalines;
01jan99 1 2
;
Using the new resource availability, you reduced the project duration by 5 days. The
resulting schedule is displayed in Output 6.5.3, which also shows the baseline sched-
ule corresponding to the earlier resource availability data set.
Output 6.5.3. Comparison of Two Resource Schedules
The resulting display is shown in Output 6.6.1. The Gantt View now shows the Actual
Schedule bar between the Early Schedule bar and the Resource Schedule bar. It
also displays a Timenow Line. Since no progress information has been entered, the
Timenow Line is drawn at the beginning of the project and all the Actual Schedule
bars show only a handle that can be used to drag progress for a particular task.
Output 6.6.1. Adding Progress Information to Project
Drag the Timenow Line to update progress information for several tasks at
once. The actual start and finish times (until the Timenow date) are set assum-
ing that the tasks follow the resource constrained schedule. (If there are no
resource constraints, the tasks are assumed to follow the early schedule.)
Use the handle on the Actual Schedule bar for a given task to drag the progress
bar using the left mouse button.
Bring the Progress columns into view in the Table View and edit one of the
Progress columns.
As an example, use the left mouse button to drag the Timenow Line to the tick mark
corresponding to 15MAR99. The resulting window (after reordering and resizing
some columns and scrolling the Gantt View) is shown in Output 6.6.2.
Output 6.6.2. Moving the Timenow Line
Note that some of the activities are completed while others are still in progress. If the
project data are saved at this point, the Schedule data set will have all the Progress
variables (A– START, A– FINISH, PCT– COMP, and REM– DUR). However, for
the PM procedure to be able to recapture the exact state of the schedule as it was
saved, it also needs to know the value of TIMENOW when the project data was last
saved. This value (15Mar99 for the current example) is saved as a macro variable
named TIMENOW (see the “TIMENOW Macro Variable” section on page 660).
To see how the Actual information can be used from one invocation of PROC PM to
the other, save the project as displayed in Output 6.6.2 and then reinvoke PROC PM to
continue editing the progress information. Note that if you are using the PROJMAN
application, the value of TIMENOW is automatically saved by the application and
used in subsequent editing of the project.
Recall from the last invocation of PROC PM that the data are saved in the data set
SOFTOUT5. To use the saved progress information, invoke PROC PM as follows:
The preceding program displays the PM Window for the updated Software project.
Now use the Table View to edit some of the Progress columns. To do so, you can
either scroll to the Progress Columns or move these columns to the left in the Table
View using the appropriate selection from the “View” pull-down menu (Figure 6.8).
Task number 6 (‘Module 2’ under ‘Develop’) has a Remaining Duration value of 4.
At this point in time, you may notice that you have misjudged the amount of work
involved and that you need only one more day to finish the task. Enter 1 in the
Remaining Duration column. This editing change immediately causes the Percent
Complete column to update to 50, indicating that 50% of the work is completed. The
resulting effect on the project schedule is shown in Output 6.6.3 (the window has been
scrolled down to allow the second half of the project to be visible). Note that reducing
the duration of the ‘Module’ task did not affect the project end date. The duration
of the project is still 24 days. Studying the schedule of the ‘Document’ and ‘Test’
tasks, you notice that the delay to the project is caused by the fact that the resource-
constrained schedule of the task ‘Test’ is delayed due to resource constraints.
In addition to revising the progress information for ‘Module 2’, you also realize that
the ‘Document’ task is 50% complete as of the Timenow date. Edit the Percent Com-
plete column in the Table View, changing the value from 25.0 to 50.0. Immediately,
the Remaining Duration column changes to 2. The resulting window is shown in Out-
put 6.6.4. The project end date (for the resource constrained schedule) is 28Mar99.
Thus, the project duration is now reduced to 20 days.