Chapter Contents |
Previous |
Next |
Introduction to Project Management |
It is easy to set up cost accounting systems using the output data sets produced by PROC CPM, whether costs are associated with activities or with resources. In fact, you can even treat cost as a consumable resource if you can estimate the cost per day for each of the activities (see Chapter 2, "The CPM Procedure," for details on resource allocation and types of resources). This example illustrates such a method for monitoring costs and shows how you can compute some of the standard cost performance measures used in project management.
The following three measures can be used to determine if a project is running on schedule and within budget (see Moder, Phillips, and Davis 1983, for a detailed discussion on project cost control):
Consider the survey example described earlier in this chapter. Suppose that it is possible to estimate the cost per day for each activity in the project. The following data set survcost contains the project data (activity, succ1 -succ3, id, duration) and a variable named cost containing the cost per day in dollars. In order to compute the BCWS for the project, you need to establish a baseline schedule. Suppose the early start schedule computed by PROC CPM is chosen as the baseline schedule. The Resource data set costavl establishes cost as a consumable resource, so that the CPM procedure can be used to accumulate costs (using the CUMUSAGE option).
The following program invokes PROC CPM with the RESOURCE statement and saves the Usage data set in survrout. The variable ecost in this Usage data set contains the cumulative expense incurred for the baseline schedule; this is the same as the budgeted cost of work scheduled (or BCWS) saved in the data set basecost.
data survcost; input id $ 1-20 activity $ 22-29 duration succ1 $ 34-41 succ2 $ 43-50 succ3 $ 52-59 cost; datalines; Plan Survey plan sur 4 hire per design q 300 Hire Personnel hire per 5 trn per 350 Design Questionnaire design q 3 trn per select h print q 100 Train Personnel trn per 3 cond sur 500 Select Households select h 3 cond sur 300 Print Questionnaire print q 4 cond sur 250 Conduct Survey cond sur 10 analyze 200 Analyze Results analyze 6 500 ; data holidata; format hol date7.; hol = '3jul98'd; run; data costavl; input per date7. otype $ cost; format per date7.; datalines; . restype 2 1jul98 reslevel 12000 ; proc cpm date='1jul98'd interval=weekday data=survcost resin=costavl holidata=holidata out=sched resout=survrout; activity activity; successor succ1-succ3; duration duration; holiday hol; id id; resource cost / period = per obstype = otype cumusage; run; data basecost (keep = _time_ bcws); set survrout; bcws = ecost; run;Suppose that the project started as planned on July 1, 1998, but some of the activities took longer than planned and some of the cost estimates were found to be incorrect. The following data set, actual, contains updated information: the variables as and af contain the actual start and finish times of the activities that have been completed or are in progress. The variable actcost contains the revised cost per day for each activity. The following program combines this information with the existing project data and saves the result in the data set update, displayed in Output 1.8.1. The Resource data set costavl2 (also displayed in Output 1.8.1) defines cost and actcost as consumable resources.
data actual; input id $ 1-20 as date9. af date9. actcost; format as af date7.; datalines; Plan Survey 1JUL98 8JUL98 275 Hire Personnel 9JUL98 15JUL98 350 Design Questionnaire 10JUL98 14JUL98 150 Train Personnel 16JUL98 17JUL98 800 Select Households 15JUL98 17JUL98 450 Print Questionnaire 15JUL98 20JUL98 250 Conduct Survey 21JUL98 . 200 ; data update; merge survcost actual; run; title 'Activity Data Set UPDATE'; proc print; run; data costavl2; input per date7. otype $ cost actcost; format per date7.; datalines; . restype 2 2 1jul98 reslevel 12000 12000 ; title 'Resource Data Set COSTAVL2'; proc print; run;Output 1.8.1: Project Cost Control: Progress Update
proc cpm date='1jul98'd interval=weekday data=update resin=costavl2 out=updsched resout=updtrout holidata=holidata; activity activity; successor succ1-succ3; duration duration; holiday hol; id id; resource cost actcost / per = per obstype = otype maxdate = '21jul98'd cumusage; actual / a_start=as a_finish=af; run; title 'Updated Schedule: Data Set UPDSCHED'; proc print data=updsched; run; data updtcost (keep = _time_ bcwp acwp); set updtrout; bcwp = ecost; acwp = eactcost; run; /* Create a combined data set to contain the BCWS, BCWP, ACWP */ /* per day and the cumulative values for these costs. */ data costs; merge basecost updtcost; run; title 'BCWS, BCWP, and ACWP'; proc print data=costs; run;Output 1.8.2: Project Cost Control: Updated Schedule
|
|
Note: BCWS, BCWP, and ACWP are three of the cost measures used as part of Earned Value Analysis, which is an important component of the Cost/Schedule Control Systems Criteria (referred to as C/SCSC) that was established in 1967 by the Department of Defense (DOD) to standardize the reporting of cost and schedule performance on major contracts. Refer to Fleming (1988) for a detailed discussion of C/SCSC. Similar methods, such as the ones described in this example, can be used to calculate all the relevant measures for analyzing cost and schedule performance.
/* Plot the cumulative costs */ data costplot (keep=date dollars id); set costs; format date date7.; date = _time_; if bcws ^= . then do; dollars = BCWS; id = 1; output; end; if bcwp ^= . then do; dollars = BCWP; id = 2; output; end; if acwp ^= . then do; dollars = ACWP; id = 3; output; end; run; legend1 frame value=(f=swiss c=black j=l f=swiss 'BCWS' 'BCWP' 'ACWP') label=(f=swiss c=black); axis1 width=2 order=('1jul98'd to '1aug98'd by week) length=60 pct value=(f=swiss c=black) label=(f=swiss c=black); axis2 width=2 order=(0 to 12000 by 2000) length = 55 pct value=(f=swiss c=black) label=(f=swiss c=black); symbol1 i=join v=none c=green w=4 l=1; symbol2 i=join v=none c=blue w=4 l=2; symbol3 i=join v=none c=red w=4 l=3; title f=swiss c=black 'Comparison of Costs'; proc gplot data=costplot; plot dollars * date = id / legend=legend1 haxis=axis1 vaxis=axis2; run;Output 1.8.4: Plot of BCWS, BCWP, and ACWP
Chapter Contents |
Previous |
Next |
Top |
Copyright © 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.