Re: Excluding Specific Dates in Length of Stay

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: Excluding Specific Dates in Length of Stay

ariel barak
Everybody,

I thought the list might want to see the resolution to my issue. I wanted to
calculate the different between two times but wanted to drop the time on
weekends and holidays. Here is the syntax that works. I received several
helpful e-mails from the list although the syntax below was a variation of
Raynald's syntax. Thanks to all!

-Ariel


data list / date1 1-20 (DATETIME20) date2 22-41 (DATETIME20) .
begin data
18-JAN-2005 23:59:00 20-JAN-2005 00:01:00
01-JAN-2005 11:59:00 31-JAN-2005 18:00:00
15-DEC-2004 00:01:00 05-JAN-2005 23:59:00
04-JAN-2005 11:25:00 10-JAN-2005 12:35:00
01-JAN-2004 18:00:00 06-JAN-2004 18:00:00
25-DEC-2004 19:42:31 20-JAN-2005 14:34:25
end data.

*Just a baseline normal number of days* .
COMPUTE DAYS =CTIME.DAYS(date2-date1).


*Note dates are stored in seconds, 86400 per day*.
*Calculate the time until midnight on admitdate if it is not a weekend or
holiday *.
COMPUTE GAP1=0.
If RANGE(XDATE.WKDAY(date1),2,6) & ~ANY(XDATE.DATE(date1),
 DATE.DMY(24,12,2004),
 DATE.DMY(25,12,2004),
 DATE.DMY(1,1,2005),
 DATE.DMY(17,1,2005)
 )
GAP1=86400-XDATE.HOUR(date1)*3600-XDATE.MINUTE(date1)*60-XDATE.SECOND
(date1).
EXE.

*Calculate the time since midnight on releasdate if it is not a weekend or
holiday *.
COMPUTE GAP2=0.
IF RANGE(XDATE.WKDAY(date2),2,6) &~ANY(XDATE.DATE(date2) ,
 DATE.DMY(24,12,2004),
 DATE.DMY(25,12,2004),
 DATE.DMY(1,1,2005),
 DATE.DMY(17,1,2005)
 )
GAP2=XDATE.HOUR(date2)*3600+XDATE.MINUTE(date2)*60+XDATE.SECOND(date2).
EXE.

*Calculate the number of full days in between the admit and release date
that are not
holidays or weekends*.
COMPUTE GAP=0.
LOOP #=(date1 + GAP1) to (date2 - ( 86400 + GAP2 )) BY 86400.
IF RANGE(XDATE.WKDAY(#),2,6) &~ANY(XDATE.DATE(#) ,
 DATE.DMY(24,12,2004),
 DATE.DMY(25,12,2004),
 DATE.DMY(1,1,2005),
 DATE.DMY(17,1,2005)
 )
GAP=GAP+86400.
END LOOP.
EXE.

COMPUTE LOSdays=(GAP1+GAP2+GAP)/86400.
EXE.



On 5/25/06, ariel barak <[hidden email]> wrote:

>
>  Hello everyone,
>
> After a more thorough search and a few responses from listserv members, I
> found syntax that is almost exactly what I am looking for. The second data
> set that I spoke about in my first post now may be unnecessary. I pasted the
> syntax below and it is fro m Raynalds SPSS Tools<http://www.spsstools.net/SampleSyntax.htm#DatesAndTimes>. I changed the dummy data to my example and inserted a few 2005
> holidays. The syntax below is to find the number of elapsed weekdays in
> between two dates (see sample data) excluding public holidays but I would
> like to calculate the number of elapsed seconds in between two dates
> (01-JAN-2005 12:00:00 to 31-Jan-2005 18:00:00) excluding public holidays so
> that I can convert to hours, minutes, etc.
>
> Can anybody adjust the syntax below to account for this difference?
>
> The correct difference for the two dates I provided above should be
> 1,706,400 seconds or 19.75 days to account for the weekends as well as
> Martin Luther King Jr. Day on January 17th.
>
> If I use the data entered in DATETIME format as below, the syntax doesn't
> seem to account properly for the holiday i.e. with the ADATE format, the
> output is 20 days and with the DATETIME format, the output is 21 days :
>
> Thanks in advance to anyone who tries to help with this problem.
>
> data list / date1 1-20 (DATETIME20) date2 22-41 (DATETIME20) .
> begin data
> 01-JAN-2005 12:00:00 31-JAN-2005 18:00:00
> end data.
>
> * Here is a way to compute elapsed weekdays excluding Public Holidays *.
> * Raynald Levesque Summer 2002.
>
> data list / date1 1-10 (ADATE) date2 12-21 (ADATE) .
> begin data
> 01/01/2005 01/31/2005
> end data.
>
> * Just a baseline normal number of days* .
> COMPUTE DAYS =CTIME.DAYS(date2-date1).
>
> *Note dates are stored in seconds, 86400 per day * .
> COMPUTE WKDAYS=0.
> LOOP #=date1 to date2 BY 86400.
> * You have to add all applicable public holidays in next ANY command
> below.
> If RANGE(XDATE.WKDAY(#),2,6) & ~ANY(#,
>           DATE.DMY(1,1,2005),
>           DATE.DMY(1,17,2005),
>           DATE.DMY(25,12,2005)
>           )
>           WKDAYS=WKDAYS +1.
> END LOOP.
>
> list.
>
>
> On 5/24/06, ariel barak <[hidden email] > wrote:
> >
> >  Fellow Subscribers,
> >
> > Background and Goal: I am attempting to calculate a length of stay for
> > individuals sent to detention facilities excluding holiday and weekend days
> > for 2005.
> >
> > Data: There are 2 data files. The first is about 10,000 admissions that
> > have variables titled AdmitDate and ReleaseDate both in dd-mmm-yyyy hh:mm:ss
> > format. This file is titled charges.sav. The second data file is a list
> > of the holiday and weekend days in 2004 and 2005 whose time should be
> > subtracted from the length of stay also in DATETIME20 format. This file
> > is titled excludeddays.sav.
> >
> > Additional Complications: Although it may be easier to only create the
> > length of stay based on 2005 admissions, guidelines are to calculate the
> > length of stay for any individual in a detention facility during the 2005
> > calendar year. This means that I have to calculate the length of stay for
> > those who were admitted in 2004 and released in 2005.
> >
> > Problem: I don't know how to exclude the holiday and weekend hours from
> > the length of stay.
> >
> > How can I solve this problem? Any help would be greatly appreciated : )
> >
>
>