This example demonstrates the capability of the %SASTOMSP macro to handle multiple calendars within a project. Each activity is associated with one of four available calendars. Each calendar is customized to incorporate various workday shift patterns. In addition, there is a holiday data set that is also appropriately associated with a calendar. The four different calendars are defined as follows:
The DEFAULT calendar has five eight-hour days (Monday through Friday) and holidays on Saturday and Sunday.
The calendar OVT_CAL specifies an overtime calendar that has 10-hour workdays on Monday through Friday, a half-day on Saturday, and a holiday on Sunday.
The calendar PROD_CAL follows a more complicated work pattern: Sunday is a holiday; on Monday work is done from 8 a.m. through midnight with a two hour break from 6 p.m. to 8 p.m.; on Tuesday through Friday work is done round the clock with two 2-hour breaks, one from 6 a.m to 8 a.m and the other from 6 p.m. to 8 p.m.; on Saturday the work shifts are from midnight to 6 a.m. and again from 8 a.m. to 6 p.m.
The calendar ENG_CAL is specified similar to the default calendar, but with an extra vacation period of 7 days beginning on December 8.
The following data set contains the activity information:
data actdat; format activities $12. s1-s3 $12. cal $8.; input activities & days s1 & s2 & s3 & cal &; datalines; Approve Plan 5 Drawings Study Market Write Specs DEFAULT Drawings 10 Prototype . . DEFAULT Study Market 5 Mkt. Strat. . . DEFAULT Write Specs 5 Prototype . . ENG_CAL Prototype 15 Materials Facility . OVT_CAL Mkt. Strat. 10 Test Market Marketing . DEFAULT Materials 10 Init. Prod. . . DEFAULT Facility 10 Init. Prod. . . DEFAULT Init. Prod. 10 Test Market Marketing Evaluate DEFAULT Evaluate 10 Changes . . DEFAULT Test Market 15 Changes . . DEFAULT Changes 5 Production . . DEFAULT Production 0 . . . PROD_CAL Marketing 0 . . . DEFAULT ;
The next three data sets specify the work shift patterns, calendars, and holidays, respectively:
data wrkdat;
input fullday time8. halfday time8. ovtday time8.
d1 time8. d2 time8. d3 time8.;
format fullday halfday ovtday d1 d2 d3 time6.;
datalines;
08:00 08:00 08:00 . 08:00 .
16:00 12:00 18:00 06:00 18:00 06:00
. . . 08:00 20:00 08:00
. . . 18:00 . 18:00
. . . 20:00 . .
. . . . . .
;
data caldat; input cal $ _sun_ $ _mon_$ _tue_$ _wed_$ _thu_$ _fri_$ _sat_ $; datalines; DEFAULT holiday fullday fullday fullday fullday fullday holiday OVT_CAL holiday ovtday ovtday ovtday ovtday ovtday halfday PROD_CAL holiday d2 d1 d1 d1 d1 d3 ENG_CAL . . . . . . . ;
data holdat; format holiday holifin date7.; input holiday & date7. holifin & date7. holidur cal $; datalines; 08Dec06 . 7 ENG_CAL 24Dec06 26Dec06 . . 01Jan07 01Jan07 . . ;
You can view the resulting project schedule in the PM window with the following call:
proc pm date='01Dec06'd data=actdat
calendar=caldat holidata=holdat
workday=wrkdat
daylength='08:00't;
activity activities;
duration days;
successor s1 s2 s3;
calid cal;
holiday holiday / holifin = holifin holidur=holidur;
run;
The resulting PM window is shown in Output 6.7.1.
Output 6.7.1: PM Window

To convert the preceding data to an MDB file that includes the calendar and holiday information, you can use the following call to %SASTOMSP:
%sastomsp(mdbfile=mspref,
actds=actdat, calds=caldat,
holds=holdat, workds=wrkdat,
_date='1Dec06'd,
_daylength='08:00't,
_activity=activities,
_dur=days,
_successor=s1 s2 s3,
_calid=cal,
_holistart=holiday, _holiend=holifin, _holidur=holidur)
The resulting MS Project Window is shown in Output 6.7.2. The schedule is the same as the one produced by the PM procedure.
Output 6.7.2: MS Project Window
