To follow is the code I'm using. It seems to be working fine with the exception of the .first variable data step. Thanks for any additional help.
/* Calculate the median wait times to initial LTC placement by type of LTCF and situation (i.e. community & hospital)*/
/* First pull wait offers which are actual placements */
proc format;
value MDS_LTCFACILITYTYPE
1='NH'
2='RCF'
3='CBO';
run;
data waitoffer;
set SEA_DM.MDS_WAITOFFER;
/* Keep if offer was accepted */
if MDS_WAITOFFERDECISION = 1;
/* Only interested in placements between for fiscal year in question */
WAITOFFERDECISIONDT = datepart(MDS_WAITOFFERDECISIONDT);
if WAITOFFERDECISIONDT >= mdy(4,1,2008) and WAITOFFERDECISIONDT < mdy(4,1,2009) then fy = '2008/09';
if fy NE ' ';
format WAITOFFERDECISIONDT date9.;
keep MDSRESID MDS_WAITREGISTRATIONNUM MDS_WAITOFFERNUM MDS_WAITOFFERDECISION WAITOFFERDECISIONDT
MDS_LTCFACILITYSEQNUM fy;
run;
proc sort data=waitoffer;
by MDSRESID WAITOFFERDECISIONDT MDS_WAITREGISTRATIONNUM;
run;
data waitoffer;
set waitoffer ;
by MDSRESID WAITOFFERDECISIONDT MDS_WAITREGISTRATIONNUM;
if first.MDSRESID then PLACEMENTTYPE = 'Initial Placement';
else PLACEMENTTYPE = 'Transfer';
run;
proc sort data=waitoffer nodupkey;
by MDSRESID;
run;
proc print data=waitoffer (obs=50);
run;
/*Determine placement situation (i.e. from Community, from Hopital or Transfer)*/
data waitregistration;
set SEA_DM.MDS_WAITREGISTRATION;
if datepart(MDS_CURRASSESSMENTDATE) = mdy(1,1,1900) then ASSESSMENTDATE = datepart(MDS_ASSESSMENTDATE);
else ASSESSMENTDATE = datepart(MDS_CURRASSESSMENTDATE);
ASSESSMENTDATE = datepart(MDS_ASSESSMENTDATE);
format ASSESSMENTDATE date9.;
/*transdate = datepart(MDS_WAITTRANSFERDATE);*/
if MDS_HOSPITALSEQUENCENUM = 0 then type = 'C';
if MDS_HOSPITALSEQUENCENUM NE 0 then type = 'H';
if MDS_WAITTRANSFERDATE > '1jan1900'd then type = 'T';
keep MDSRESID MDS_WAITREGISTRATIONNUM MDS_WAITTRANSFERDATE MDS_WAITLTCPRIORITY
ASSESSMENTDATE MDS_HOSPITALSEQUENCENUM type;
run;
proc sort data=waitoffer;
by MDSRESID MDS_WAITREGISTRATIONNUM;
run;
proc sort data=waitregistration;
by MDSRESID MDS_WAITREGISTRATIONNUM type;
run;
data waitplacements;
merge waitoffer(in=a) waitregistration;
by MDSRESID MDS_WAITREGISTRATIONNUM;
if a;
/* Don't keep post-facility transfers*/
if datepart(MDS_WAITTRANSFERDATE) = mdy(1,1,1900);
/* Have to be regular priority - no AP or Level 2 */
if MDS_WAITLTCPRIORITY = 3;
run;
/* Now merge the proper district onto the data */
data ltcfacility;
set SEA_DM.MDS_LTCFACILITY;
keep MDS_LTCFACILITYSEQNUM MDS_COMMUNITYSEQNUM MDS_LTCFACILITY MDS_LTCFACILITYTYPE;
run;
proc sort data=waitplacements;
by MDS_LTCFACILITYSEQNUM;
run;
proc sort data=ltcfacility;
by MDS_LTCFACILITYSEQNUM;
run;
data waitplacements;
merge waitplacements(in=a) ltcfacility;
by MDS_LTCFACILITYSEQNUM;
if a;
run;
data community;
set SEA_DM.MDS_COMMUNITY;
keep MDS_COMMUNITYSEQNUM MDS_DISTRICT;
run;
proc sort data=waitplacements;
by MDS_COMMUNITYSEQNUM;
run;
proc sort data=community;
by MDS_COMMUNITYSEQNUM;
run;
data waitplacements;
merge waitplacements(in=a) community;
by MDS_COMMUNITYSEQNUM;
if a;
run;
/* Now add LTC facility communities */
data ltccommunity;
set SEA_DM.MDS_COMMUNITY;
keep MDS_COMMUNITYSEQNUM MDS_COMMUNITY;
run;
proc sort data=ltccommunity;
by MDS_COMMUNITYSEQNUM;
run;
proc sort data=waitplacements;
by MDS_COMMUNITYSEQNUM;
run;
data waitplacements;
merge waitplacements(in=a) ltccommunity;
by MDS_COMMUNITYSEQNUM;
if a;
days = WAITOFFERDECISIONDT - ASSESSMENTDATE;
run;
proc freq data=waitplacements;
tables days;
run;
/* Data quality check */
data waitplacements;
set waitplacements;
/* Remove missing values for days (large integer) and negative wait times */
if days < 10000 and days >= 0;
run;
proc freq data=waitplacements;
tables days;
run;
/* Make final dataset*/
proc sort data=waitplacements;
by PLACEMENTTYPE MDS_LTCFACILITYTYPE MDS_DISTRICT MDS_LTCFACILITY;
run;
data waitplacements;
set waitplacements;
/*format MDS_LTCFACILITYTYPE;*/
keep MDSRESID PLACEMENTTYPE MDS_LTCFACILITYTYPE MDS_DISTRICT MDS_LTCFACILITY ASSESSMENTDATE WAITOFFERDECISIONDT MDS_WAITREGISTRATIONNUM MDS_COMMUNITY type days fy;
if PLACEMENTTYPE = 'Initial Placement';
run;
proc freq data=waitplacements;
run;
proc contents data=waitplacements;
run;
proc sort data=waitplacements;
by MDSRESID MDS_DISTRICT MDS_LTCFACILITYTYPE PLACEMENTTYPE type WAITOFFERDECISIONDT MDS_WAITREGISTRATIONNUM;
run;
proc means data=waitplacements n mean median std var;
var days;
by MDSRESID MDS_DISTRICT MDS_LTCFACILITYTYPE PLACEMENTTYPE WAITOFFERDECISIONDT MDS_WAITREGISTRATIONNUM/*type*/;
output out = waitmeans mean(days) = meandays median(days) = mediandays N(days) = placements;
run;
proc freq data=waitplacements;
tables PLACEMENTTYPE*MDS_DISTRICT*MDS_LTCFACILITYTYPE MDS_WAITREGISTRATIONNUM/*type*//nocol norow nopercent;
run;
proc print data=waitmeans;
run;