You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1840 lines
59 KiB
Plaintext
1840 lines
59 KiB
Plaintext
10 months ago
|
*! version 1.1.5 08oct2009 Ben Jann
|
||
|
* 1. estpost
|
||
|
* 2. estpost_summarize
|
||
|
* 3. estpost_tabulate
|
||
|
* 4. estpost_tabstat
|
||
|
* 5. estpost_ttest
|
||
|
* 6. estpost_correlate
|
||
|
* 7. estpost_stci (Stata 9 required)
|
||
|
* 8. estpost_ci
|
||
|
* 9. estpost_prtest
|
||
|
* 10. estpost__svy_tabulate
|
||
|
* 99. _erepost
|
||
|
|
||
|
* 1. estpost
|
||
|
program estpost, rclass // rclass => remove r()'s left behind by subcommand
|
||
|
version 8.2
|
||
|
local caller : di _caller()
|
||
|
capt syntax [, * ]
|
||
|
if _rc==0 { // => for bootstrap
|
||
|
_coef_table_header
|
||
|
ereturn display, `options'
|
||
|
exit
|
||
|
}
|
||
|
gettoken subcommand rest : 0, parse(" ,:")
|
||
|
capt confirm name `subcommand'
|
||
|
if _rc {
|
||
|
di as err "invalid subcommand"
|
||
|
exit 198
|
||
|
}
|
||
|
|
||
|
local l = length(`"`subcommand'"')
|
||
|
if `"`subcommand'"'==substr("summarize",1,max(2,`l')) local subcommand "summarize"
|
||
|
else if `"`subcommand'"'==substr("tabulate",1,max(2,`l')) local subcommand "tabulate"
|
||
|
else if `"`subcommand'"'==substr("correlate",1,max(3,`l')) local subcommand "correlate"
|
||
|
else if `"`subcommand'"'=="svy" {
|
||
|
_estpost_parse_svy `macval(rest)'
|
||
|
}
|
||
|
else if substr(`"`subcommand'"',1,5)=="_svy_" {
|
||
|
di as err "invalid subcommand"
|
||
|
exit 198
|
||
|
}
|
||
|
|
||
|
capt local junk: properties estpost_`subcommand' // does not work in Stata 8
|
||
|
if _rc==199 {
|
||
|
di as err "invalid subcommand"
|
||
|
exit 198
|
||
|
}
|
||
|
|
||
|
version `caller': estpost_`subcommand' `macval(rest)'
|
||
|
//eret list
|
||
|
end
|
||
|
program _estpost_markout2 // marks out obs that are missing on *all* variables
|
||
|
gettoken touse varlist: 0
|
||
|
if `:list sizeof varlist'>0 {
|
||
|
tempname touse2
|
||
|
gen byte `touse2' = 0
|
||
|
foreach var of local varlist {
|
||
|
qui replace `touse2' = 1 if !missing(`var')
|
||
|
}
|
||
|
qui replace `touse' = 0 if `touse2'==0
|
||
|
}
|
||
|
end
|
||
|
program _estpost_parse_svy
|
||
|
version 9.2
|
||
|
_on_colon_parse `0'
|
||
|
local 0 `"`s(after)'"'
|
||
|
gettoken subcommand rest : 0, parse(" ,")
|
||
|
local l = length(`"`subcommand'"')
|
||
|
if `"`subcommand'"'==substr("tabulate",1,max(2,`l')) local subcommand "tabulate"
|
||
|
c_local subcommand `"_svy_`subcommand'"'
|
||
|
c_local rest `"`s(before)' : `rest'"'
|
||
|
end
|
||
|
program _estpost_namesandlabels // used by some routines such as estpost_tabulate
|
||
|
version 8.2 // returns locals names, savenames, and labels
|
||
|
args varname values0 labels0
|
||
|
if `"`values0'"'=="" { // generate values: 1 2 3 ...
|
||
|
local i 0
|
||
|
foreach label of local labels0 {
|
||
|
local values0 `values0' `++i'
|
||
|
}
|
||
|
}
|
||
|
local haslabels 0
|
||
|
if `"`labels0'"'=="" & "`varname'"!="" {
|
||
|
local vallab: value label `varname'
|
||
|
}
|
||
|
while (1) {
|
||
|
gettoken value values0 : values0
|
||
|
if "`value'"=="" continue, break //=> exit loop
|
||
|
if `"`vallab'"'!="" {
|
||
|
local lbl: label `vallab' `value', strict
|
||
|
}
|
||
|
else {
|
||
|
gettoken lbl labels0 : labels0
|
||
|
}
|
||
|
if index("`value'",".") {
|
||
|
local haslabels 1
|
||
|
if `"`lbl'"'=="" {
|
||
|
local lbl "`value'"
|
||
|
}
|
||
|
local value: subinstr local value "." "_missing_"
|
||
|
}
|
||
|
local names0 `names0' `value'
|
||
|
if `"`lbl'"'!="" {
|
||
|
local labels `"`labels'`lblspace'`value' `"`lbl'"'"'
|
||
|
local lblspace " "
|
||
|
}
|
||
|
if `haslabels' continue
|
||
|
if `"`lbl'"'=="" {
|
||
|
local names `"`names'`space'`value'"'
|
||
|
local savenames `"`savenames'`space'`value'"'
|
||
|
}
|
||
|
else {
|
||
|
if regexm(`"`lbl'"', `"[:."]"') local haslabels 1
|
||
|
else if length(`"`lbl'"')>30 local haslabels 1
|
||
|
else {
|
||
|
local names `"`names'`space'`"`lbl'"'"'
|
||
|
local lbl: subinstr local lbl " " "_", all
|
||
|
local savenames `"`savenames'`space'`lbl'"'
|
||
|
}
|
||
|
}
|
||
|
local space " "
|
||
|
}
|
||
|
if `haslabels' {
|
||
|
local names `names0'
|
||
|
local savenames `names0'
|
||
|
}
|
||
|
c_local names `"`names'"' // to be used as matrix row- or colnames
|
||
|
c_local savenames `"`savenames'"' // names without spaces (for matlist)
|
||
|
if `haslabels' {
|
||
|
c_local labels `"`labels'"' // label dictionary
|
||
|
}
|
||
|
else c_local labels ""
|
||
|
end
|
||
|
program _estpost_eqnamesandlabels // used by some routines such as estpost_tabulate
|
||
|
version 8.2 // returns locals eqnames and eqlabels
|
||
|
args varname values0 labels0
|
||
|
if `"`values0'"'=="" { // generate values: 1 2 3 ...
|
||
|
local i 0
|
||
|
foreach label of local labels0 {
|
||
|
local values0 `values0' `++i'
|
||
|
}
|
||
|
}
|
||
|
local haslabels 0
|
||
|
if `"`labels0'"'=="" & "`varname'"!="" {
|
||
|
local vallab: value label `varname'
|
||
|
}
|
||
|
while (1) {
|
||
|
gettoken value values0 : values0
|
||
|
if "`value'"=="" continue, break //=> exit loop
|
||
|
if `"`vallab'"'!="" {
|
||
|
local lbl: label `vallab' `value', strict
|
||
|
}
|
||
|
else {
|
||
|
gettoken lbl labels0 : labels0
|
||
|
}
|
||
|
if index("`value'",".") {
|
||
|
local haslabels 1
|
||
|
if `"`lbl'"'=="" {
|
||
|
local lbl "`value'"
|
||
|
}
|
||
|
local value: subinstr local value "." "_missing_"
|
||
|
}
|
||
|
local names0 `names0' `value'
|
||
|
if `"`lbl'"'=="" local lbl "`value'"
|
||
|
local labels `"`labels'`lblspace'`"`lbl'"'"'
|
||
|
local lblspace " "
|
||
|
if `haslabels' continue
|
||
|
if `"`lbl'"'=="" {
|
||
|
local names `"`names'`space'`value'"'
|
||
|
}
|
||
|
else {
|
||
|
if regexm(`"`lbl'"', `"[:."]"') local haslabels 1
|
||
|
else if length(`"`lbl'"')>30 local haslabels 1
|
||
|
else {
|
||
|
local names `"`names'`space'`"`lbl'"'"'
|
||
|
}
|
||
|
}
|
||
|
local space " "
|
||
|
}
|
||
|
if `haslabels' {
|
||
|
local names `names0'
|
||
|
}
|
||
|
c_local eqnames `"`names'"' // to be used as matrix roweqs or coleqs
|
||
|
if `haslabels' {
|
||
|
c_local eqlabels `"`labels'"' // list of labels
|
||
|
}
|
||
|
else c_local eqlabels ""
|
||
|
end
|
||
|
|
||
|
* 2. estpost_summarize: wrapper for -summarize-
|
||
|
prog estpost_summarize, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax [varlist] [if] [in] [aw fw iw] [, ESample Quietly ///
|
||
|
LISTwise CASEwise Detail MEANonly ]
|
||
|
if "`casewise'"!="" local listwise listwise
|
||
|
|
||
|
// sample
|
||
|
if "`listwise'"!="" marksample touse
|
||
|
else {
|
||
|
marksample touse, nov
|
||
|
_estpost_markout2 `touse' `varlist'
|
||
|
}
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// gather results
|
||
|
local nvars: list sizeof varlist
|
||
|
tempname emptymat
|
||
|
mat `emptymat' = J(1, `nvars', .)
|
||
|
mat coln `emptymat' = `varlist'
|
||
|
local i 0
|
||
|
local rnames ""
|
||
|
foreach v of local varlist {
|
||
|
local ++i
|
||
|
qui summarize `v' if `touse' [`weight'`exp'], `detail' `meanonly'
|
||
|
local rnamesi: r(scalars)
|
||
|
local rnamesi: list rnamesi - rnames
|
||
|
if `"`rnamesi'"'!="" {
|
||
|
foreach name of local rnamesi {
|
||
|
tempname _`name'
|
||
|
mat `_`name'' = `emptymat'
|
||
|
}
|
||
|
local rnames: list rnames | rnamesi
|
||
|
}
|
||
|
foreach rname of local rnames {
|
||
|
mat `_`rname''[1,`i'] = r(`rname')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
local rescoln
|
||
|
foreach rname of local rnames {
|
||
|
mat `res' = nullmat(`res'), `_`rname'''
|
||
|
if "`rname'"=="N" {
|
||
|
local rescoln `rescoln' e(count)
|
||
|
}
|
||
|
else {
|
||
|
local rescoln `rescoln' e(`rname')
|
||
|
}
|
||
|
}
|
||
|
mat coln `res' = `rescoln'
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g)
|
||
|
}
|
||
|
else {
|
||
|
matlist `res', nohalf lines(oneline)
|
||
|
}
|
||
|
mat drop `res'
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local b
|
||
|
local V
|
||
|
if c(stata_version)<9 { // b and V required in Stata 8
|
||
|
tempname b V
|
||
|
mat `b' = J(1, `nvars', 0)
|
||
|
mat coln `b' = `varlist'
|
||
|
mat `V' = `b'' * `b'
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `b' `V', obs(`N') `esample'
|
||
|
|
||
|
eret scalar k = `nvars'
|
||
|
|
||
|
eret local wexp `"`exp'"'
|
||
|
eret local wtype `"`weight'"'
|
||
|
eret local subcmd "summarize"
|
||
|
eret local cmd "estpost"
|
||
|
|
||
|
local nmat: list sizeof rnames
|
||
|
forv i=`nmat'(-1)1 {
|
||
|
local rname: word `i' of `rnames'
|
||
|
if "`rname'"=="N" {
|
||
|
eret matrix count = `_N'
|
||
|
continue
|
||
|
}
|
||
|
eret matrix `rname' = `_`rname''
|
||
|
}
|
||
|
end
|
||
|
|
||
|
|
||
|
* 2. estpost_tabulate: wrapper for -tabulate-
|
||
|
prog estpost_tabulate, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
syntax varlist(min=1 max=2) [if] [in] [fw aw iw pw] [, * ]
|
||
|
if `:list sizeof varlist'==1 {
|
||
|
version `caller': estpost_tabulate_oneway `0'
|
||
|
}
|
||
|
else {
|
||
|
version `caller': estpost_tabulate_twoway `0'
|
||
|
}
|
||
|
end
|
||
|
prog estpost_tabulate_oneway, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax varname [if] [in] [fw aw iw] [, ESample Quietly ///
|
||
|
noTOTal subpop(passthru) Missing sort noLabel ]
|
||
|
|
||
|
// sample
|
||
|
if "`missing'"!="" marksample touse, nov strok
|
||
|
else marksample touse, strok
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// handle string variables
|
||
|
capt confirm numeric variable `varlist'
|
||
|
if _rc {
|
||
|
tempname varname
|
||
|
qui encode `varlist' if `touse', generate(`varname')
|
||
|
}
|
||
|
else local varname `varlist'
|
||
|
|
||
|
// gather results
|
||
|
tempname count vals
|
||
|
tab `varname' if `touse' [`weight'`exp'], nofreq ///
|
||
|
matcell(`count') matrow(`vals') `subpop' `missing' `sort'
|
||
|
local N = r(N)
|
||
|
mat `count' = `count''
|
||
|
local R = r(r)
|
||
|
forv r = 1/`R' {
|
||
|
local value: di `vals'[`r',1]
|
||
|
local values `values' `value'
|
||
|
}
|
||
|
if "`label'"=="" {
|
||
|
_estpost_namesandlabels `varname' "`values'" // sets names, savenames, labels
|
||
|
}
|
||
|
else {
|
||
|
_estpost_namesandlabels "" "`values'"
|
||
|
}
|
||
|
if "`total'"=="" {
|
||
|
mat `count' = `count', `N'
|
||
|
local names `"`names' Total"'
|
||
|
local savenames `"`savenames' Total"'
|
||
|
local linesopt "lines(rowtotal)"
|
||
|
}
|
||
|
mat colname `count' = `names'
|
||
|
tempname percent cum
|
||
|
mat `percent' = `count'/`N'*100
|
||
|
mat `cum' = J(1, colsof(`count'), .z)
|
||
|
mat colname `cum' = `names'
|
||
|
mat `cum'[1,1] = `count'[1,1]
|
||
|
forv r = 2/`R' {
|
||
|
mat `cum'[1,`r'] = `cum'[1,`r'-1] + `count'[1,`r']
|
||
|
}
|
||
|
mat `cum' = `cum'/`N'*100
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
mat `res' = `count'', `percent'', `cum''
|
||
|
mat coln `res' = e(b) e(pct) e(cumpct)
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g) nodotz
|
||
|
}
|
||
|
else {
|
||
|
mat rown `res' = `savenames'
|
||
|
matlist `res', nohalf `linesopt' rowtitle(`varlist') nodotz
|
||
|
}
|
||
|
mat drop `res'
|
||
|
if `"`labels'"'!="" {
|
||
|
di _n as txt "row labels saved in macro e(labels)"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local V
|
||
|
if c(stata_version)<9 { // V required in Stata 8
|
||
|
tempname V
|
||
|
mat `V' = `count'' * `count' * 0
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `count' `V', depname(`varlist') obs(`N') `esample'
|
||
|
eret scalar r = r(r)
|
||
|
eret local wexp `"`exp'"'
|
||
|
eret local wtype `"`weight'"'
|
||
|
eret local labels `"`labels'"'
|
||
|
eret local depvar "`varlist'"
|
||
|
eret local subcmd "tabulate"
|
||
|
eret local cmd "estpost"
|
||
|
eret mat cumpct = `cum'
|
||
|
eret mat pct = `percent'
|
||
|
end
|
||
|
prog estpost_tabulate_twoway, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax varlist(min=2 max=2) [if] [in] [fw aw iw] [, ESample Quietly ///
|
||
|
noTOTal Missing noLabel ///
|
||
|
CHi2 Exact Exact2(passthru) Gamma LRchi2 Taub v All noLOg ]
|
||
|
local v = upper("`v'")
|
||
|
local qui2 "`quietly'"
|
||
|
local hastests = `"`chi2'`exact'`exact2'`gamma'`lrchi2'`taub'`v'`all'"'!=""
|
||
|
if `hastests' local nofreq nofreq
|
||
|
else local qui2 "quietly"
|
||
|
|
||
|
// sample
|
||
|
if "`missing'"!="" marksample touse, nov strok
|
||
|
else marksample touse, strok
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// handle string variables
|
||
|
gettoken rvar cvar : varlist
|
||
|
gettoken cvar : cvar
|
||
|
foreach d in r c {
|
||
|
capt confirm numeric variable ``d'var'
|
||
|
if _rc {
|
||
|
tempname `d'varname
|
||
|
qui encode ``d'var' if `touse', generate(``d'varname')
|
||
|
}
|
||
|
else local `d'varname ``d'var'
|
||
|
}
|
||
|
|
||
|
// gather results
|
||
|
tempname cell rvals cvals
|
||
|
if `hastests' {
|
||
|
`quietly' di ""
|
||
|
}
|
||
|
`qui2' tab `rvarname' `cvarname' if `touse' [`weight'`exp'], `nofreq' ///
|
||
|
matcell(`cell') matrow(`rvals') matcol(`cvals') `missing' ///
|
||
|
`chi2' `exact' `exact2' `gamma' `lrchi2' `taub' `v' `all' `log'
|
||
|
mat `cvals' = `cvals''
|
||
|
local N = r(N)
|
||
|
tempname rtot ctot
|
||
|
mat `ctot' = J(1,rowsof(`cell'),1) * `cell'
|
||
|
mat `rtot' = `cell' * J(colsof(`cell'),1,1)
|
||
|
foreach d in r c {
|
||
|
local I = r(`d')
|
||
|
forv i = 1/`I' {
|
||
|
local value: di ``d'vals'[`i',1]
|
||
|
local `d'values ``d'values' `value'
|
||
|
}
|
||
|
}
|
||
|
if "`label'"=="" {
|
||
|
_estpost_namesandlabels `rvarname' "`rvalues'" // sets names, savenames, labels
|
||
|
_estpost_eqnamesandlabels `cvarname' "`cvalues'" // sets eqnames, eqlabels
|
||
|
}
|
||
|
else {
|
||
|
_estpost_namesandlabels "" "`rvalues'" // sets names, savenames, labels
|
||
|
_estpost_eqnamesandlabels "" "`cvalues'" // sets eqnames, eqlabels
|
||
|
}
|
||
|
local savenames0 `"`savenames'"'
|
||
|
local savenames
|
||
|
if "`total'"=="" {
|
||
|
mat `ctot' = `ctot', `N'
|
||
|
mat `cell' = (`cell', `rtot') \ `ctot'
|
||
|
mat `rtot' = `rtot' \ `N'
|
||
|
local names `"`names' Total"'
|
||
|
local savenames0 `"`savenames0' Total"'
|
||
|
local eqnames `"`eqnames' Total"'
|
||
|
}
|
||
|
mat rowname `cell' = `names'
|
||
|
tempname count col row tot tmp
|
||
|
forv i = 1/`=colsof(`cell')' {
|
||
|
gettoken eq eqnames : eqnames
|
||
|
mat `tmp' = `cell'[1...,`i']
|
||
|
mat roweq `tmp' = `"`eq'"'
|
||
|
mat `tmp' = `tmp''
|
||
|
mat `count' = nullmat(`count'), `tmp'
|
||
|
mat `col' = nullmat(`col'), `tmp' / `ctot'[1,`i']*100
|
||
|
forv j = 1/`=colsof(`tmp')' {
|
||
|
mat `tmp'[1,`j'] = `tmp'[1,`j'] / `rtot'[`j',1]*100
|
||
|
}
|
||
|
mat `row' = nullmat(`row'), `tmp'
|
||
|
local savenames `"`savenames' `savenames0'"'
|
||
|
}
|
||
|
mat `tot' = `count' / `N'*100
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
mat `res' = `count'', `tot'', `col'', `row''
|
||
|
mat coln `res' = e(b) e(pct) e(colpct) e(rowpct)
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g)
|
||
|
}
|
||
|
else {
|
||
|
mat rown `res' = `savenames'
|
||
|
di _n as res %-12s abbrev("`cvar'",12) as txt " {c |}{space 44}"
|
||
|
matlist `res', twidth(12) format(%9.0g) noblank nohalf rowtitle(`rvar')
|
||
|
}
|
||
|
mat drop `res'
|
||
|
if `"`labels'`eqlabels'"'!="" {
|
||
|
di ""
|
||
|
if `"`labels'"'!="" {
|
||
|
di as txt "row labels saved in macro e(labels)"
|
||
|
}
|
||
|
if `"`eqlabels'"'!="" {
|
||
|
di as txt "column labels saved in macro e(eqlabels)"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local V
|
||
|
if c(stata_version)<9 { // V required in Stata 8
|
||
|
tempname V
|
||
|
mat `V' = `count'' * `count' * 0
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `count' `V', obs(`N') `esample'
|
||
|
local rscalars: r(scalars)
|
||
|
local rscalars: subinstr local rscalars "N" "", word
|
||
|
foreach rsc of local rscalars {
|
||
|
eret scalar `rsc' = r(`rsc')
|
||
|
}
|
||
|
eret local wexp `"`exp'"'
|
||
|
eret local wtype `"`weight'"'
|
||
|
eret local labels `"`labels'"'
|
||
|
eret local eqlabels `"`eqlabels'"'
|
||
|
eret local colvar "`cvar'"
|
||
|
eret local rowvar "`rvar'"
|
||
|
eret local subcmd "tabulate"
|
||
|
eret local cmd "estpost"
|
||
|
eret mat rowpct = `row'
|
||
|
eret mat colpct = `col'
|
||
|
eret mat pct = `tot'
|
||
|
end
|
||
|
|
||
|
|
||
|
* 4. estpost_tabstat: wrapper for -tabstat-
|
||
|
prog estpost_tabstat, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax varlist [if] [in] [aw fw] [, ESample Quietly ///
|
||
|
Statistics(passthru) stats(passthru) LISTwise CASEwise ///
|
||
|
by(varname) noTotal Missing Columns(str) ]
|
||
|
if "`casewise'"!="" local listwise listwise
|
||
|
local l = length(`"`columns'"')
|
||
|
if `"`columns'"'==substr("variables",1,max(1,`l')) local columns "variables"
|
||
|
else if `"`columns'"'==substr("statistics",1,max(1,`l')) local columns "statistics"
|
||
|
else if `"`columns'"'=="stats" local columns "statistics"
|
||
|
else if `"`columns'"'=="" {
|
||
|
if `:list sizeof varlist'>1 local columns "variables"
|
||
|
else local columns "statistics"
|
||
|
}
|
||
|
else {
|
||
|
di as err `"columns(`columns') invalid"'
|
||
|
exit 198
|
||
|
}
|
||
|
|
||
|
// sample
|
||
|
if "`listwise'"!="" marksample touse
|
||
|
else {
|
||
|
marksample touse, nov
|
||
|
_estpost_markout2 `touse' `varlist'
|
||
|
}
|
||
|
if "`by'"!="" {
|
||
|
if "`missing'"=="" markout `touse' `by', strok
|
||
|
local byopt "by(`by')"
|
||
|
}
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// gather results
|
||
|
if "`total'"!="" & "`by'"=="" {
|
||
|
di as txt "nothing to post"
|
||
|
eret clear
|
||
|
exit
|
||
|
}
|
||
|
qui tabstat `varlist' if `touse' [`weight'`exp'], save ///
|
||
|
`statistics' `stats' `byopt' `total' `missing' columns(`columns')
|
||
|
tempname tmp
|
||
|
capt confirm matrix r(StatTot)
|
||
|
if _rc {
|
||
|
mat `tmp' = r(Stat1)
|
||
|
}
|
||
|
else {
|
||
|
mat `tmp' = r(StatTot)
|
||
|
}
|
||
|
if `"`columns'"'=="statistics" {
|
||
|
local cnames: rownames `tmp'
|
||
|
local cnames: subinstr local cnames "N" "count", word all
|
||
|
local cnames: subinstr local cnames "se(mean)" "semean", word all
|
||
|
local R = colsof(`tmp')
|
||
|
local stats "`cnames'"
|
||
|
local vars: colnames `tmp'
|
||
|
}
|
||
|
else {
|
||
|
local cnames: colnames `tmp'
|
||
|
local R = rowsof(`tmp')
|
||
|
local stats: rownames `tmp'
|
||
|
local stats: subinstr local stats "N" "count", word all
|
||
|
local stats: subinstr local stats "se(mean)" "semean", word all
|
||
|
local vars "`cnames'"
|
||
|
local cnames: subinstr local cnames "b" "_b", word all
|
||
|
local cnames: subinstr local cnames "V" "_V", word all
|
||
|
}
|
||
|
local j 0
|
||
|
foreach cname of local cnames {
|
||
|
tempname _`++j'
|
||
|
}
|
||
|
local groups: r(macros)
|
||
|
local g: list sizeof groups
|
||
|
local space
|
||
|
local labels
|
||
|
forv i = 1/`g' {
|
||
|
local labels `"`labels'`space'`"`r(name`i')'"'"'
|
||
|
}
|
||
|
if `R'==1 {
|
||
|
_estpost_namesandlabels "" "" `"`labels'"' // sets names, savenames, labels
|
||
|
}
|
||
|
else {
|
||
|
_estpost_eqnamesandlabels "" "" `"`labels'"' // sets eqnames, eqlabels
|
||
|
local names `"`eqnames'"'
|
||
|
local labels `"`eqlabels'"'
|
||
|
}
|
||
|
forv i = 1/`g' {
|
||
|
gettoken name names : names
|
||
|
mat `tmp' = r(Stat`i')
|
||
|
mat rown `tmp' = `stats'
|
||
|
if `"`columns'"'=="statistics" {
|
||
|
mat `tmp' = `tmp''
|
||
|
}
|
||
|
if `R'==1 {
|
||
|
mat rown `tmp' = `"`name'"'
|
||
|
}
|
||
|
else {
|
||
|
mat roweq `tmp' = `"`name'"'
|
||
|
}
|
||
|
local j 0
|
||
|
foreach cname of local cnames {
|
||
|
local ++j
|
||
|
mat `_`j'' = nullmat(`_`j''), `tmp'[1..., `j']'
|
||
|
}
|
||
|
}
|
||
|
if "`total'"=="" {
|
||
|
mat `tmp' = r(StatTot)
|
||
|
mat rown `tmp' = `stats'
|
||
|
if `"`columns'"'=="statistics" {
|
||
|
mat `tmp' = `tmp''
|
||
|
}
|
||
|
if `g'>0 {
|
||
|
if `R'==1 {
|
||
|
mat rown `tmp' = "Total"
|
||
|
local savenames `"`savenames' Total"'
|
||
|
local rowtotal "lines(rowtotal)"
|
||
|
}
|
||
|
else {
|
||
|
mat roweq `tmp' = "Total"
|
||
|
if `"`labels'"'!="" {
|
||
|
local labels `"`labels' Total"'
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
local j 0
|
||
|
foreach cname of local cnames {
|
||
|
local ++j
|
||
|
mat `_`j'' = nullmat(`_`j''), `tmp'[1..., `j']'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
local rescoln
|
||
|
local j 0
|
||
|
foreach cname of local cnames {
|
||
|
local ++j
|
||
|
mat `res' = nullmat(`res'), `_`j'''
|
||
|
local rescoln `rescoln' e(`cname')
|
||
|
}
|
||
|
mat coln `res' = `rescoln'
|
||
|
di _n as txt "Summary statistics: `stats'"
|
||
|
di as txt " for variables: `vars'"
|
||
|
if "`by'"!="" {
|
||
|
di as txt " by categories of: `by'"
|
||
|
}
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g)
|
||
|
}
|
||
|
else {
|
||
|
if `R'==1 & `g'>0 {
|
||
|
mat rown `res' = `savenames'
|
||
|
}
|
||
|
matlist `res', nohalf `rowtotal' rowtitle(`by')
|
||
|
}
|
||
|
if `"`labels'"'!="" {
|
||
|
di _n as txt "category labels saved in macro e(labels)"
|
||
|
}
|
||
|
mat drop `res'
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local b
|
||
|
local V
|
||
|
if c(stata_version)<9 { // b and V required in Stata 8
|
||
|
tempname b V
|
||
|
mat `b' = `_1' \ J(1, colsof(`_1'), 0)
|
||
|
mat `b' = `b'[2,1...]
|
||
|
mat `V' = `b'' * `b'
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `b' `V', obs(`N') `esample'
|
||
|
|
||
|
eret local labels `"`labels'"'
|
||
|
eret local byvar "`by'"
|
||
|
eret local vars "`vars'"
|
||
|
eret local stats "`stats'"
|
||
|
eret local wexp `"`exp'"'
|
||
|
eret local wtype `"`weight'"'
|
||
|
eret local subcmd "tabstat"
|
||
|
eret local cmd "estpost"
|
||
|
|
||
|
local nmat: list sizeof cnames
|
||
|
forv j=`nmat'(-1)1 {
|
||
|
local cname: word `j' of `cnames'
|
||
|
eret matrix `cname' = `_`j''
|
||
|
}
|
||
|
end
|
||
|
|
||
|
|
||
|
* 5. estpost_ttest: wrapper for -ttest- (two-sample)
|
||
|
prog estpost_ttest, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax varlist(numeric) [if] [in] , by(varname) [ ESample Quietly ///
|
||
|
LISTwise CASEwise UNEqual Welch ]
|
||
|
if "`casewise'"!="" local listwise listwise
|
||
|
|
||
|
// sample
|
||
|
if "`listwise'"!="" marksample touse
|
||
|
else {
|
||
|
marksample touse, nov
|
||
|
_estpost_markout2 `touse' `varlist'
|
||
|
}
|
||
|
markout `touse' `by', strok
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// gather results
|
||
|
local nvars: list sizeof varlist
|
||
|
tempname diff count
|
||
|
mat `diff' = J(1, `nvars', .)
|
||
|
mat coln `diff' = `varlist'
|
||
|
mat `count' = `diff'
|
||
|
local mnames se /*sd*/ t df_t p_l p p_u N_1 mu_1 /*sd_1*/ N_2 mu_2 /*sd_2*/
|
||
|
foreach m of local mnames {
|
||
|
tempname `m'
|
||
|
mat ``m'' = `diff'
|
||
|
}
|
||
|
local i 0
|
||
|
foreach v of local varlist {
|
||
|
local ++i
|
||
|
qui ttest `v' if `touse', by(`by') `unequal' `welch'
|
||
|
mat `diff'[1,`i'] = r(mu_1) - r(mu_2)
|
||
|
mat `count'[1,`i'] = r(N_1) + r(N_2)
|
||
|
foreach m of local mnames {
|
||
|
mat ``m''[1,`i'] = r(`m')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
mat `res' = `diff'', `count''
|
||
|
local rescoln "e(b) e(count)"
|
||
|
foreach m of local mnames {
|
||
|
mat `res' = `res', ``m'''
|
||
|
local rescoln `rescoln' e(`m')
|
||
|
}
|
||
|
mat coln `res' = `rescoln'
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g)
|
||
|
}
|
||
|
else {
|
||
|
matlist `res', nohalf lines(oneline)
|
||
|
}
|
||
|
mat drop `res'
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local V
|
||
|
if c(stata_version)<9 { // b and V required in Stata 8
|
||
|
tempname V
|
||
|
mat `V' = diag(vecdiag(`se'' * `se'))
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `diff' `V', obs(`N') `esample'
|
||
|
|
||
|
eret scalar k = `nvars'
|
||
|
|
||
|
eret local wexp `"`exp'"'
|
||
|
eret local wtype `"`weight'"'
|
||
|
eret local welch "`welch'"
|
||
|
eret local unequal "`unequal'"
|
||
|
eret local byvar "`by'"
|
||
|
eret local subcmd "ttest"
|
||
|
eret local cmd "estpost"
|
||
|
|
||
|
local nmat: list sizeof mnames
|
||
|
forv i=`nmat'(-1)1 {
|
||
|
local m: word `i' of `mnames'
|
||
|
eret matrix `m' = ``m''
|
||
|
}
|
||
|
eret matrix count = `count'
|
||
|
end
|
||
|
|
||
|
|
||
|
* 6. estpost_correlate: wrapper for -correlate-
|
||
|
prog estpost_correlate, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax varlist [if] [in] [aw fw iw pw] [, ESample Quietly ///
|
||
|
LISTwise CASEwise ///
|
||
|
Matrix noHalf Print(real 1) /*Covariance*/ Bonferroni SIDak ]
|
||
|
if "`casewise'"!="" local listwise listwise
|
||
|
if "`bonferroni'"!="" & "`sidak'"!="" {
|
||
|
di as err "only one of bonferroni and sidak allowed"
|
||
|
exit 198
|
||
|
}
|
||
|
local pw = ("`weight'"=="pweight")
|
||
|
if `:list sizeof varlist'<=1 & `"`matrix'"'=="" {
|
||
|
di as err "too few variables specified"
|
||
|
exit 102
|
||
|
}
|
||
|
if `"`matrix'"'!="" & `"`half'"'!="" local fullmatrix fullmatrix
|
||
|
|
||
|
// sample
|
||
|
if "`listwise'"!="" marksample touse
|
||
|
else {
|
||
|
marksample touse, nov
|
||
|
_estpost_markout2 `touse' `varlist'
|
||
|
}
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// gather results
|
||
|
tempname b rho pval count
|
||
|
if "`bonferroni'`sidak'"!="" {
|
||
|
local nvars : list sizeof varlist
|
||
|
local k = `nvars' * (`nvars'-1) / 2
|
||
|
}
|
||
|
foreach depvar of local varlist {
|
||
|
if `"`fullmatrix'"'!="" {
|
||
|
local indepvars `varlist'
|
||
|
}
|
||
|
else if `"`matrix'"'!="" {
|
||
|
local indepvars `depvar' `ferest()'
|
||
|
}
|
||
|
else {
|
||
|
local indepvars `ferest()'
|
||
|
}
|
||
|
foreach v of local indepvars {
|
||
|
qui reg `depvar' `v' [`weight'`exp'] if `touse'
|
||
|
local r = sqrt(e(r2)) * (-1)^(_b[`v']<0)
|
||
|
local n = e(N)
|
||
|
mat `b' = nullmat(`b'), `r'
|
||
|
if "`depvar'"=="`v'" {
|
||
|
mat `rho' = nullmat(`rho'), `r'
|
||
|
mat `count' = nullmat(`count'), `n'
|
||
|
mat `pval' = nullmat(`pval'), .z
|
||
|
continue
|
||
|
}
|
||
|
local p = Ftail(e(df_m), e(df_r), e(F))
|
||
|
if `pw' {
|
||
|
qui reg `v' `depvar' [`weight'`exp'] if `touse'
|
||
|
local p = max(`p', Ftail(e(df_m), e(df_r), e(F)))
|
||
|
}
|
||
|
if "`bonferroni'"!="" {
|
||
|
local p = min(1, `k'*`p')
|
||
|
}
|
||
|
else if "`sidak'"!="" {
|
||
|
local p = min(1, 1 - (1-`p')^`k')
|
||
|
}
|
||
|
if `p'>`print' {
|
||
|
local r .z
|
||
|
local n .z
|
||
|
local p .z
|
||
|
}
|
||
|
mat `rho' = nullmat(`rho'), `r'
|
||
|
mat `count' = nullmat(`count'), `n'
|
||
|
mat `pval' = nullmat(`pval'), `p'
|
||
|
}
|
||
|
if `"`matrix'`fullmatrix'"'=="" {
|
||
|
local colnames `indepvars'
|
||
|
local depname `depvar'
|
||
|
continue, break
|
||
|
}
|
||
|
foreach v of local indepvars {
|
||
|
local colnames `"`colnames'`depvar':`v' "'
|
||
|
}
|
||
|
}
|
||
|
mat coln `b' = `colnames'
|
||
|
mat coln `rho' = `colnames'
|
||
|
mat coln `count' = `colnames'
|
||
|
mat coln `pval' = `colnames'
|
||
|
local vce `"`e(vce)'"' // from last -regress- call
|
||
|
local vcetype `"`e(vcetype)'"'
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
mat `res' = `b'', `rho'', `pval'', `count''
|
||
|
mat coln `res' = e(b) e(rho) e(p) e(count)
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g) nodotz
|
||
|
}
|
||
|
else {
|
||
|
matlist `res', nohalf lines(oneline) rowtitle(`depname') nodotz
|
||
|
}
|
||
|
mat drop `res'
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local V
|
||
|
if c(stata_version)<9 { // b and V required in Stata 8
|
||
|
tempname b
|
||
|
mat `V' = `b'' * `b' * 0
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `b' `V', depname(`depname') obs(`N') `esample'
|
||
|
eret local vcetype `"`vcetype'"'
|
||
|
eret local vce `"`vce'"'
|
||
|
eret local wexp `"`exp'"'
|
||
|
eret local wtype `"`weight'"'
|
||
|
eret local depvar `depname'
|
||
|
eret local subcmd "correlate"
|
||
|
eret local cmd "estpost"
|
||
|
eret matrix count = `count'
|
||
|
eret matrix p = `pval'
|
||
|
eret matrix rho = `rho'
|
||
|
end
|
||
|
|
||
|
|
||
|
* 7. estpost_stci: wrapper for -stci-
|
||
|
prog estpost_stci, eclass
|
||
|
version 9.2 // Stata 8 not supported because levelsof is used
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax [if] [in] [ , ESample Quietly by(varname) ///
|
||
|
Median Rmean Emean p(numlist >0 <100 integer max=1) ///
|
||
|
CCorr Level(real `c(level)') ]
|
||
|
local stat "p50"
|
||
|
if `"`p'"'!="" {
|
||
|
local stat `"p`p'"'
|
||
|
local p `"p(`p')"'
|
||
|
}
|
||
|
else if "`rmean'"!="" local stat "rmean"
|
||
|
else if "`emean'"!="" local stat "emean"
|
||
|
|
||
|
// sample
|
||
|
marksample touse
|
||
|
if `"`by'"'!="" {
|
||
|
markout `touse' `by', strok
|
||
|
}
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// get results
|
||
|
tempname _`stat' se N_sub lb ub
|
||
|
if "`by'"!="" {
|
||
|
qui levelsof `by' if `touse', local(levels)
|
||
|
capt confirm string variable `by'
|
||
|
if _rc {
|
||
|
local vallab: value label `by'
|
||
|
if `"`vallab'"'!="" {
|
||
|
_estpost_namesandlabels `by' `"`levels'"' // sets names, savenames, labels
|
||
|
}
|
||
|
else {
|
||
|
local names `"`levels'"'
|
||
|
local savenames `"`levels'"'
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
_estpost_namesandlabels `by' "" `"`levels'"' // sets names, savenames, labels
|
||
|
}
|
||
|
}
|
||
|
local levels `"`levels' "total""'
|
||
|
local names `"`names' "total""'
|
||
|
local savenames `"`savenames' "total""'
|
||
|
gettoken l rest : levels, quotes
|
||
|
while (`"`l'"'!="") {
|
||
|
if `"`rest'"'=="" local lcond
|
||
|
else local lcond `" & `by'==`l'"'
|
||
|
qui stci if `touse'`lcond', `median' `rmean' `emean' `p' `ccorr' level(`level')
|
||
|
mat `_`stat'' = nullmat(`_`stat''), r(`stat')
|
||
|
mat `se' = nullmat(`se'), r(se)
|
||
|
mat `N_sub' = nullmat(`N_sub'), r(N_sub)
|
||
|
mat `lb' = nullmat(`lb'), r(lb)
|
||
|
mat `ub' = nullmat(`ub'), r(ub)
|
||
|
gettoken l rest : rest, quotes
|
||
|
}
|
||
|
foreach m in _`stat' se N_sub lb ub {
|
||
|
mat coln ``m'' = `names'
|
||
|
}
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
mat `res' = `N_sub'', `_`stat''', `se'', `lb'', `ub''
|
||
|
mat coln `res' = e(count) e(`stat') e(se) e(lb) e(ub)
|
||
|
di as txt "(confidence level is " `level' "%)"
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g) nodotz
|
||
|
}
|
||
|
else {
|
||
|
mat rown `res' = `savenames'
|
||
|
matlist `res', nohalf lines(rowtotal) nodotz
|
||
|
}
|
||
|
mat drop `res'
|
||
|
if `"`labels'"'!="" {
|
||
|
di _n as txt "labels saved in macro e(labels)"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local b
|
||
|
local V
|
||
|
if c(stata_version)<9 { // b and V required in Stata 8
|
||
|
tempname b V
|
||
|
mat `b' = `_`stat'' \ J(1, colsof(`_`stat''), 0)
|
||
|
mat `b' = `b'[2,1...]
|
||
|
mat `V' = `b'' * `b'
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `b' `V', obs(`N') `esample'
|
||
|
eret scalar level = `level'
|
||
|
|
||
|
eret local ccorr `ccorr'
|
||
|
eret local labels `"`labels'"'
|
||
|
eret local subcmd "stci"
|
||
|
eret local cmd "estpost"
|
||
|
|
||
|
eret matrix ub = `ub'
|
||
|
eret matrix lb = `lb'
|
||
|
eret matrix se = `se'
|
||
|
eret matrix `stat' = `_`stat''
|
||
|
eret matrix count = `N_sub'
|
||
|
end
|
||
|
|
||
|
|
||
|
* 8. estpost_ci: wrapper for -ci-
|
||
|
prog estpost_ci, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax [varlist] [if] [in] [aw fw], [ ESample Quietly ///
|
||
|
LISTwise CASEwise Level(real `c(level)') ///
|
||
|
Binomial EXAct WAld Wilson Agresti Jeffreys ///
|
||
|
Poisson Exposure(varname) ///
|
||
|
]
|
||
|
if "`casewise'"!="" local listwise listwise
|
||
|
if "`exposure'"!="" local exposureopt "exposure(`exposure')"
|
||
|
if "`binomial'"!="" & "`exact'`wald'`wilson'`agresti'`jeffreys'"=="" local exact exact
|
||
|
|
||
|
// sample
|
||
|
if "`listwise'"!="" marksample touse
|
||
|
else {
|
||
|
marksample touse, nov
|
||
|
_estpost_markout2 `touse' `varlist'
|
||
|
}
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// gather results
|
||
|
local mnames se lb ub
|
||
|
tempname mean count `mnames'
|
||
|
local i 0
|
||
|
foreach v of local varlist {
|
||
|
local ++i
|
||
|
qui ci `v' if `touse' [`weight'`exp'], level(`level') ///
|
||
|
`binomial' `exact' `wald' `wilson' `agresti' `jeffreys' ///
|
||
|
`poisson' `exposureopt'
|
||
|
if r(N)>=. continue
|
||
|
mat `mean' = nullmat(`mean'), r(mean)
|
||
|
mat `count' = nullmat(`count'), r(N)
|
||
|
foreach m of local mnames {
|
||
|
mat ``m'' = nullmat(``m''), r(`m')
|
||
|
}
|
||
|
local rnames "`rnames' `v'"
|
||
|
}
|
||
|
capt confirm matrix `count'
|
||
|
if _rc {
|
||
|
di as txt "nothing to post"
|
||
|
eret clear
|
||
|
exit
|
||
|
}
|
||
|
foreach m in mean count `mnames' {
|
||
|
mat coln ``m'' = `rnames'
|
||
|
}
|
||
|
if "`listwise'"=="" { // update sample
|
||
|
if colsof(`count') < `: list sizeof varlist' {
|
||
|
_estpost_markout2 `touse' `rnames'
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
mat `res' = `mean'', `count''
|
||
|
local rescoln "e(b) e(count)"
|
||
|
foreach m of local mnames {
|
||
|
mat `res' = `res', ``m'''
|
||
|
local rescoln `rescoln' e(`m')
|
||
|
}
|
||
|
mat coln `res' = `rescoln'
|
||
|
di as txt "(confidence level is " `level' "%)"
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g)
|
||
|
}
|
||
|
else {
|
||
|
matlist `res', nohalf lines(oneline)
|
||
|
}
|
||
|
mat drop `res'
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local V
|
||
|
if c(stata_version)<9 { // b and V required in Stata 8
|
||
|
tempname V
|
||
|
mat `V' = diag(vecdiag(`se'' * `se'))
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `mean' `V', obs(`N') `esample'
|
||
|
|
||
|
eret scalar k = colsof(`count')
|
||
|
eret scalar level = `level'
|
||
|
|
||
|
eret local wexp `"`exp'"'
|
||
|
eret local wtype `"`weight'"'
|
||
|
eret local exposure "`exposure'"
|
||
|
eret local poisson "`poisson'"
|
||
|
eret local binomial "`exact'`wald'`wilson'`agresti'`jeffreys'"
|
||
|
eret local subcmd "ci"
|
||
|
eret local cmd "estpost"
|
||
|
|
||
|
local nmat: list sizeof mnames
|
||
|
forv i=`nmat'(-1)1 {
|
||
|
local m: word `i' of `mnames'
|
||
|
eret matrix `m' = ``m''
|
||
|
}
|
||
|
eret matrix count = `count'
|
||
|
end
|
||
|
|
||
|
|
||
|
* 9. estpost_prtest: wrapper for -prtest- (two-sample)
|
||
|
prog estpost_prtest, eclass
|
||
|
version 8.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax varlist(numeric) [if] [in] , by(varname) [ ESample Quietly ///
|
||
|
LISTwise CASEwise ]
|
||
|
if "`casewise'"!="" local listwise listwise
|
||
|
|
||
|
// sample
|
||
|
if "`listwise'"!="" marksample touse
|
||
|
else {
|
||
|
marksample touse, nov
|
||
|
_estpost_markout2 `touse' `varlist'
|
||
|
}
|
||
|
markout `touse' `by', strok
|
||
|
qui count if `touse'
|
||
|
local N = r(N)
|
||
|
if `N'==0 error 2000
|
||
|
|
||
|
// gather results
|
||
|
local nvars: list sizeof varlist
|
||
|
tempname diff count
|
||
|
mat `count' = J(1, `nvars', .)
|
||
|
mat coln `count' = `varlist'
|
||
|
mat `diff' = `count'
|
||
|
local mnames se se0 z p_l p p_u N_1 P_1 N_2 P_2
|
||
|
foreach m of local mnames {
|
||
|
tempname `m'
|
||
|
mat ``m'' = `count'
|
||
|
}
|
||
|
local i 0
|
||
|
foreach v of local varlist {
|
||
|
local ++i
|
||
|
qui prtest `v' if `touse', by(`by')
|
||
|
mat `count'[1,`i'] = r(N_1) + r(N_2)
|
||
|
mat `diff'[1,`i'] = r(P_1) - r(P_2)
|
||
|
mat `se'[1,`i'] = sqrt(r(P_1)*(1-r(P_1))/r(N_1) + r(P_2)*(1-r(P_2))/r(N_2))
|
||
|
mat `se0'[1,`i'] = `diff'[1,`i'] / r(z)
|
||
|
mat `p_l'[1,`i'] = normal(r(z))
|
||
|
mat `p'[1,`i'] = (1-normal(abs(r(z))))*2
|
||
|
mat `p_u'[1,`i'] = 1-normal(r(z))
|
||
|
foreach m in z N_1 P_1 N_2 P_2 {
|
||
|
mat ``m''[1,`i'] = r(`m')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
tempname res
|
||
|
mat `res' = `diff'', `count''
|
||
|
local rescoln "e(b) e(count)"
|
||
|
foreach m of local mnames {
|
||
|
mat `res' = `res', ``m'''
|
||
|
local rescoln `rescoln' e(`m')
|
||
|
}
|
||
|
mat coln `res' = `rescoln'
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g)
|
||
|
}
|
||
|
else {
|
||
|
matlist `res', nohalf lines(oneline)
|
||
|
}
|
||
|
mat drop `res'
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
local V
|
||
|
if c(stata_version)<9 { // b and V required in Stata 8
|
||
|
tempname V
|
||
|
mat `V' = diag(vecdiag(`se'' * `se'))
|
||
|
}
|
||
|
if "`esample'"!="" local esample esample(`touse')
|
||
|
eret post `diff' `V', obs(`N') `esample'
|
||
|
|
||
|
eret scalar k = `nvars'
|
||
|
|
||
|
eret local wexp `"`exp'"'
|
||
|
eret local wtype `"`weight'"'
|
||
|
eret local byvar "`by'"
|
||
|
eret local subcmd "prtest"
|
||
|
eret local cmd "estpost"
|
||
|
|
||
|
local nmat: list sizeof mnames
|
||
|
forv i=`nmat'(-1)1 {
|
||
|
local m: word `i' of `mnames'
|
||
|
eret matrix `m' = ``m''
|
||
|
}
|
||
|
eret matrix count = `count'
|
||
|
end
|
||
|
|
||
|
|
||
|
* 10. estpost__svy_tabulate: wrapper for -svy:tabulate-
|
||
|
prog estpost__svy_tabulate
|
||
|
version 9.2
|
||
|
local caller : di _caller()
|
||
|
_on_colon_parse `0'
|
||
|
local svyopts `"svyopts(`s(before)')"'
|
||
|
local 0 `"`s(after)'"'
|
||
|
syntax varlist(min=1 max=2) [if] [in] [ , * ]
|
||
|
if `:list sizeof varlist'==1 {
|
||
|
version `caller': _svy_tabulate_oneway `varlist' `if' `in', ///
|
||
|
`svyopts' `options'
|
||
|
}
|
||
|
else {
|
||
|
version `caller': _svy_tabulate_twoway `varlist' `if' `in', ///
|
||
|
`svyopts' `options'
|
||
|
}
|
||
|
end
|
||
|
prog _svy_tabulate_oneway
|
||
|
version 9.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax varname [if] [in] [, ESample Quietly ///
|
||
|
svyopts(str asis) MISSing Level(cilevel) ///
|
||
|
noTOTal noMARGinals noLabel PROPortion PERcent ///
|
||
|
CELl COUnt se ci deff deft * ]
|
||
|
if "`marginals'"!="" local total "nototal"
|
||
|
else if "`total'"!="" local marginals "nomarginals"
|
||
|
|
||
|
// run svy:tabulate
|
||
|
`quietly' svy `svyopts' : tabulate `varlist' `if' `in', ///
|
||
|
level(`level') `cell' `count' `se' `ci' `deff' `deft' ///
|
||
|
`missing' `marginals' `label' `proportion' `percent' `options'
|
||
|
if "`count'"!="" & "`cell'`se'`ci'`deff'`deft'"=="" { // => return count in e(b)
|
||
|
quietly svy `svyopts' : tabulate `varlist' `if' `in', count se ///
|
||
|
level(`level') `missing' `marginals' `label' `proportion' `percent' `options'
|
||
|
}
|
||
|
|
||
|
// get labels
|
||
|
qui levelsof `varlist' if e(sample), `missing' local(levels)
|
||
|
local R : list sizeof levels
|
||
|
if e(r)!=`R' {
|
||
|
di as err "unexpected error; number of rows unequal number of levels"
|
||
|
exit 499
|
||
|
}
|
||
|
capt confirm string variable `varlist'
|
||
|
if _rc {
|
||
|
if "`label'"=="" {
|
||
|
_estpost_namesandlabels `varlist' "`levels'" // sets names, savenames, labels
|
||
|
}
|
||
|
else {
|
||
|
_estpost_namesandlabels "" "`levels'" // sets names, savenames, labels
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
_estpost_namesandlabels "" "" `"`levels'"' // sets names, savenames, labels
|
||
|
}
|
||
|
|
||
|
// collect results
|
||
|
tempname cell count obs b se lb ub deff deft
|
||
|
local N_pop = cond(e(N_subpop)<., e(N_subpop), e(N_pop))
|
||
|
local N_obs = cond(e(N_sub)<., e(N_sub), e(N))
|
||
|
local tval = invttail(e(df_r), (100-`level')/200)
|
||
|
mat `cell' = e(Prop)'
|
||
|
mat `count' = `cell' * `N_pop'
|
||
|
capture confirm matrix e(ObsSub)
|
||
|
if _rc {
|
||
|
mat `obs' = e(Obs)'
|
||
|
}
|
||
|
else {
|
||
|
mat `obs' = e(ObsSub)'
|
||
|
}
|
||
|
capture confirm matrix e(Deff)
|
||
|
if _rc local DEFF ""
|
||
|
else {
|
||
|
local DEFF deff
|
||
|
mat `deff' = e(Deff)
|
||
|
}
|
||
|
capture confirm matrix e(Deft)
|
||
|
if _rc local DEFT ""
|
||
|
else {
|
||
|
local DEFT deft
|
||
|
mat `deft' = e(Deft)
|
||
|
}
|
||
|
mat `b' = e(b)
|
||
|
mata: st_matrix(st_local("se"), sqrt(diagonal(st_matrix("e(V)")))')
|
||
|
if "`total'"=="" {
|
||
|
mat `cell' = `cell', 1
|
||
|
mat `count' = `count', `N_pop'
|
||
|
mat `obs' = `obs', `N_obs'
|
||
|
if "`DEFF'"!="" mat `deff' = `deff', .z
|
||
|
if "`DEFT'"!="" mat `deft' = `deft', .z
|
||
|
if e(setype)=="count" {
|
||
|
mat `b' = `b', `N_pop'
|
||
|
mat `se' = `se', sqrt(el(e(V_col),1,1))
|
||
|
}
|
||
|
else { // e(setype)=="cell"
|
||
|
mat `b' = `b', 1
|
||
|
mat `se' = `se', 0
|
||
|
}
|
||
|
local names `"`names' "Total""'
|
||
|
local savenames `"`savenames' "Total""'
|
||
|
local linesopt "lines(rowtotal)"
|
||
|
|
||
|
}
|
||
|
if e(setype)!="count" {
|
||
|
mata: st_matrix( st_local("lb"), invlogit( ///
|
||
|
logit(st_matrix(st_local("b"))) - strtoreal(st_local("tval")) * ///
|
||
|
st_matrix(st_local("se")) :/ ///
|
||
|
(st_matrix(st_local("b")) :* (1 :- st_matrix(st_local("b"))))))
|
||
|
mata: st_matrix( st_local("ub"), invlogit( ///
|
||
|
logit(st_matrix(st_local("b"))) + strtoreal(st_local("tval")) * ///
|
||
|
st_matrix(st_local("se")) :/ ///
|
||
|
(st_matrix(st_local("b")) :* (1 :- st_matrix(st_local("b"))))))
|
||
|
if "`total'"=="" {
|
||
|
mat `lb'[1, colsof(`lb')] = .z
|
||
|
mat `ub'[1, colsof(`ub')] = .z
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
mata: st_matrix( st_local("lb"), st_matrix(st_local("b")) - ///
|
||
|
strtoreal(st_local("tval")) * st_matrix(st_local("se")) )
|
||
|
mata: st_matrix( st_local("ub"), st_matrix(st_local("b")) + ///
|
||
|
strtoreal(st_local("tval")) * st_matrix(st_local("se")) )
|
||
|
}
|
||
|
foreach m in cell count obs b se lb ub `DEFF' `DEFT' {
|
||
|
capt mat coln ``m'' = `names'
|
||
|
}
|
||
|
if "`percent'"!="" {
|
||
|
mat `cell' = `cell' * 100
|
||
|
if e(setype)!="count" {
|
||
|
mat `b' = `b' * 100
|
||
|
mat `se' = `se' * 100
|
||
|
mat `lb' = `lb' * 100
|
||
|
mat `ub' = `ub' * 100
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
/*
|
||
|
tempname res
|
||
|
mat `res' = `b'', `se'', `lb'', `ub'', `deff'', `deft'' ///, `cell'', `count'', `obs''
|
||
|
mat coln `res' = e(b) e(se) e(lb) e(ub) e(deff) e(deft) /// e(cell) e(count) e(obs)
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g) nodotz
|
||
|
}
|
||
|
else {
|
||
|
mat rown `res' = `savenames'
|
||
|
matlist `res', nohalf `linesopt' rowtitle(`varlist') nodotz
|
||
|
}
|
||
|
mat drop `res'
|
||
|
*/
|
||
|
local plabel = cond("`percent'"!="","percentages","proportions")
|
||
|
local blabel = cond("`e(setype)'"=="count", "weighted counts", "`e(setype)' `plabel'")
|
||
|
di _n as txt "saved vectors:"
|
||
|
di as txt %20s "e(b) = " " " as res "`blabel'"
|
||
|
di as txt %20s "e(se) = " " " as res "standard errors of `blabel'"
|
||
|
di as txt %20s "e(lb) = " " " as res "lower `level'% confidence bounds for `blabel'"
|
||
|
di as txt %20s "e(ub) = " " " as res "upper `level'% confidence bounds for `blabel'"
|
||
|
if "`DEFF'"!="" ///
|
||
|
di as txt %20s "e(deff) = " " " as res "deff for variances of `blabel'"
|
||
|
if "`DEFT'"!="" ///
|
||
|
di as txt %20s "e(deft) = " " " as res "deft for variances of `blabel'"
|
||
|
di as txt %20s "e(cell) = " " " as res "cell `plabel'"
|
||
|
di as txt %20s "e(count) = " " " as res "weighted counts"
|
||
|
di as txt %20s "e(obs) = " " " as res "number of observations"
|
||
|
if `"`labels'"'!="" {
|
||
|
di _n as txt "row labels saved in macro e(labels)"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
erepost b=`b', cmd(estpost) nov `esample'
|
||
|
qui estadd local labels `"`labels'"'
|
||
|
qui estadd local subcmd "tabulate"
|
||
|
qui estadd scalar level = `level'
|
||
|
foreach m in obs count cell `DEFT' `DEFF' ub lb se {
|
||
|
qui estadd matrix `m' = ``m'', replace
|
||
|
}
|
||
|
end
|
||
|
prog _svy_tabulate_twoway
|
||
|
version 9.2
|
||
|
local caller : di _caller() // not used
|
||
|
|
||
|
// syntax
|
||
|
syntax varlist(min=1 max=2) [if] [in] [, ESample Quietly ///
|
||
|
svyopts(str asis) MISSing Level(cilevel) ///
|
||
|
noTOTal noMARGinals noLabel PROPortion PERcent ///
|
||
|
CELl COUnt COLumn row se ci deff deft * ]
|
||
|
if "`marginals'"!="" local total "nototal"
|
||
|
else if "`total'"!="" local marginals "nomarginals"
|
||
|
|
||
|
// run svy:tabulate
|
||
|
`quietly' svy `svyopts' : tabulate `varlist' `if' `in', ///
|
||
|
level(`level') `cell' `count' `column' `row' `se' `ci' `deff' `deft' ///
|
||
|
`missing' `marginals' `label' `proportion' `percent' `options'
|
||
|
if `: word count `count' `column' `row''==1 & "`cell'`se'`ci'`deff'`deft'"=="" {
|
||
|
quietly svy `svyopts' : tabulate `varlist' `if' `in', `count' `column' `row' se ///
|
||
|
level(`level') `missing' `marginals' `label' `proportion' `percent' `options'
|
||
|
}
|
||
|
|
||
|
// get labels
|
||
|
local rvar `"`e(rowvar)'"'
|
||
|
qui levelsof `rvar' if e(sample), `missing' local(levels)
|
||
|
local R : list sizeof levels
|
||
|
if e(r)!=`R' {
|
||
|
di as err "unexpected error; number of rows unequal number of rowvar levels"
|
||
|
exit 499
|
||
|
}
|
||
|
capt confirm string variable `rvar'
|
||
|
if _rc {
|
||
|
if "`label'"=="" {
|
||
|
_estpost_namesandlabels `rvar' "`levels'" // sets names, savenames, labels
|
||
|
}
|
||
|
else {
|
||
|
_estpost_namesandlabels "" "`levels'" // sets names, savenames, labels
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
_estpost_namesandlabels "" "" `"`levels'"' // sets names, savenames, labels
|
||
|
}
|
||
|
local cvar `"`e(colvar)'"'
|
||
|
qui levelsof `cvar' if e(sample), `missing' local(levels)
|
||
|
local C : list sizeof levels
|
||
|
if e(c)!=`C' {
|
||
|
di as err "unexpected error; number of column unequal number of colvar levels"
|
||
|
exit 499
|
||
|
}
|
||
|
local savenames0 `"`savenames'"'
|
||
|
local savenames
|
||
|
capt confirm string variable `cvar'
|
||
|
if _rc {
|
||
|
if "`label'"=="" {
|
||
|
_estpost_eqnamesandlabels `cvar' "`levels'" // sets eqnames, eqlabels
|
||
|
}
|
||
|
else {
|
||
|
_estpost_eqnamesandlabels "" "`levels'" // sets eqnames, eqlabels
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
_estpost_eqnamesandlabels "" "" `"`levels'"' // sets eqnames, eqlabels
|
||
|
}
|
||
|
|
||
|
// collect results
|
||
|
tempname tmp cell row col count obs b se lb ub deff deft
|
||
|
local N_pop = cond(e(N_subpop)<., e(N_subpop), e(N_pop))
|
||
|
local N_obs = cond(e(N_sub)<., e(N_sub), e(N))
|
||
|
local tval = invttail(e(df_r), (100-`level')/200)
|
||
|
mat `cell' = e(Prop) // r x c matrix
|
||
|
mat `cell' = (`cell', `cell' * J(`C',1,1)) \ (J(1,`R',1) * `cell', 1)
|
||
|
mat `count' = `cell' * `N_pop'
|
||
|
mat `tmp' = `cell'[1..., `C'+1]
|
||
|
mata: st_matrix(st_local("row"), st_matrix(st_local("cell")) :/ ///
|
||
|
st_matrix(st_local("tmp")))
|
||
|
mat `tmp' = `cell'[`R'+1, 1...]
|
||
|
mata: st_matrix(st_local("col"), st_matrix(st_local("cell")) :/ ///
|
||
|
st_matrix(st_local("tmp")))
|
||
|
mat drop `tmp'
|
||
|
capture confirm matrix e(ObsSub)
|
||
|
if _rc {
|
||
|
mat `obs' = e(Obs) // r x c matrix
|
||
|
}
|
||
|
else {
|
||
|
mat `obs' = e(ObsSub) // r x c matrix
|
||
|
}
|
||
|
capt confirm matrix e(Deff)
|
||
|
if _rc local DEFF ""
|
||
|
else {
|
||
|
local DEFF deff
|
||
|
mat `deff' = e(Deff) // vector
|
||
|
}
|
||
|
capt confirm matrix e(Deft)
|
||
|
if _rc local DEFT ""
|
||
|
else {
|
||
|
local DEFT deft
|
||
|
mat `deft' = e(Deft) // vector
|
||
|
}
|
||
|
mat `b' = e(b) // vector
|
||
|
mata: st_matrix(st_local("se"), sqrt(diagonal(st_matrix("e(V)")))') // vector
|
||
|
if e(setype)=="count" local btype count
|
||
|
else if e(setype)=="row" local btype row
|
||
|
else if e(setype)=="column" local btype col
|
||
|
else local btype cell
|
||
|
foreach m in `DEFF' `DEFT' b se { // vector -> r x c matrix
|
||
|
forv r = 1/`R' {
|
||
|
local from = (`r'-1)*`C' + 1
|
||
|
local to = `r'*`C'
|
||
|
mat `tmp' = nullmat(`tmp') \ ``m''[1, `from'..`to']
|
||
|
}
|
||
|
mat drop ``m''
|
||
|
mat rename `tmp' ``m''
|
||
|
}
|
||
|
if "`total'"=="" {
|
||
|
mat `obs' = (`obs', `obs' * J(`C',1,1)) \ (J(1,`R',1) * `obs', `N_obs')
|
||
|
if "`DEFF'"!="" mat `deff' = (`deff', e(Deff_row)') \ (e(Deff_col), .z)
|
||
|
if "`DEFT'"!="" mat `deft' = (`deft', e(Deft_row)') \ (e(Deft_col), .z)
|
||
|
mat `b' = (`b', ``btype''[1..`R',`C'+1]) \ ``btype''[`R'+1,1...]
|
||
|
mata: st_matrix(st_local("se"), ///
|
||
|
((st_matrix(st_local("se")), sqrt(diagonal(st_matrix("e(V_row)")))) ///
|
||
|
\ (sqrt(diagonal(st_matrix("e(V_col)")))', .z)))
|
||
|
if "`btype'"=="row" {
|
||
|
mat `se' = `se'[1..., 1..`C'], J(`R'+1, 1, .z)
|
||
|
}
|
||
|
else if "`btype'"=="col" {
|
||
|
mat `se' = `se'[1..`R', 1...] \ J(1, `C'+1, .z)
|
||
|
}
|
||
|
local names `"`names' "Total""'
|
||
|
local savenames0 `"`savenames0' "Total""'
|
||
|
local eqnames `"`eqnames' "Total""'
|
||
|
}
|
||
|
else {
|
||
|
mat `cell' = `cell'[1..`R', 1..`C']
|
||
|
mat `count' = `count'[1..`R', 1..`C']
|
||
|
mat `row' = `row'[1..`R', 1..`C']
|
||
|
mat `col' = `col'[1..`R', 1..`C']
|
||
|
}
|
||
|
if "`btype'"!="count" {
|
||
|
mata: st_matrix( st_local("lb"), invlogit( ///
|
||
|
logit(st_matrix(st_local("b"))) - strtoreal(st_local("tval")) * ///
|
||
|
st_matrix(st_local("se")) :/ ///
|
||
|
(st_matrix(st_local("b")) :* (1 :- st_matrix(st_local("b"))))))
|
||
|
mata: st_matrix( st_local("ub"), invlogit( ///
|
||
|
logit(st_matrix(st_local("b"))) + strtoreal(st_local("tval")) * ///
|
||
|
st_matrix(st_local("se")) :/ ///
|
||
|
(st_matrix(st_local("b")) :* (1 :- st_matrix(st_local("b"))))))
|
||
|
}
|
||
|
else {
|
||
|
mata: st_matrix( st_local("lb"), st_matrix(st_local("b")) - ///
|
||
|
strtoreal(st_local("tval")) * st_matrix(st_local("se")) )
|
||
|
mata: st_matrix( st_local("ub"), st_matrix(st_local("b")) + ///
|
||
|
strtoreal(st_local("tval")) * st_matrix(st_local("se")) )
|
||
|
}
|
||
|
if "`total'"=="" {
|
||
|
if "`btype'"=="row" {
|
||
|
mat `lb' = `lb'[1..., 1..`C'] , J(`R'+1, 1, .z)
|
||
|
mat `ub' = `ub'[1..., 1..`C'] , J(`R'+1, 1, .z)
|
||
|
}
|
||
|
else if "`btype'"=="col" {
|
||
|
mat `lb' = `lb'[1..`R', 1...] \ J(1, `C'+1, .z)
|
||
|
mat `ub' = `ub'[1..`R', 1...] \ J(1, `C'+1, .z)
|
||
|
}
|
||
|
else {
|
||
|
mat `lb'[`R'+1, `C'+1] = .z
|
||
|
mat `ub'[`R'+1, `C'+1] = .z
|
||
|
}
|
||
|
}
|
||
|
foreach m in cell count obs row col `DEFF' `DEFT' b se lb ub { // r x c matrix -> vector
|
||
|
mat rown ``m'' = `names'
|
||
|
gettoken eq rest : eqnames
|
||
|
forv c = 1/`=colsof(``m'')' {
|
||
|
mat roweq ``m'' = `"`eq'"'
|
||
|
mat `tmp' = nullmat(`tmp'), ``m''[1...,`c']'
|
||
|
gettoken eq rest : rest
|
||
|
}
|
||
|
mat drop ``m''
|
||
|
mat rename `tmp' ``m''
|
||
|
}
|
||
|
if "`percent'"!="" {
|
||
|
mat `cell' = `cell' * 100
|
||
|
mat `col' = `col' * 100
|
||
|
mat `row' = `row' * 100
|
||
|
if e(setype)!="count" {
|
||
|
mat `b' = `b' * 100
|
||
|
mat `se' = `se' * 100
|
||
|
mat `lb' = `lb' * 100
|
||
|
mat `ub' = `ub' * 100
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// display
|
||
|
if "`quietly'"=="" {
|
||
|
/*
|
||
|
forv c = 1/`=colsof(`cell')' {
|
||
|
local savenames `"`savenames' `savenames0'"'
|
||
|
}
|
||
|
tempname res
|
||
|
mat `res' = `b'', `se'', `lb'', `ub'', `deff'', `deft'', `cell'', `row'', `col'', `count'', `obs''
|
||
|
mat coln `res' = e(b) e(se) e(lb) e(ub) e(deff) e(deft) e(cell) e(row) e(col) e(count) e(obs)
|
||
|
if c(stata_version)<9 {
|
||
|
mat list `res', noheader nohalf format(%9.0g) nodotz
|
||
|
}
|
||
|
else {
|
||
|
mat rown `res' = `savenames'
|
||
|
di _n as res %-12s abbrev("`cvar'",12) as txt " {c |}{space 44}"
|
||
|
matlist `res', twidth(12) format(%9.0g) noblank nohalf ///
|
||
|
rowtitle(`rvar') nodotz
|
||
|
}
|
||
|
mat drop `res'
|
||
|
*/
|
||
|
local plabel = cond("`percent'"!="","percentages","proportions")
|
||
|
local blabel = cond("`e(setype)'"=="count", "weighted counts", "`e(setype)' `plabel'")
|
||
|
di _n as txt "saved vectors:"
|
||
|
di as txt %20s "e(b) = " " " as res "`blabel'"
|
||
|
di as txt %20s "e(se) = " " " as res "standard errors of `blabel'"
|
||
|
di as txt %20s "e(lb) = " " " as res "lower `level'% confidence bounds for `blabel'"
|
||
|
di as txt %20s "e(ub) = " " " as res "upper `level'% confidence bounds for `blabel'"
|
||
|
if "`DEFF'"!="" ///
|
||
|
di as txt %20s "e(deff) = " " " as res "deff for variances of `blabel'"
|
||
|
if "`DEFT'"!="" ///
|
||
|
di as txt %20s "e(deft) = " " " as res "deft for variances of `blabel'"
|
||
|
di as txt %20s "e(cell) = " " " as res "cell `plabel'"
|
||
|
di as txt %20s "e(row) = " " " as res "row `plabel'"
|
||
|
di as txt %20s "e(col) = " " " as res "column `plabel'"
|
||
|
di as txt %20s "e(count) = " " " as res "weighted counts"
|
||
|
di as txt %20s "e(obs) = " " " as res "number of observations"
|
||
|
if `"`labels'`eqlabels'"'!="" {
|
||
|
di ""
|
||
|
if `"`labels'"'!="" {
|
||
|
di as txt "row labels saved in macro e(labels)"
|
||
|
}
|
||
|
if `"`eqlabels'"'!="" {
|
||
|
di as txt "column labels saved in macro e(eqlabels)"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// post results
|
||
|
erepost b=`b', cmd(estpost) nov `esample'
|
||
|
qui estadd local eqlabels `"`eqlabels'"'
|
||
|
qui estadd local labels `"`labels'"'
|
||
|
qui estadd local subcmd "tabulate"
|
||
|
qui estadd scalar level = `level'
|
||
|
foreach m in obs count row col cell `DEFT' `DEFF' ub lb se {
|
||
|
qui estadd matrix `m' = ``m'', replace
|
||
|
}
|
||
|
end
|
||
|
|
||
|
* 11. estpost_margins: wrapper for -margins- (Stata 11)
|
||
|
prog estpost_margins, eclass
|
||
|
version 11
|
||
|
local caller : di _caller()
|
||
|
|
||
|
// syntax
|
||
|
_parse comma anything 0 : 0
|
||
|
syntax [ , /*ESample*/ Quietly ///
|
||
|
post * ]
|
||
|
if "`post'"!="" {
|
||
|
di as err "post not allowed"
|
||
|
exit 198
|
||
|
}
|
||
|
|
||
|
// run margins
|
||
|
`quietly' version `caller': margins `anything', `options'
|
||
|
|
||
|
// post results
|
||
|
capt postrtoe, noclear resize
|
||
|
if _rc<=1 { // -postrtoe- does not work, e.g., with -regress-
|
||
|
error _rc // _rc=1 (break)
|
||
|
exit
|
||
|
}
|
||
|
tempname b V
|
||
|
mat `b' = r(b)
|
||
|
mat `V' = r(V)
|
||
|
erepost b = `b' V = `V' /*, `esample'*/
|
||
|
foreach r in `:r(scalars)' {
|
||
|
eret scalar `r' = r(`r')
|
||
|
}
|
||
|
foreach r in `:r(macros)' {
|
||
|
eret local `r' `"`r(`r')'"'
|
||
|
}
|
||
|
tempname tmp
|
||
|
foreach r in `:r(matrices)' {
|
||
|
if inlist("`r'", "b", "V") continue
|
||
|
mat `tmp' = r(`r')
|
||
|
eret matrix `r' = `tmp'
|
||
|
}
|
||
|
end
|
||
|
|
||
|
* 99.
|
||
|
* copy of erepost.ado, version 1.0.1, Ben Jann, 30jul2007
|
||
|
* 14jan2009: noV option added => repost e(b) and remove e(V) if not specified
|
||
|
prog erepost, eclass
|
||
|
version 8.2
|
||
|
syntax [anything(equalok)] [, NOV cmd(str) noEsample Esample2(varname) REName ///
|
||
|
Obs(passthru) Dof(passthru) PROPerties(passthru) * ]
|
||
|
if "`esample'"!="" & "`esample2'"!="" {
|
||
|
di as err "only one allowed of noesample and esample()"
|
||
|
exit 198
|
||
|
}
|
||
|
// parse [b = b] [V = V]
|
||
|
if `"`anything'"'!="" {
|
||
|
tokenize `"`anything'"', parse(" =")
|
||
|
if `"`7'"'!="" error 198
|
||
|
if `"`1'"'=="b" {
|
||
|
if `"`2'"'=="=" & `"`3'"'!="" {
|
||
|
local b `"`3'"'
|
||
|
confirm matrix `b'
|
||
|
}
|
||
|
else error 198
|
||
|
if `"`4'"'=="V" {
|
||
|
if `"`5'"'=="=" & `"`6'"'!="" {
|
||
|
local v `"`6'"'
|
||
|
confirm matrix `b'
|
||
|
}
|
||
|
else error 198
|
||
|
}
|
||
|
else if `"`4'"'!="" error 198
|
||
|
}
|
||
|
else if `"`1'"'=="V" {
|
||
|
if `"`4'"'!="" error 198
|
||
|
if `"`2'"'=="=" & `"`3'"'!="" {
|
||
|
local v `"`3'"'
|
||
|
confirm matrix `v'
|
||
|
}
|
||
|
else error 198
|
||
|
}
|
||
|
else error 198
|
||
|
}
|
||
|
//backup existing e()'s
|
||
|
if "`esample2'"!="" {
|
||
|
local sample "`esample2'"
|
||
|
}
|
||
|
else if "`esample'"=="" {
|
||
|
tempvar sample
|
||
|
gen byte `sample' = e(sample)
|
||
|
}
|
||
|
local emacros: e(macros)
|
||
|
if `"`properties'"'!="" {
|
||
|
local emacros: subinstr local emacros "properties" "", word
|
||
|
}
|
||
|
foreach emacro of local emacros {
|
||
|
local e_`emacro' `"`e(`emacro')'"'
|
||
|
}
|
||
|
local escalars: e(scalars)
|
||
|
if `"`obs'"'!="" {
|
||
|
local escalars: subinstr local escalars "N" "", word
|
||
|
}
|
||
|
if `"`dof'"'!="" {
|
||
|
local escalars: subinstr local escalars "df_r" "", word
|
||
|
}
|
||
|
foreach escalar of local escalars {
|
||
|
tempname e_`escalar'
|
||
|
scalar `e_`escalar'' = e(`escalar')
|
||
|
}
|
||
|
local ematrices: e(matrices)
|
||
|
if "`v'"=="" & "`nov'"!="" { // added 14jan2009
|
||
|
local nov V
|
||
|
local ematrices : list ematrices - nov
|
||
|
}
|
||
|
if "`b'"=="" & `:list posof "b" in ematrices' {
|
||
|
tempname b
|
||
|
mat `b' = e(b)
|
||
|
}
|
||
|
if "`v'"=="" & `:list posof "V" in ematrices' {
|
||
|
tempname v
|
||
|
mat `v' = e(V)
|
||
|
}
|
||
|
local bV "b V"
|
||
|
local ematrices: list ematrices - bV
|
||
|
foreach ematrix of local ematrices {
|
||
|
tempname e_`ematrix'
|
||
|
matrix `e_`ematrix'' = e(`ematrix')
|
||
|
}
|
||
|
// rename
|
||
|
if "`b'"!="" & "`v'"!="" & "`rename'"!="" {
|
||
|
local eqnames: coleq `b', q
|
||
|
local vnames: colnames `b'
|
||
|
mat coleq `v' = `eqnames'
|
||
|
mat coln `v' = `vnames'
|
||
|
mat roweq `v' = `eqnames'
|
||
|
mat rown `v' = `vnames'
|
||
|
}
|
||
|
// post results
|
||
|
if "`esample'"=="" {
|
||
|
eret post `b' `v', esample(`sample') `obs' `dof' `properties' `options'
|
||
|
}
|
||
|
else {
|
||
|
eret post `b' `v', `obs' `dof' `properties' `options'
|
||
|
}
|
||
|
foreach emacro of local emacros {
|
||
|
eret local `emacro' `"`e_`emacro''"'
|
||
|
}
|
||
|
if `"`cmd'"'!="" {
|
||
|
eret local cmd `"`cmd'"'
|
||
|
}
|
||
|
foreach escalar of local escalars {
|
||
|
eret scalar `escalar' = scalar(`e_`escalar'')
|
||
|
}
|
||
|
foreach ematrix of local ematrices {
|
||
|
eret matrix `ematrix' = `e_`ematrix''
|
||
|
}
|
||
|
end
|