*! *! DAYS360.ado Program to calculate elapsed days *! based on a 360 day year. *! *! Written 3/31/95 Ken Heinecke *! Updated 5/15/95 *! (dm33: STB-26) prog def days360 version 4.0 local options "Begdate(str) Enddate(str)" parse "`*'" quietly{ if ("`begdate'"==""){ noi di in red "Enter beginning date" exit 198 } if ("`enddate'"==""){ noi di in red "Enter ending date" exit 198 } *** Organize date information parse "`begdate'",parse( /-) local begy = `5' local begm = `1' local begd = `3' local bdate = mdy(`begm',`begd',`begy') parse "`enddate'",parse( /-) local endy = `5' local endm = `1' local endd = `3' local edate = mdy(`endm',`endd',`endy') if (`begy'<1000|`endy'<1000){ noi di in red "Years must be entered: CCYY" exit 198 } *** First count the number of full years specified. local i 1 local years 0 local break = 0 while (`begy'<`endy'&`break'==0){ local years = `i' local begy = `begy'+1 if (`begy'==`endy'){ if (`begm'<=`endm'){ if (`begm'==`endm'){ if (`begd'<=`endd'){ local bdate = mdy(`begm',`begd',`begy') local break = 1 } else{ local begy = `begy'-1 local bdate = mdy(`begm',`begd',`begy') local years = `years'-1 local break = 1 } } else{ local bdate = mdy(`begm',`begd',`begy') local break = 1 } } else{ local begy = `begy'-1 local bdate = mdy(`begm',`begd',`begy') local years = `years'-1 local break = 1 } } local i = `i'+1 } local years = `years'*360 *** Figure out how many days for 360 day adjustment. local begly = 0 local endly = 0 local adjust = 0 if (int(`begy'/4)==(`begy'/4)){local begly = -1} if (int(`endy'/4)==(`endy'/4)){local endly = -1} local i = `begm' local testy = `begy' while (`i'!=`endm'|`testy'<`endy'){ if (`i' == 1){ local adjust = `adjust'-1 } else if (`i'==2){ if (`testy'==`begy'){ local adjust = `adjust'+2+`begly' } else{ local adjust = `adjust'+2+`endly' } } else if (`i'==3){ local adjust = `adjust'-1 } else if (`i'==5){ local adjust = `adjust'-1 } else if (`i'==7){ local adjust = `adjust'-1 } else if (`i'==8){ local adjust = `adjust'-1 } else if (`i'==10){ local adjust = `adjust'-1 } else if (`i'==12){ local adjust = `adjust'-1 } if (`i'<12){ local i = `i'+1 } else if (`i'==12){ local i = 1 local testy = `testy'+1 } } *** Need to change adjustment variable if beginning date or *** ending date is the last day of a month. if (`begd'==31){ local adjust = `adjust'+1 } if (`begd'==28 & `begm'==2 & `begly'==0){ local adjust = `adjust'-2 } if (`begd'==29 & `begm'==2 & `begly'!=0){ local adjust = `adjust'-1 } if (`endd'==31 & `begd'<=30){ if (`begm'== 2){ if (`begly'==0 & `begd'==28){ local adjust = `adjust'-2 } if (`begly'!=0 & `begd'==29){ local adjust = `adjust'-1 } } else if (`begm'!=2){ if (`begd'==30){ local adjust = `adjust'-1 } } else{ local adjust = `adjust' } } if (`endd'==31 & `begd'==31){ local adjust = `adjust'-1 } global days = ((`edate'-`bdate')+`adjust')+`years' } ***END QUIETLY end