📄 jackknife.ado
字号:
*! version 9.4.18 07apr2005
program jackknife, eclass sortpreserve
version 9, missing
local version : di "version " string(_caller()) ", missing:"
// version control
if _caller()<=6 {
`version' jknife_6 `0'
exit
}
capture _on_colon_parse `0'
if c(rc) | `"`s(after)'"' == "" {
gettoken old : 0 , qed(qed)
if `qed' {
// version control
`version' jknife_8 `0'
exit
}
if !c(rc) {
local 0 `"`s(before)'"'
}
// replay output
if replay() {
if "`e(vce)'" != "jackknife" {
error 301
}
Display `0'
exit
}
}
`version' JKnife `0'
end
program JKnife, eclass
version 9
local version : di "version " string(_caller()) ":"
// <my_stuff> : <command>
_on_colon_parse `0'
local command `"`s(after)'"'
local 0 `"`s(before)'"'
// quick check for -svy- and -nodrop- options
syntax [anything(name=exp_list equalok)] ///
[fw iw pw aw] [if] [in] [, ///
SVY ///
COEF /// for -logistic-
noDROP ///
Level(passthru) ///
FORCE ///
CLuster(passthru) /// cluster options
NOECLUSTER ///
IDcluster(string) ///
* /// other options
]
if "`svy'" != "" {
if "`cluster'" != "" {
di as err "option cluster() is not allowed with svy"
exit 198
}
_svy_newrule
}
_get_eformopts, soptions eformopts(`options') allowed(__all__)
local options `"`s(options)'"'
local efopt = cond(`"`s(opt)'"'=="",`"`s(eform)'"',`"`s(opt)'"')
if "`weight'" != "" {
local wgt [`weight'`exp']
}
// parse the command and check for conflicts
`version' _prefix_command jackknife `wgt' `if' `in' , ///
`svy' checkvce `coef' `efopt' `cluster' `level' ///
checkcluster : `command'
if `"`r(vce)'"' != "" {
di as err "option vce() not allowed"
exit 198
}
while inlist(`"`s(cmdname)'"', "svy", ///
"jackknife", "jknife", "jacknife") {
if `"`s(cmdname)'"' == "svy" {
local svy svy
}
if `"`s(cmdname)'"' == "svy" & `"`s(cmdargs)'"' != "" {
_svy_check_vce `vcetype'
if `"`s(vce)'"' != "jackknife" {
error 198
}
}
if `"`wgt'"' == "" & `"`s(wgt)'"' != "" {
local wgt `"[`s(wgt)']"'
}
local if `"`s(if)'"'
local in `"`s(in)'"'
local efopt `"`s(efopt)'"'
local options `"`options' `s(cmdopts)'"'
if `"`s(rest)'"' == "" {
`svy' `wgt' `if' `in, ///
`efopt' `cluster' `level' `options'
exit
}
`version' _prefix_command jackknife `wgt' `if' `in' , ///
svy checkvce `efopt' `cluster' `level' ///
checkcluster `s(rest)'
}
local version `"`s(version)'"'
local cmdname `"`s(cmdname)'"'
local cmdargs `"`s(anything)'"'
local wgt `"`s(wgt)'"'
local wtype `"`s(wtype)'"'
local wexp `"`s(wexp)'"'
local cmdif `"`s(if)'"'
local cmdin `"`s(in)'"'
local cmdopts `"`s(options)'"'
local cluster `"`s(cluster)'"'
local rest `"`s(rest)'"'
local efopt `"`s(efopt)'"'
local command `"`s(command)'"'
local level `"`s(level)'"'
if `"`efopt'"' != "" & !inlist(`"`:list retok exp_list'"', "", "_b") {
local efopt
}
if "`svy'" != "" {
// -_svy_check_cmdopts- resets -s()-
_svy_check_cmdopts `cmdname', `cmdopts'
local first `"`s(first)'"'
local cmdlog `"`s(log)'"'
}
local exclude bs bstrap bootstrap brr statsby
if `:list cmdname in exclude' ///
| ("`force'" == "" & substr("`cmdname'",1,3) == "svy") {
di as err "`cmdname' is not supported by jackknife"
exit 199
}
if "`s(replay)'" != "" {
if "`e(cmdname)'" != "`cmdname'" {
error 301
}
Display, `options' `cmdopts' `efopt' level(`level') `rest'
exit
}
is_svysum `cmdname'
local is_sum = r(is_svysum)
if "`svy'" != "" {
local svyopts SUBpop(passthru) noADJust TWOperstratum
}
// now check the rest of the options
local 0 `", `options'"'
syntax [, ///
noDOTS ///
NOCOUNT /// not documented
Eclass Eclass1 ///
N(string) ///
Rclass ///
KEEP ///
SAving(string) ///
DOUBle /// not documented
MSE MSE1 NOMSE ///
NOIsily /// "prefix" options
TRace ///
REJECT(string asis) ///
noHeader /// Display options
noLegend ///
notable ///
Verbose ///
TItle(string asis) ///
`svyopts' /// -svy- options
]
// NOTE: MSE1 exists just in case the `mse' option is specified twice
// due to -svyset-
// check expressions
tempname N touseN nobs wnclust
tempvar subuse touse clid ncl
mark `touse' `cmdif' `cmdin'
if `"`svy'"' != "" {
if `is_sum' {
Check4Over, `cmdopts'
local hasover `"`s(hasover)'"'
}
tempvar wvar
tempname npop nsub nsubpop nstrata npsu
if `"`subpop'"' != "" {
tempvar otouse
quietly gen byte `otouse' = `touse'
}
else local otouse `touse'
_svy_setup `touse' `subuse', ///
cmdname(`cmdname') ///
svy ///
jackknife ///
`subpop' ///
`hasover' ///
// blank
if "`r(wtype)'" != "" {
local wtype `"`r(wtype)'"'
local wexp `"`r(wexp)'"'
quietly gen double `wvar' `wexp'
local wgt [`wtype'=`wvar']
}
else {
quietly gen double `wvar' = `touse'
}
if "`mse'" == "" {
local mse `r(mse)'
}
local posts `"`r(poststrata)'"'
local postw `"`r(postweight)'"'
local subpop `"`r(subpop)'"'
local srssub `r(srssubpop)'
local jkrw `r(jkrweight)'
if "`jkrw'" != "" {
if "`keep'" != "" {
di as err ///
"option keep is not allowed with replicate weights"
exit 198
}
local omit 0
}
else {
local omit `r(N_strata_omit)'
local fpc `r(fpc1)'
local strata `r(strata1)'
local cluster `r(su1)'
_svy_check_fpc `otouse' "`fpc'" "`strata'"
}
if "`r(wtype)'" != "" {
sum `wvar' if `otouse', mean
scalar `npop' = r(sum)
}
else {
quietly count if `otouse'
scalar `npop' = r(N)
}
capture _svy `touse' if `touse' `wgt', ///
strata(`strata') ///
psu(`cluster') ///
novariance
if c(rc) {
ereturn scalar singleton = 1
scalar `nstrata' = .
scalar `npsu' = .
}
else {
ereturn scalar singleton = 0
scalar `nstrata' = r(N_strata)
scalar `npsu' = r(N_psu)
}
if `"`posts'"' != "" {
tempname postwvar
svygen post double `postwvar' `wgt' ///
if `touse' == 1, posts(`posts') postw(`postw')
local npost = r(N_poststrata)
local pstropt pstrwvar(`postwvar') ///
posts(`posts') postw(`postw')
if "`wtype'" == "" {
local wgt [pw=`postwvar']
}
else {
local wgt [`wtype'=`postwvar']
}
}
}
else {
if "`wtype'" != "" {
tempvar wvar
quietly gen double `wvar' `wexp'
local wgt [`wtype'=`wvar']
}
quietly gen byte `subuse' = `touse'
}
if "`trace'" != "" {
local noisily noisily
local traceon set trace on
local traceoff set trace off
}
if "`cmdlog'" != "" {
local noisily noisily
}
if "`noisily'" != "" {
local dots nodots
}
// this allows us to restore original sort order later for the
// unweighted jackknife; we restore sort order only to accommodate time
// series operators in commands like -regress-
tempvar order
quietly gen long `order' = _n
local sortvars : sortedby // restore sort order later
// preliminary parse of <exp_list>
_prefix_explist `exp_list', stub(_jk_)
local eqlist `"`s(eqlist)'"'
local idlist `"`s(idlist)'"'
local explist `"`s(explist)'"'
local eexplist `"`s(eexplist)'"'
_prefix_note `cmdname', `dots'
if "`noisily'" != "" {
di "jackknife: First call to `cmdname' with data as is:" _n
di as inp `". `command'"'
}
local usesvy 0
if "`svy'" != "" {
local props : properties `cmdname'
local svyr svyr
if `:list svyr in props' & `"`exp_list'"' == "" {
local usesvy 1
}
}
// run the command using the entire dataset
_prefix_clear, e r
if `usesvy' {
`traceon'
capture noisily quietly `noisily' `version' ///
svy, subpop(if `subuse', `srssub') ///
vce(linearized) : `cmdname' `cmdargs' ///
if `touse', `cmdopts' `rest'
`traceoff'
if e(singleton) == 1 | e(census) == 1 {
// -jackknife- can do nothing more, so just
// report results and exit
svy
exit
}
}
else {
`traceon'
capture noisily quietly `noisily' `version' ///
`cmdname' `cmdargs' ///
`wgt' if `subuse', `cmdopts' `rest'
`traceoff'
}
local rc = c(rc)
// error occurred while running on entire dataset
if `rc' {
_prefix_run_error `rc' jackknife `cmdname'
}
// check for rejection of results from entire dataset
if `"`reject'"' != "" {
_prefix_reject jackknife `cmdname' : `reject'
local reject `"`s(reject)'"'
}
if `"`cmdname'"' == "mlogit" {
_prefix_mlogit, `cmdopts'
local cmdopts `"`s(options)'"'
}
if "`nocount'" == "" {
if trim(`"`rclass'`eclass'`n'"') == "" {
// get implied n() option based on e(N) or r(N)
local Nimplied 1
if !missing(e(N)) {
local eclass eclass
}
else if !missing(r(N)) {
local rclass rclass
}
}
}
if "`eclass'" != "" {
quietly replace `touse' = 0 if `subuse' & e(sample) == 0
}
// check for time-series operators
local junk : subinstr local cmdargs "." "_", count(local hasdot)
if "`drop'" == "" & `hasdot' == 0 {
// check e(sample)
_prefix_check4esample jackknife `cmdname'
local keepesample `"`s(keep)'"'
}
// ignore s(diwarn)
// determine default <exp_list>, or generate an error message
if `"`exp_list'"' == "" {
_prefix_explist, stub(_jk_) edefault
local eqlist `"`s(eqlist)'"'
local idlist `"`s(idlist)'"'
local explist `"`s(explist)'"'
local eexplist `"`s(eexplist)'"'
}
// expand eexp's that may be in eexplist, and build a matrix of the
// computed values from all expressions
tempname b
_prefix_expand `b' `explist', ///
stub(_jk_) ///
eexp(`eexplist') ///
colna(`idlist') ///
coleq(`eqlist') ///
// blank
local k_eq `s(k_eq)'
local k_exp `s(k_exp)'
local k_eexp `s(k_eexp)'
local K = `k_exp' + `k_eexp'
local k_extra `s(k_extra)'
local names `"`s(enames)' `s(names)'"'
local express `"`s(explist)'"'
local eexpress `"`s(eexplist)'"'
forval i = 1/`K' {
local exp`i' `"`s(exp`i')'"'
}
forval i = 1/`K' {
if missing(`b'[1,`i']) {
di as err ///
`"statistic `exp`i'' evaluated to missing in full sample"'
exit 322
}
}
if `is_sum' {
if `k_exp' == 0 & "`eexpress'" == "(_b)" {
// speed things up with the -novariance-
_prefix_checkopt NOVARiance, `cmdopts'
if `"`noisily'`s(novariance)'"' == "" {
local novar " novar"
}
}
if "`svy'" != "" {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -