The basic steps necessary to schedule a project are illustrated using
a simple example. Consider a software development
project in which an applications developer has the software
ready for preliminary testing. In order to complete the project, several
activities must take place. Certain activities cannot start until
other activities have finished. For instance, the preliminary
documentation must be written before it can be revised and edited and
before the Quality Assurance department (QA) can test the software.
among the activities (namely, activity B can start after activity A has
finished) are referred to as precedence constraints. Given the
precedence constraints and estimated durations of the activities, you can
use the critical path method to determine
the shortest completion time for
Figure 2.1: Activity-On-Arc Network
The first step in determining project completion time is to
capture the relationships between the activities in a convenient
representation. This is done by using a network diagram. Two types
of network diagrams are popular for representing a project.
Figure 2.2: Activity-On-Node Network
The AON representation of the network is used in the remainder of this
section to illustrate some of the features of PROC CPM. The project data
are input to PROC CPM using a SAS data set. The basic project
information is conveyed to PROC CPM via the ACTIVITY,
SUCCESSOR, and DURATION statements.
Each observation of the Activity data set
specifies an activity in the project,
its duration, and its immediate successors. PROC CPM enables you to
specify all of the immediate successors in the same observation, or you
can have multiple observations for each activity, listing each
successor in a separate observation. (Multiple variables in
the SUCCESSOR statement
are used here). PROC CPM enables you to use long activity names. In this
example, shorter names are used for the activities to facilitate data
entry; a variable, Descrpt, is used to specify a longer description
for each activity.
Among other things, the procedure determines
- the minimum time in which the project can be completed
- the set of activities that is critical to the
completion of the project in the minimum amount of time.
No displayed output is produced. However, the results are saved in an
output data set (the Schedule data set) that is shown in Figure 2.3.
The code for the entire program is as follows:
input Descrpt $char20.
Activity $ 27-34
Succesr1 $ 37-44
Succesr2 $ 47-54;
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 cpm data=software
successor succesr1 succesr2;
title 'Project Schedule';
proc print data=intro1;
Figure 2.3: Software Project Plan
||QA Test Approve
||Doc. Edit and Revise
In addition to the variables specified in the ACTIVITY, SUCCESSOR,
DURATION, and ID statements, the
output data set contains the following new variables.
- specifies the earliest time an activity
can begin, subject to any time constraints and the completion
time of the preceding activity.
- specifies the earliest time an
activity can be finished, assuming it starts at E_START.
- specifies the latest time an activity can
begin so that the project is not delayed.
- specifies the latest time an
activity can be finished without delaying
- specifies the amount of flexibility
in the starting of a specific
activity without delaying the project:
T_FLOAT = L_START - E_START = L_FINISH - E_FINISH
- specifies the difference between the early finish
time of the activity and the early start time of
the activity's immediate successors.
In Figure 2.3 the
majority of the tasks have a total float value of 0.
These events are critical; that is,
any delay in these activities
will cause the project to be delayed. Some of the activities have
slack present, which means that they can be delayed by that amount without
affecting the project completion date. For example, the activity MEETMKT
has a slack period of 19 days because there are 19 days between
01MAR92 and 20MAR92.
The INTERVAL= option in the PROC CPM statement
enables you to specify the durations of the activities in
one of several possible units including days, weeks, months, hours, and
minutes. In addition, you can schedule activities around weekends
and holidays. (To skip weekends, you specify INTERVAL=WEEKDAY.) You can
also choose different patterns of work during a day
or a week (holidays on Friday and Saturday) and
different sets of holidays for the different activities in the project.
A calendar consists of a set of work schedules for a typical week and
a set of holidays. PROC CPM enables you to define any number of calendars
and associate different activities with different calendars.
In the previous example, you saw that you could schedule your
project by choosing a project start
date. You can also specify a project finish date if you have a
deadline to be met and you need to determine the latest start
times for the different activities in the project.
You can also set constraints on start or finish dates for
specific activites within a given project as well. For example,
testing the software may have to be delayed
until the testing group finishes another project that has a higher
priority. PROC CPM can schedule
the project subject to such restrictions through the use of the
ALIGNDATE and ALIGNTYPE statements.
See Example 2.12 for more
information on the use of the ALIGNDATE
and ALIGNTYPE statements.
For a project that is already
in progress, you can incorporate the actual schedule of the
activities (some activities may already be completed while others
may still be in progress) to obtain a progress update. You can save
the original schedule as a baseline schedule and use it to
compare against the current schedule to
determine if any of the activities have taken longer than anticipated.
Quite often the resources needed to perform the activities in a
project are available only in limited quantities and may cause
certain activities to be postponed due to unavailability of the
required resources. You can use PROC CPM to schedule the activities in
a project subject to resource constraints. A wide range of options
enables you to control the scheduling process. For example, you
can specify resource or activity priorities, set constraints on the
maximum amount of delay that can be tolerated for a given activity,
allow activities to be preempted, specify alternate resources
that can be used instead of scarce resources, or indicate secondary
levels of resources that can be used when the primary levels are
When an activity requires multiple resources, it is possible
that each resource may follow a different calendar and each may
require varying amounts of work. PROC CPM enables you to define
resource-driven durations for the activities. You can also specify
calendars for the resources. In either of these situations it is possible
that each resource used by an activity may have its own individual
schedule. PROC CPM enables you to save the resource schedules for the
different activities in a Resource Schedule data set, the RESOURCESHCED=
In addition to obtaining
a resource-constrained schedule in an output data set, you can save the
resource utilization summary in another output data set,
the RESOURCEOUT= data set. Several options enable you to control the
amount of information saved in this data set.
The CPM procedure enables you to define activities in a
multiproject environment with multiple levels of nesting. You can
specify a PROJECT variable that identifies the name or number
of the project to which each activity belongs.
All the options available with the CPM procedure are discussed in
detail in the following sections. Several examples illustrate most
of the features.
Copyright © 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.