* CREATE NUMBER OF DAYS ON SICKNESS BENEFITS PER PERSON-YEAR * cap program drop sickleave program define sickleave preserve * 1986-1989 forval y=1986/1989 { use "Sjukfall_`y'.dta", clear rename LopNr lopnr destring lopnr, replace keep lopnr HFROM HTOM duplicates drop rename HFROM FROM rename HTOM TOM foreach var in FROM TOM { gen date_`var'=dofc(`var') gen year_`var' = year(date_`var') gen month_`var' = month(date_`var') gen day_`var' = day(date_`var') } sort lopnr merge m:1 lopnr using "persid_`1'.dta" keep if _merge==3 drop _merge sort lopnr save "sjukfall_`y'.dta", replace } * 1990-1993 forval y=1990/1993 { use "Sjukfall_`y'.dta", clear rename LopNr lopnr destring lopnr, replace keep lopnr FANM FAFLFROM FAFLTOM duplicates drop drop FAFLFROM rename FANM FROM rename FAFLTOM TOM foreach var in FROM TOM { gen date_`var'=dofc(`var') gen year_`var' = year(date_`var') gen month_`var' = month(date_`var') gen day_`var' = day(date_`var') } sort lopnr merge m:1 lopnr using "persid_`1'.dta" keep if _merge==3 drop _merge sort lopnr save "sjukfall_`y'.dta", replace } * 1994- use "sjp_delfall_200809", clear rename LOPNRFK lopnr destring lopnr, replace keep lopnr FALL_FROM_DATUM FALL_TOM_DATUM rename FALL_FROM_DATUM FROM rename FALL_TOM_DATUM TOM duplicates drop foreach var in FROM TOM { gen date_`var'=dofc(`var') gen year_`var' = year(date_`var') gen month_`var' = month(date_`var') gen day_`var' = day(date_`var') } sort lopnr destring lopnr, replace merge m:1 lopnr using "persid_`1'.dta" keep if _merge==3 drop _merge sort lopnr save "sjp_delfall_200809.dta", replace * append all years use "sjukfall_1986.dta", clear forval y=1987/1993 { append using "sjukfall_`y'.dta" } append using "sjp_delfall_200809.dta", save "sjukfall_8608.dta", replace * drop spells ending before 1986: drop if year_TOM<1986 gen from=mdy(month_FROM, day_FROM, year_FROM) format from %td gen tom=mdy(month_TOM, day_TOM, year_TOM) format tom %td * drop duplicate spells duplicates drop lopnr FROM TOM, force * handle overlapping spells gen indate=mdy(month_FROM, day_FROM, year_FROM) gen outdate=mdy(month_TOM, day_TOM, year_TOM) local k=1 local j=_N while `k'<`j' { local j=_N gsort lopnr indate - outdate by lopnr: drop if indate[_n]>=indate[_n-1] & outdate<=outdate[_n-1] /// & _n>1 by lopnr: replace indate=outdate[_n-1]+1 if indate[_n]outdate[_n-1] & _n>1 local k=_N } drop from tom rename indate from format from %td rename outdate tom format tom %td save "sjukfall_`1'.dta", replace * calculate no of days on sickness absence per person-year: forval y=1986/2008 { gen double start_`y'=mdy(1, 1, `y') format start_`y' %td } forval y=1986/2008 { gen double end_`y'=mdy(12, 31, `y') format end_`y' %td } * sickdays per year 1986-2008 forval y=1986/2008 { gen sjp_`y'=cond(from>=start_`y' & tom<=end_`y', tom-from+1, 0) * case 1: drop error-coded negative spells replace sjp_`y'=0 if sjp_`y'<0 * case 2: start-date within year, end-date after year replace sjp_`y'=cond(from>=start_`y' & tom>end_`y', end_`y'-from+1, /// sjp_`y') replace sjp_`y'=0 if sjp_`y'<0 * case 3: start-date earlier than year, end-date within year replace sjp_`y'=cond(fromend_`y', /// end_`y'-start_`y'+1, sjp_`y') replace sjp_`y'=0 if sjp_`y'<0 } drop start_* end_* * sum days per individual: forval y=1986/2008 { bysort lopnr: egen sickdays`y'=sum(sjp_`y') } * save one obs per individual bysort lopnr: gen smalln=_n keep if smalln==1 keep lopnr sickdays* * convert data to long format reshape long sickdays, i(lopnr) j(year) replace sickdays=365 if sickdays>365 qui compress sort lopnr year destring lopnr, replace save "sdays_`1'.dta", replace restore end