📄 mhodds.ado
字号:
tempvar last
qui gen byte `last'=1 if _n == _N
qui replace `u' = sum(`u')
qui replace `v' = sum(`v')
}
drop `d1' `dt' `p1' `p2' `pt'
qui gen double `rr' = exp(`u'/`v')
qui gen double `ef' = /*
*/ exp(invnorm(`level'*0.005 + 0.5)/sqrt(`v'))
}
* Calculate the OR or trend with confidence limits
tempvar cl cu ch pv
qui gen double `cl' = `rr'/`ef' if `touse'
qui gen double `cu' = `rr'*`ef' if `touse'
qui gen double `ch' = (`u'^2)/`v' if `touse'
qui gen double `pv' = chiprob(1,`ch') if `touse'
if "`compare'"!="" | "`by'"!="" {
/*
display ""
di in gr "OR estimate, lower and upper " `"`=strsubdp("`level'")'"' /*
*/ "% confidence limits, and"
di in gr /*
*/ "chi-squared test for OR=1 (1 degree of freedom)"
*/
}
if "`compare'" == "" {
di in gr _n /*
*/ "(The Odds Ratio estimate is an approximation to the odds ratio "
di in gr "for a one unit increase in `abne')"
}
if "`by'" != "" {
if "`grp1'"!="" {
if `grp1' == `grp2' {
local cl=.
local cu=.
local ch=.
local pv=.
}
}
MTAb1 `rr' `cl' `cu' `ch' `pv' `level' `last' `by'
local adj "`str' `by'"
local t2:word count `adj'
TITle `t2' `adj'
di in gr _n _col(5) /*
*/ "Mantel-Haenszel estimate controlling for `r(t2)'"
local odds=`rr'[_N]
local lci=`cl'[_N]
local uci=`cu'[_N]
local chi2=`ch'[_N]
local pval=`pv'[_N]
if "`grp1'"!="" {
if `grp1' == `grp2' {
local lci=.
local uci=.
local chi2=.
local pval=.
}
}
MTAb2 `odds' `lci' `uci' `chi2' `pval' `level'
if `hdf' > 1 {
di in gr _n /*
*/ "Test of homogeneity of ORs (approx): " /*
*/ "chi2(" in ye `hdf'-1 in gr ")" _col(48) "="/*
*/ in ye %8.2f `het'
di in gr _col(38) "Pr>chi2 = " /*
*/ in ye %5.4f chiprob(`hdf'-1, `het')
ret scalar chi2_hom = `het'
ret scalar df_hom = `hdf'-1
*ret scalar hom_p = chiprob(`hdf'-1, `het')
}
else {
di in gr _n "Too few informative strata" /*
*/ " for test for unequal OR's"
}
}
else {
qui replace `last'=0 if `last'>=.
sort `last'
local odds=`rr'[_N]
local lci=`cl'[_N]
local uci=`cu'[_N]
local chi2=`ch'[_N]
local pval=`pv'[_N]
if "`grp1'"!="" {
if `grp1' == `grp2' {
local lci=.
local uci=.
local chi2=.
local pval=.
}
}
di ""
MTAb2 `odds' `lci' `uci' `chi2' `pval' `level'
}
ret scalar p = `pv'[_N]
ret scalar chi2 = `ch'[_N]
ret scalar ub_or = `cu'[_N]
ret scalar lb_or = `cl'[_N]
ret scalar or = `rr'[_N]
if "`grp1'"!="" {
if `grp1' == `grp2' {
ret scalar p = .
ret scalar chi2 = .
ret scalar ub_or = .
ret scalar lb_or =.
}
}
} /* END CAPTURE */
if "`by'" != "" { qui drop if _n==_N }
sort `order'
local rc = _rc
if _rc!=0 {
exit `rc'
}
end
program define MTAb1
args or lo up chisq pv l1 last
*d " `1' `2' `3' `4' `5' `6' `7' . . . "
local lab8: value label `8'
local lng 10
if "`9'"!="" {
local lng=20
local lab9: value label `9'
}
if "`10'"!="" {
local lng=30
local lab10: value label `10'
}
local lng2=78-`lng'
di _n in smcl in gr "{hline `lng'}{c TT}{hline `lng2'}"
di in gr %9s abbrev("`8'",8) _c
if "`9'"!="" {
di in gr %10s abbrev("`9'",8) _c
}
if "`10'"!="" {
di in gr %10s abbrev("`10'",8) _c
}
local spc=int((`lng2'-31)/3)
di in smcl in gr " {c |} Odds Ratio" _c
local sp=`spc'-3
di in gr _col(`sp') "chi2(1)" _c
*di in gr _col(`spc') "df" _c
local sp=`spc'-2
di in gr _col(`sp') "P>chi2" _c
local spl=(57-2*`spc'-`lng'-14)-1
local cil `=string(`l1')'
local cil `=length("`cil'")'
local spl2 = `spl' + 2 - `cil'
di in gr _col(`spl2')"[`l1'% Conf. Interval]"
*local spc = `spc' - 8
di in smcl in gr "{hline `lng'}{c +}{hline `lng2'}"
local i 1
while `i'<_N {
local lst=`last'[`i']
if `lst'==1 {
if "`lab8'"!="" {
local x=`8'[`i']
local labx: label `lab8' `x' 8
local len=10-length("`labx'")
noi di in gr _col(`len') /*
*/ %8.0g "`labx'" _c
}
else {
cap confirm string var `8'
if _rc==0 {
local alab=substr(`8'[`i'],1,8)
local alen=8-length("`alab'")
noi di in gr _col(2) /*
*/ _skip(`alen') "`alab'" _c
}
else noi di in gr /*
*/ _col(2) %8.0g `8'[`i'] _c
}
if "`lab9'"!="" {
local x=`9'[`i']
local labx: label `lab9' `x' 8
local len=11-length("`labx'")
noi di in gr _col(`len') /*
*/ %8.0g "`labx'" _c
}
else if "`9'"!="" {
cap confirm string var `9'
if _rc==0 {
local alab=substr(`9'[`i'],1,8)
local alen=8-length("`alab'")
noi di _col(3) in gr /*
*/ _skip(`alen') "`alab'" _c
}
else noi di in gr _col(3) /*
*/ %8.0g `9'[`i'] _c
}
if "`lab10'"!="" {
local x=`10'[`i']
local labx: label `lab10' `x' 8
local len=11-length("`labx'")
noi di in gr _col(`len') /*
*/ %8.0g "`labx'" _c
}
else if "`10'"!="" {
cap confirm string var `10'
if _rc==0 {
local alab=substr(`10'[`i'],1,8)
local alen=8-length("`alab'")
noi di _col(3) in gr /*
*/ _skip(`alen') "`alab'" _c
}
else noi di in gr _col(3) /*
*/ %8.0g `10'[`i'] _c
}
noi di in smcl in gr " {c |} " _c
di in ye %10.6f `or'[`i'] _c
local sp=`spc'-2
di in ye _col(`sp') %6.2f `chisq'[`i'] _c
di in ye _col(`sp') %5.4f `pv'[`i'] _c
local sp=`spl'
di in ye _col(`sp') %9.5f `lo'[`i'] _c
di in ye _col(3) %9.5f `up'[`i']
}
local i=`i'+1
}
di in smcl in gr "{hline `lng'}{c BT}{hline `lng2'}"
end
program define MTAb2
args or lo up ch pv l1
local cil `=string(`l1')'
local cil `=length("`cil'")'
local spaces " "
if `cil' == 4 {
local spaces " "
}
else if `cil' == 5 {
local spaces " "
}
di in smcl in gr _col(5) "{hline 64}"
di in gr _col(5) /*
*/ " Odds Ratio chi2(1) P>chi2`spaces'[`l1'% Conf. Interval]"
di in smcl in gr _col(5) "{hline 64}"
di in ye _col(6) %10.6f `or' _col(20) %7.2f `ch' _col(35) %5.4f `pv' /*
*/ _col(48) %10.6f `lo' _col(59) %10.6f `up'
di in smcl in gr _col(5) "{hline 64}"
end
program define TITle, rclass
if `1'==1 {
ret local t2 = abbrev("`2'",12)
exit
}
if `1'==2 {
local n2 = abbrev("`2'",12)
local n3 = abbrev("`3'",12)
ret local t2 "`n2' and `n3'"
exit
}
local cnt=`1'
local fi = abbrev("`2'", 8)
mac shift
local i 2
while `i'<`cnt' {
local n2 = abbrev("`2'",8)
local fi="`fi', `n2'"
local i=`i'+1
mac shift
}
local n2 = abbrev("`2'",8)
ret local t2 "`fi' and `n2'"
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -