program define apctlagb, rclass version 11.0 syntax varlist(numeric ts) [fw aw pw iw] [if] [in], /// [age(varname numeric) period(varname numeric) /// offset(varname numeric) exposure(varname numeric) *] marksample touse markout `touse' `age' `period' `offset' `exposure' tempname bic0 bic1 bicd bicd0 bicd1 dbic_cohort dbic_hyster CC HH aar ccr ppr tempvar agag pepe gaga aaa ccc coco coh end ppp y tempa tempy tempg coeffcoh hystecoh hyst1 w2 diffea cn rgap valgap gapone gapzero ga1 ga0 alpha omega rescaage rescacoh rescaper qui { local varnam "" * apctlag version 1.1 / Nov 10 2016 * this ado file quotes fractions of the Yang & colleagues apc_ie.ado (ssc install apc) di "" di "" di "" di "" di "" di "" di "" di "" di "" di "" di "************************" di "* apctlag version 1.1 *" di "************************" di "" local expb = subinstr("`exp'","=","",.) local expc : word count `expb' if (`expc'==0) { quietly: gen `w2'= 1 } else { quietly: gen `w2'= `expb' } local lc : word count `varlist' forvalues i = 1(1)`lc' { local nomy`i' : word `i' of `varlist' } local control "" local cntnam "" local nam "" forvalues i = 2/`lc' { local toto `nomy`i'' local control "`control' `toto'" local nam = "`nomy`i''" local cntnam "`cntnam' `nam'" } *quietly: gen `y' = `nomy1' if `touse' quietly: gen `aaa' = `age' if `touse' quietly: gen `ppp' = `period' if `touse' quietly: tostring `aaa' `ppp' , generate(`tempa' `tempy') quietly: encode `tempa' if `touse', gen(`agag') quietly: encode `tempy' if `touse', gen(`pepe') *drop `temp*' quietly: su `agag' local maag=int(r(max)) quietly: su `pepe' local mape=int(r(max)) quietly: gen `ccc' = `period' -`age' if `touse' quietly: su `ccc' if `touse' quietly: gen `coco' = `pepe'-`agag'+`maag' quietly: su `coco' local maco=int(r(max)) *tab `aaa' `ppp', su(`ccc') nofreq nost w quietly: su `agag' [fw=`w2'] quietly: gen `rescaage' =2*(`agag'-r(min))/(r(max)-r(min))-1 quietly: gen `rescaper' =(`pepe')/(r(max)-r(min)) quietly: gen `rescacoh' =(`coco')/(r(max)-r(min)) quietly: su `rescaper' [fw=`w2'] quietly: replace `rescaper' =`rescaper'-(r(max)+r(min))/2 quietly: su `rescacoh' [fw=`w2'] quietly: replace `rescacoh' =`rescacoh' -(r(max)+r(min))/2 quietly: replace `rescaage' =`rescaage' +runiform()*.001-.0005 quietly: replace `rescacoh' =`rescacoh' +runiform()*.001-.0005 quietly: replace `rescaper' =`rescaper' +runiform()*.001-.0005 quietly tab `aaa' if `touse', matrow(`aar') quietly tab `ppp' if `touse', matrow(`ppr') quietly tab `ccc' if `touse', matrow(`ccr') local pace = `aar'[2,1]-`aar'[1,1] forvalues i = 1(1)`maco' { tempvar cc`i' qui: gen `cc`i''= (`i'==`coco' )+runiform()*.001-.0005 if `touse' local ccrr=`ccr'[`i',1] tempvar coh_`ccrr' gen `coh_`ccrr''= `cc`i'' if `touse' if `i'>1 & `i'<`maco' local varnam "`varnam' coh_`ccrr'" } forvalues i = 1(1)`maag' { tempvar aa`i' noi: gen `aa`i''= (`i'==`agag')+runiform()*.001-.0005 su `aa`i'' local aarr=`aar'[`i',1] tempvar age_00`aarr' gen `age_00`aarr'' = `aa`i'' if `touse' local varnam "`varnam' age_00`aarr'" } forvalues i = 1(1)`mape' { tempvar pp`i' qui: gen `pp`i''= (`i'==`pepe')+runiform()*.001-.0005 local pprr=`ppr'[`i',1] tempvar per_`pprr' gen `per_`pprr''= `pp`i'' if `touse' local varnam "`varnam' per_`pprr'" } preserve collapse `nomy1' if `touse' , by(`aaa' `ppp' ) gen `cn' =`ppp' - `aaa' xtset `cn' `ppp' gen `diffea'=`nomy1'-L`pace'.`nomy1' noi su `diffea' local effage =r(mean) noi di "age effect = " `effage' restore local consg1 "0" local consg2 "0" local listcoh "" local macob=int(`maco'-1) forvalues i=2(1)`macob' { local j=int(-`maco'-1+`i'*2) local k=`ccr'[`i',1] local consg1 "`consg1'+`coh_`k''" local consg2 "`consg2'+(`j')*`coh_`k''" local listcoh "`listcoh' `coh_`k''" } local consg1 "`consg1'=0" local consg2 "`consg2'=0" local consg3 "0" local consg4 "0" local rap= 0 local listage "" forvalues i=1(1)`maag' { local j=int(-`maag'-1+`i'*2) local k=`aar'[`i',1] local consg3 "`consg3'+`age_00`k''" local consg4 "`consg4'+(`j')*`age_00`k''" local listage "`listage' `age_00`k''" local rap = `rap'+1/2*`j'*`j' } local consg3 "`consg3'=0" local cosi= `rap'*`effage' local consg4 "`consg4' = `cosi' " local consg5 "0" local consg6 "0" local listper "" forvalues i=1(1)`mape' { local j=int(-`mape'-1+`i'*2) local k=`ppr'[`i',1] local consg5 "`consg5'+`per_`k''" local consg6 "`consg6'+(`j')*`per_`k''" local listper "`listper' `per_`k''" } local consg5 "`consg5'=0" local consg6 "`consg6'=0" quietly: compress constraint 1 `consg1' constraint 2 `consg2' constraint 3 `consg3' constraint 4 `consg4' constraint 5 `consg5' constraint 6 `consg6' di "" di "********************************************************************************" di "####### APCTLAG = APC with cohort Trend based on lagged age effect ########" di "********************************************************************************" di "" glm `nomy1' `listcoh' `listage' `listper' `control' `in' [`weight' `exp'] if `coco'!=1 & `coco'<`maco' & `touse', /// `options' constraints ( 3 4 5 6) nocons *predict predictedapcd, xb *predict residuedevapcd, deviance *drop alpha-omega di "*******************************************" di "" } mat def V=e(b) mat def A=V' local varnam "`varnam' `cntnam'" matrix coln A="`nomy1'" matrix rown A= : matrix roweq A= " " local line="" local rn "" local lines=rowsof(A) local cols=colsof(A) local title " Variable: " local kav " " local names : colnames A foreach v of local names { local title "`title' `v'" local kav "`kav'______________________" } di "`kav'" di "`title'" di "`kav'" forvalues i=1(1)`lines' { local line1 : word `i' of `varnam' local line " `line1'" local rn "`rn' `line1'" forvalues j=1(1)`cols' { local b=round(A[`i',`j'],0.0005) local c=string(`b',"%12.3f") local line "`line' `c'" } di "`line'" local line "" } di "`kav'" matrix rown A=`rn' return matrix table=A end