📄 brr.ado
字号:
}
if `"`reject'"' != "" {
local reject `"reject(`reject')"'
}
// -Display- options
local diopts level(`level') ///
`header' ///
`legend' ///
`verbose' ///
`table' ///
`efopt' ///
// blank
if `"`saving'"'=="" {
tempfile saving
local filetmp "yes"
}
else {
_prefix_saving `saving'
local saving `"`s(filename)'"'
if "`double'" == "" {
local double `"`s(double)'"'
}
local every `"`s(every)'"'
local replace `"`s(replace)'"'
}
if `"`keepesample'"' != "" & `"`subpop'"' == "" {
if "`cmdin'" == "" {
local preserved preserved
preserve
quietly `keepesample'
}
else {
quietly replace `touse' = 0 if ! e(sample)
quietly replace `subuse' = 0 if ! e(sample)
}
}
if "`:sortedby'" != "`sortvars'" {
sort `sortvars' `order'
}
quietly replace `touse' = 2 if `touse' == 0
quietly replace `subuse' = 2 if `subuse' == 0
quietly count if `touse' == 1
tempname nobs
scalar `nobs' = r(N)
if min(`creps',_N) <= 1 {
di as err "insufficient observations to perform brr"
exit 459
}
// restore subpop indicator to 0/1
quietly replace `subuse' = (`subuse' == 1)
// BRR temp pseudovalue variables
forval i = 1/`K' {
tempvar tv`i'
local pseudo `pseudo' `tv`i''
}
nobreak {
capture noisily break {
if "`eexpress'" == "(_b)" {
tempname esave
estimates store `esave'
}
if "`sortvars'" != "" {
sort `sortvars', stable
}
// prepare post
tempname postid
postfile `postid' `names' ///
using `"`saving'"', `double' `every' `replace'
local cmd1 `"cmd1(`version' `cmdname' `cmdargs')"'
local cmd2 `"cmd2(`cmdopts'`novar'`rest')"'
if "`brrw'" == "" {
_loop_brr `touse' `subuse' ///
`strid' `psuid' `pseudo', ///
command(`command') ///
express(`express') ///
`cmd1' `cmd2' ///
wvar(`wvar') ///
`pstropt' ///
h(`hadamard') ///
fay(`fay') ///
postid(`postid') ///
`dots' ///
`noisily' ///
`trace' ///
`reject' ///
// blank
}
else {
_loop_rw `touse' `subuse' `pseudo', ///
caller(BRR) ///
command(`command') ///
express(`express') ///
`cmd1' `cmd2' ///
rwvars(`brrw') ///
owvar(`wvar') ///
`pstropt' ///
postid(`postid') ///
`dots' ///
`noisily' ///
`trace' ///
`reject' ///
// blank
}
} // capture noisily break
local rc = c(rc)
// cleanup post
if "`postid'" != "" {
postclose `postid'
}
if "`esave'" != "" {
if `rc' {
quietly estimates drop `esave'
}
else {
quietly estimates restore `esave', drop
}
}
} // nobreak
if (`rc') exit `rc'
// load/save file with brr results
if "`preserved'" != "" {
restore
}
preserve
capture use `"`saving'"', clear
if c(rc) {
if inrange(c(rc),900,903) {
di as err ///
"insufficient memory to load file with brr results"
}
error c(rc)
}
label data `"brr: `cmdname'"'
char _dta[brr_command] `"`command'"'
char _dta[brr_cmdname] `"`cmdname'"'
char _dta[brr_names] `"`names'"'
char _dta[brr_strata] `"`strata'"'
char _dta[brr_su1] `"`psu'"'
char _dta[brr_wtype] `"`wtype'"'
char _dta[brr_wexp] `"`wexp'"'
char _dta[brr_rweights] `"`brrw'"'
char _dta[brr_N_pop] `"`=`npop''"'
if "`nstrata'" != "" {
char _dta[brr_N_strata] `"`nstrata'"'
char _dta[brr_N_psu] `"`=2*`nstrata''"'
}
// fix the column stripes
if "`eexpress'" == "(_b)" ///
& inlist("`cmdname'", "ologit", "oprobit") ///
& missing(e(version)) {
_prefix_relabel_eqns `b'
local k_eq = s(k_eq)
local k_aux = `k_eq'-1
}
local colna : colna `b'
local coleq : coleq `b', quote
local coleq : list clean coleq
if `"`: list uniq coleq'"' == "_" {
local coleq
}
forvalues i = 1/`K' {
local name : word `i' of `names'
char `name'[observed] `= `b'[1,`i'] '
local label = substr(`"`exp`i''"',1,80)
label variable `name' `"`label'"'
char `name'[expression] `"`exp`i''"'
local na : word `i' of `colna'
local eq : word `i' of `coleq'
char `name'[coleq] `eq'
char `name'[colname] `na'
if `i' <= `k_eexp' {
char `name'[is_eexp] 1
}
}
char _dta[brr_N] `=`nobs''
char _dta[brr_version] 1
if `"`filetmp'"' == "" {
quietly save `"`saving'"', replace
}
// saved results
tempname brr_v
capture noisily _brr_sum, `mse'
if c(rc) {
ereturn clear
exit c(rc)
}
mat `brr_v' = r(V)
restore
if "`eexpress'" == "(_b)" {
// make a copy of what is in -e()-, with some eXclusions
local xmac cmd _estimates_name chi2type clustvar novariance
local xsca F chi2 chi2_c p p_c ll ll_c ll0 ll_0 df_m ///
r2_p r2_a rmse rss mss singleton
local xmat b V
if "`e(cmd)'" != "`cmdname'" {
local ecmd `e(cmd)'
}
if "`cmdname'" == "heckman" {
local xsca `xsca' selambda
}
if "`cmdname'" == "intreg" {
local xsca `xsca' se_sigma
}
_e2r, xmac(`xmac') xsca(`xsca') xmat(`xmat') add
if "`e(depvar)'" != "" {
local depvar `e(depvar)'
if `:word count `depvar'' == 1 {
local depname depname(`depvar')
}
}
}
if "`:word 1 of `eexpress''" == "(_b)" {
tempname Cns
capture mat `Cns' = get(Cns)
if (c(rc)) local Cns
else {
// get constraints matrix for post
local cols = colsof(`Cns')
// note: if no other expressions were added, then the
// constraint matrix has 1 more column than the
// coefficient vector
if `cols' <= colsof(`b') {
// add columns of zeros for other statistics
local colsm1 = `cols'-1
local rows = rowsof(`Cns')
local fill = colsof(`b')-`colsm1'
tempname cns1 cns2
mat `cns1' = `Cns'[1...,1..`colsm1']
mat `cns2' = `Cns'[1...,`cols']
mat `Cns' = `cns1',J(`rows',`fill',0),`cns2'
matrix drop `cns1' `cns2'
}
}
}
quietly replace `touse' = (`touse'==1)
ereturn post `b' `brr_v' `Cns', esample(`touse') `depname'
// restore the copied elements back to -e()-
_r2e, xmat(b V)
ereturn scalar k_eq = `k_eq'
ereturn scalar k_exp = `k_exp'
ereturn scalar k_eexp = `k_eexp'
ereturn scalar k_extra = `k_extra'
if "`k_aux'" != "" {
ereturn scalar k_aux = `k_aux'
}
if `"`subpop'"' != "" {
local byopt by(`subuse') nby(1)
}
_svy `subuse' `wgt' ///
if e(sample), ///
`byopt' ///
novariance ///
// blank
ereturn scalar N_pop = `npop'
ereturn local N_sub
ereturn local N_subpop
ereturn local subpop
ereturn local srssubpop
if `"`subpop'"' != "" {
ereturn scalar N_sub = r(N_sub)
ereturn scalar N_subpop = r(N_subpop)
ereturn local subpop `"`subpop'"'
if "`vsrs'" != "" {
ereturn local srssubpop `srssub'
}
}
if "`brrw'" != "" {
ereturn local N_strata
ereturn local N_psu
}
else if "`strata'`psu'" == "" {
ereturn scalar N_strata = r(N_strata)
ereturn scalar N_psu = r(N_psu)
}
else {
capture _svy `subuse' if e(sample), ///
strata(`strata') ///
psu(`psu') ///
novariance ///
// blank
if c(rc) {
ereturn scalar singleton = 1
ereturn local N_strata
ereturn local N_psu
}
else {
ereturn scalar singleton = 0
ereturn scalar N_strata = r(N_strata)
ereturn scalar N_psu = r(N_psu)
}
}
ereturn local wtype `wtype'
ereturn local wexp `"`wexp'"'
if "`brrw'" == "" {
ereturn local strata1 `strata'
}
else {
ereturn local strata1
ereturn local brrweight `brrw'
}
ereturn local su1 `psu'
if !missing(e(stages)) {
forval i = 2/`e(stages)' {
ereturn local strata`i'
ereturn local su`i'
ereturn local fpc`i'
}
}
if "`posts'" != "" {
ereturn local poststrata `posts'
ereturn local postweight `postw'
ereturn scalar N_poststrata = `npost'
}
ereturn local adjust `adjust'
ereturn local estat_cmd svy_estat
if "`vsrs'" != "" {
ereturn matrix V_srs = `vsrs'
// NOTE: V_srswr must be posted before the next line
_svy_mkdeff
}
ereturn scalar N = `touseN'
if `"`title'"' != "" {
ereturn local title `"`title'"'
}
else {
_prefix_title `cmdname' "BRR results"
if "`e(prefix)'" == "svy" {
ereturn local title `"`r(title)'"'
}
else ereturn local title `"Survey: `r(title)'"'
}
forval i = 1/`K' {
ereturn local exp`i' `"`exp`i''"'
}
ereturn local command `"`:list retok command'"'
// NOTE: this must be the last thing posted to -e()-
ereturn local cmdname `cmdname'
ereturn local prefix svy
if "`eexpress'`k_exp'" != "(_b)0" {
ereturn local predict _no_predict
ereturn local cmd brr
}
else {
if !inlist("`e(predict)'", "", "_no_predict") {
// compute e(F) and e(df_m)
_prefix_model_test `cmdname', svy `adjust'
}
_svy_check_predict `cmdname'
if "`ecmd'" == "" {
ereturn local cmd `cmdname'
}
else ereturn local cmd `ecmd'
}
if "`e(cmd)'`first'" == "ivregfirst" {
_svy_ivreg_first, `diopts'
}
svy, `diopts'
end
program Check4Over, sclass
syntax [, over(passthru) * ]
if `"`over'"' != "" {
sreturn local hasover hasover
}
else sreturn local hasover
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -