*analysis 1 use intuss, clear set more off *generate the age group cut points gen cutp3 = 57 gen cutp4 = 87 gen cutp5 = 117 gen cutp6 = 148 gen cutp7 = 179 gen cutp8 = 210 gen cutp9 = 241 gen cutp10 = 272 gen cutp11 = 303 gen cutp12 = 334 *number of age group cut points local nage = 10 *generate the exposure group cut points gen cutp13 = agep3 + 13 gen cutp14 = agep3 + 27 gen cutp15 = agep3 + 41 drop agep1 agep2 agep3 sex *create a comma separated list of age group cut points local a=cutp3 local b=`nage'+2 while `b'>3{ local c = cutp`b' local d = ",`c'`d'" local b = `b' - 1 } local a = "`a'`d'" foreach var of varlist cutp*{ replace `var' = cutp1 if `var' < cutp1 replace `var' = cutp2 if `var' > cutp2 } compress sort indiv eventday reshape long cutp, i(indiv eventday) j(type) sort indiv eventday cutp type *number of adverse events within each interval by indiv: generate int nevents = 1 if eventday > cutp[_n-1]+0.5 & eventday <= cutp[_n]+0.5 collapse (sum) nevents, by(indiv cutp type) *intervals by indiv: generate int interval = cutp[_n] - cutp[_n-1] *age groups by indiv: generate int agegr = irecode(cutp, `a') *exposure groups generate exgr = type-`nage'-3 if type>`nage'+2 count if exgr>=. local nmiss = r(N) local nchange = 1 while `nchange'>0{ by indiv: replace exgr = exgr[_n+1] if exgr>=. count if exgr>=. local nchange = `nmiss'-r(N) local nmiss = r(N) } replace exgr = 0 if exgr==. drop cutp* type drop if interval ==0 | interval==. generate loginterval = log(interval) *fit model xi: xtpoisson nevents i.exgr i.agegr, fe i(indiv) offset(loginterval) irr