*analysis 3 set more off use intuss, clear *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 generate cutp13 = agep1 + 13 generate cutp14 = agep1 + 27 generate cutp15 = agep1 + 41 generate cutp16 = agep2 + 13 generate cutp17 = agep2 + 27 generate cutp18 = agep2 + 41 generate cutp19 = agep3 + 13 generate cutp20 = agep3 + 27 generate cutp21 = 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') *dose 1 exposure groups generate exgr1 = type-13 if type>=13 & type<=15 count if exgr1>=. local nmiss = r(N) local nchange = 1 while `nchange'>0{ by indiv: replace exgr1 = exgr1[_n+1] if exgr1>=. count if exgr1>=. local nchange = `nmiss'-r(N) local nmiss = r(N) } replace exgr1 = 0 if exgr1==. *dose 2 exposure groups generate exgr2 = type-16 if type>=16 & type<=18 count if exgr2>=. local nmiss = r(N) local nchange = 1 while `nchange'>0{ by indiv: replace exgr2 = exgr2[_n+1] if exgr2>=. count if exgr2>=. local nchange = `nmiss'-r(N) local nmiss = r(N) } replace exgr2 = 0 if exgr2==. *dose 3 exposure groups generate exgr3 = type-19 if type>=19 & type<=21 count if exgr3>=. local nmiss = r(N) local nchange = 1 while `nchange'>0{ by indiv: replace exgr3 = exgr3[_n+1] if exgr3>=. count if exgr3>=. local nchange = `nmiss'-r(N) local nmiss = r(N) } replace exgr3 = 0 if exgr3==. drop cutp* type drop if interval ==0 | interval==. generate loginterval = log(interval) *fit model xi: xtpoisson nevents i.exgr1 i.exgr2 i.exgr3 i.agegr, fe i(indiv) offset(loginterval) irr