The CPM Procedure


The RESOURCEOUT= data set (referred to as the Usage data set) contains information about the resource usage for the resources specified in the RESOURCE statement. The options ALL, AVPROFILE, ESPROFILE, LSPROFILE, and RCPROFILE (each is discussed earlier in the section RESOURCE Statement) control the number of variables that are to be created in this data set. The ROUTINTERVAL= and ROUTINTPER= options control the number of observations that this data set is to contain. Of the options controlling the number of variables, AVPROFILE and RCPROFILE are allowed only if the procedure is used to obtain a resource-constrained schedule.

The Usage data set always contains a variable named _TIME_ that specifies the date for which the resource usage or availability in the observation is valid. For each of the variables specified in the RESOURCE statement, one, two, three, or four new variables are created depending on how many of the four possible options (AVPROFILE, ESPROFILE, LSPROFILE, and RCPROFILE) are in effect. If none of these four options is specified, the ALL option is assumed to be in effect. Recall that the ALL option is equivalent to specifying ESPROFILE and LSPROFILE when PROC CPM is used to obtain an unconstrained schedule, and it is equivalent to specifying all four options when PROC CPM is used to obtain a resource-constrained schedule.

The new variables are named according to the following convention:

  • The prefix A is used for the variable describing the resource availability profile.

  • The prefix E is used for the variable denoting the early start usage.

  • The prefix L is used for the variable denoting the late start usage.

  • The prefix R is used for the variable denoting the resource-constrained usage.

The suffix is the name of the resource variable if the name is less than the maximum possible variable length (which is dependent on the VALIDVARNAME option). If the length of the name is equal to this maximum length, the suffix is formed by deleting the character following the (n/2)th position. The user must ensure that this naming convention results in unique variable names in the Usage data set.

The ROUTINTERVAL=routinterval and ROUTINTPER=routintper options specify that two successive values of the _TIME_ variable differ by routintper number of routinterval units, measured with respect to a specific calendar. If the routinterval is not specified, PROC CPM selects a default value depending on the format of the start and finish variables in the Schedule data set. The value of routinterval is indicated in a message written to the SAS log.

The MINDATE=mindate and MAXDATE=maxdate options specify the minimum and maximum values of the _TIME_ variable, respectively. Thus, the Usage data set has observations containing the resource usage information from mindate to maxdate with the time interval between the values of the _TIME_ variable in two successive observations being equal to routintper units of routinterval, measured with respect to a specific calendar. For example, if routinterval is MONTH and routintper is 3, then the time interval between successive observations in the Usage data set is three months.

The calendar used for incrementing the _TIME_ variable is specified using the AROUTCAL= or NROUTCAL= options depending on whether the calendars for the project are specified using alphanumeric or numeric values, respectively. In the absence of either of these specifications, the default calendar is used. For example, if the default calendar follows a five-day work week and ROUTINTERVAL=DAY, the Usage data set will not contain observations corresponding to Saturdays and Sundays. You can also use the ROUTNOBREAK option to indicate that there should be no breaks in the _TIME_ values due to breaks or holidays.

Interpretation of Variables

The availability profile indicates the amount of resources available at the beginning of the time interval specified in the _TIME_ variable, after accounting for the resources used through the previous time period.

By default, each observation in the Resource Usage data set indicates the rate of resource usage per unit routinterval at the start of the time interval specified in the _TIME_ variable. Note that replenishable resources are assumed to be tied to an activity during any of the activity’s breaks or holidays that fall in the course of the activity’s duration. For consumable resources, you can use the CUMUSAGE option to obtain cumulative usage of the resource, instead of daily rate of usage. Often, it is more useful to obtain cumulative usage for consumable resources.

You can use the TOTUSAGE option on the RESOURCE statement to get the total resource usage for each resource within each time period. If you wish to obtain both the rate of usage and the total usage for each time period, use the APPEND option on the RESOURCE statement.

The following example illustrates the default interpretation of the new variables.

Suppose that for the data given earlier (see the section Specifying Resource Requirements), activities 'A' and 'B' have S_START equal to 1JUL04 and 5JUL04, respectively. If the RESOURCE statement has the options AVPROFILE and RCPROFILE, the Usage data set has these five variables, _TIME_, RWORKERS, AWORKERS, RBRICKS, and ABRICKS. Suppose further that routinterval is DAY and routintper is 1. The Usage data set contains the following observations:


1JUL04        0           0         100        1000
2JUL04        0           0         100         900
3JUL04        0           0         100         800
4JUL04        0           0         100         700
5JUL04        2           2         100         600
6JUL04        2           2          0          500
7JUL04        2           2          0          500
8JUL04        2           2          0          500
9JUL04        0           4          0         1000

On each day of activity A’s duration, the resource BRICKS is consumed at the rate of 100 bricks per day. At the beginning of the first day (July 1, 2004), all 1000 bricks are still available. Each day the availability drops by 100 bricks, which is the rate of consumption. On July 5, activity 'B' is scheduled to start. On the four days starting with July 5, the value of RWORKERS is '2', indicating that 2 workers are used on each of those days leaving an available supply of 2 workers (AWORKERS is equal to '2' on all 4 days).

If ROUTINTPER is set to 2, and the CUMUSAGE option is used, then the observations would be as follows:


1JUL04        0           0           0        1000
3JUL04        0           0         200         800
5JUL04        2           2         400         600
7JUL04        2           2         500         500
9JUL04        0           4         500        1000

The value of RBRICKS indicates the cumulative usage of the resource BRICKS through the beginning of the date specified by the value of the variable _TIME_ in each observation. That is why, for example, RBRICKS = 0 on 1JUL04 and not 200.

If the procedure uses supplementary levels of resources, then, on a day when supplementary levels of resources were used through the beginning of the day, the value for the availability profile for the relevant resources would be negative. The absolute magnitude of this value would denote the amount of supplementary resource that was used through the beginning of the day. For instance, if ABRICKS is '$-$100' on 11JUL04, it would indicate that 100 bricks from the supplementary reservoir were used through the end of July 10, 2004. See Example 4.16, Using Supplementary Resources, and Example 4.17, INFEASDIAGNOSTIC Option and Aggregate Resource Type.

If, for the same data, ROUTINTPER is 2, and the APPEND option is specified, the Usage data set would contain two sets of observations, the first indicating the rate of resource usage per day, and the second set indicating the product of the rate and the time interval between two successive observations. The observations (five in each set) would be as follows:

        _TIME_    OBS_TYPE    RWORKERS    RBRICKS      
       01JUL04    RES_RATE        0         100        
       03JUL04    RES_RATE        0         100        
       05JUL04    RES_RATE        2         100        
       07JUL04    RES_RATE        2           0        
       09JUL04    RES_RATE        0           0        
       01JUL04    RES_USED        0         200        
       03JUL04    RES_USED        0         200        
       05JUL04    RES_USED        4         100        
       07JUL04    RES_USED        4           0        
       09JUL04    RES_USED        0           0        

Variable Usage Profile for Consumable Resources

For consumable resources that have a variable usage profile (as indicated by the values 1 or 2 for observations of type RESUSAGE in the Resource data set), the values of the usage variables indicate the amount of the resource consumed by an activity at the beginning or end of the activity. For example, consider the resources PAYMENT and ADVANCE specified in the following Resource data set:

  1    RESTYPE     .           1         2        2        2
  2    RESUSAGE    .           .         .        2        1
  3    RESLEVEL  1JUL2004      4      1000     2000      500

Suppose the activity 'Task 1', specified in the following observation, is scheduled to start on July 1, 2004:


 1     Task 1      5        1         100     1000      200

For these data, the resource usage profile for the resources will be as indicated in the following output:


   1JUL04        1        100          0        200
   2JUL04        1        100          0          0
   3JUL04        1        100          0          0
   4JUL04        1        100          0          0
   5JUL04        1        100          0          0
   6JUL04        0          0       1000          0