⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jackknife.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 3 页
字号:
			_prefix_checkopt ZEROweight, `cmdopts'
			if `"`s(zeroweight)'"' == "" {
				local novar "`novar' zeroweight"
			}
		}
	}

	if `"`reject'"' != "" {
		local reject `"reject(`reject')"'
	}

	capture confirm integer number `r(N)'
	if !c(rc) {
		local RN = r(N)
	}

	forvalues i = 1/`K' {
		local name`i' : word `i' of `names'
	}

	if "`force'" == "" & "`wtype'" == "aweight" {
		local 0 `wgt'
		syntax [fw]
		exit 101
	}

	local diopts	level(`level')	///
			`table'		///
			`header'	///
			`legend'	///
			`verbose'	///
			`efopt'		///
			// blank

	// check options
	if `"`keep'"' != "" {
		confirm new variable `names'
	}
	if `"`idcluster'"' != "" & `"`cluster'"' == "" {
		di as err "option idcluster() requires the cluster() option"
		exit 198
	}
	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)'"'
	}
	local ntype `nocount' `eclass' `rclass' `=cond(`"`n'"'!="","n()","")'
	if `:word count `ntype'' > 1 {
		di as err "options `:list retok ntype' may not be combined"
		exit 198
	}

	if `"`keepesample'"' != "" & `"`subpop'"' == "" {
		quietly replace `touse' = 0 if ! e(sample)
		quietly replace `subuse' = 0 if ! e(sample)
	}

	if "`:sortedby'" != "`sortvars'" {
		sort `sortvars' `order'
	}

	if "`jkrw'" == "" {
		if !`usesvy' {
			if "`rclass'" != "" {
				local nfunc "r(N)"
			}
			else if "`eclass'" != "" {
				local nfunc "e(N)"
			}
			else	local nfunc `"`n'"'
		}
		else {
			if `"`n'`rclass'"' != "" {
				if "`rclass'" != "" {
					local nfunc "r(N)"
				}
				else	local nfunc `"`n'"'
			}
			else	local nfunc "e(N)"
		}
	}
	else if `"`rclass'`eclass'`n'"' != "" & "`Nimplied'" == "" {
		if `"`n'"' != "" {
			local opt "n()"
		}
		else	local opt `rclass'`eclass'
		di as txt "{p 0 0 2}note: " ///
"ignoring `opt' option since jkrweight() was specified with svyset"
	}
	quietly replace `touse'  = 2 if `touse'  == 0
	quietly replace `subuse' = 2 if `subuse' == 0
	if "`wtype'" == "fweight" {
		quietly sum `wvar' if `touse' == 1
		scalar `touseN' = r(sum)
	}
	else {
		quietly count if `touse' == 1
		scalar `touseN' = r(N)
	}
	scalar `nobs' = r(N)
	// sort observations to use
	sort `touse' `strata' `cluster' `subuse', stable
	quietly replace `order' = _n

	// sample size function
	if `"`nfunc'"' != "" {
		if `"`nfunc'"' == "r(N)" & "`RN'" != "" {
			capture scalar `N' = `RN'
		}
		else if `"`nfunc'"' == "r(N)" & "`RN'" == "" {
			capture scalar `N' = .
		}
		else {
			if `usesvy' {
				capture scalar `N' = int(e(N_sub))
			}
			else	capture scalar `N' = int(`nfunc')
		}
		if c(rc) {
			di as err `"n(`nfunc') invalid"'
			exit c(rc)
		}
		if missing(`N') | `N' == 0 {
			local zm = cond(missing(`N'),"missing","zero")
			di as err ///
`"number of obs. `nfunc' evaluated to `zm' in full sample"'
			exit 322
		}
	}
	else 	scalar `N' = `touseN'

	if "`strata'" != "" {
		tempvar strid
		quietly by `touse' `strata': ///
			gen `strid' = (_n==1) if `touse' == 1
		quietly replace `strid' = sum(`strid') if `touse' == 1
	}

	// check clusters
	if "`cluster'" != "" {
		tempvar cluse
		mark `cluse' if `touse' == 1
		markout `cluse' `cluster'
		capture assert `cluse' == 1 if `touse' == 1
		if c(rc) {
			gettoken clname : cluster
			di as err ///
"missing values not allowed in cluster variable `clname'"
			exit 459
		}
		tempvar firstofcl
		quietly by `touse' `strata' `cluster': ///
			gen `clid' = (_n == 1) if `touse' == 1
		quietly gen byte `firstofcl' = `clid'
		// total number of clusters
		quietly count if `clid' & `touse' == 1
		if r(N) <= 2 & "`svy'" == "" {
			di as err "jackknife requires more than 2 clusters"
			exit 459
		}
		local nclust = r(N)
		if "`strata'" != "" {
			quietly by `touse' `strata': ///
				gen double `ncl' = sum(`clid')
			quietly by `touse' `strata': replace `ncl' = `ncl'[_N]
		}
		else	quietly gen double `ncl' = `nclust'
		quietly replace `clid' = sum(`clid') if `touse' == 1
		if "`wtype'" == "fweight" {
			// fweights must be constant within cluster
			capture by `touse' `cluster':	///
				assert `wvar' == `wvar'[1] if `touse' == 1
			if c(rc) {
				di as err ///
			"fweights must be constant within `cluster'"
				exit 198
			}
		}
	}
	else {
		local nclust = `nobs'
		// count the number of strata
		local clid `order'
		sort `touse' `strata', stable
		by `touse' `strata': gen double `ncl' = _N
	}
	if min(`nclust',_N) <= 1 {
		di as err "insufficient observations to perform jackknife"
		exit 459
	}

	// restore subpop indicator to 0/1
	quietly replace `subuse' = (`subuse' == 1)

	// jackknife temp pseudovalue variables
	forval i = 1/`K' {
		tempname tv`i'
		local pseudo `pseudo' `tv`i''
	}

nobreak {
capture noisily break {

	if "`eexpress'" == "(_b)" {
		if "`svy'" == "" & `k_extra' == 0 {
			// try to use the cmdnames's replay routine
			capture findfile `cmdname'.ado
			if !c(rc) & substr("`cmdname'",1,3) != "svy" {
				capture `cmdname'
				if !c(rc) {
					local replay `cmdname'
				}
			}
		}
		tempname esave
		estimates store `esave'
	}

	if "`sortvars'" != "" {
		// NOTE: this must be run before calling -RWeights-
		sort `sortvars', stable
	}

	local jkstrvar  __jk_strata
	local jkmultvar __jk_multiplier
	local jkfpcvar  __jk_fpc
	if "`jkrw'" != "" {
		tempvar jkrm fpc strid
		RWeights `jkrm' `strid' `fpc' : `jkrw'
		local postextra ///
			`:type `strid'' `jkstrvar' `jkmultvar' `jkfpcvar'
		local strata `strid'
		local goodstrid `s(goodstrid)'
	}
	else {
		if `"`strata'"' != "" {
			local postextra `:type `strata'' `strata'
			local jkstrvar `strata'
		}
		local postextra `postextra' `clid'
		if `"`fpc'"' != "" {
			local postextra `postextra' `:type `fpc'' `fpc'
			local jkfpcvar `fpc'
		}
		if "`wtype'" == "fweight" {
			local postextra `postextra' `jkmultvar'
		}
		else if !inlist("`svy'`wtype'", "", "aweight", "fweight") {
			local jk_wtype `wtype'
			local postextra `postextra' `jkmultvar'
		}
	}
	if "`jkrw'" != "" {
		if "`mse'" != "" {
			local sumwgt [pw=`jkmultvar']
		}
		local jk_wtype pweight
	}
	// prepare post
	tempname postid
	postfile `postid' `postextra' `names'	///
		using `"`saving'"', `double' `every' `replace'

	if inlist("`wtype'", "aweight", "") {
		local cmd1 `"cmd1(`version' `cmdname' `cmdargs' `wgt')"'
	}
	else	local cmd1 `"cmd1(`version' `cmdname' `cmdargs')"'
	local cmd2 `"cmd2(`cmdopts'`novar'`rest')"'
	if inlist("`svy'`wtype'", "", "aweight") {
		_loop_jknife `touse' `clid' `pseudo',		///
			command(`command')			///
			express(`express')			///
			`cmd1' `cmd2'				///
			n0(`N')					///
			nclust(`nclust')			///
			nfunc(`nfunc')				///
			postid(`postid')			///
			`dots'					///
			`noisily'				///
			`trace'					///
			`reject'				///
			// blank
	}
	else if "`wtype'" == "fweight" {
		_loop_jknife_fw `touse' `clid' `pseudo',	///
			command(`command')			///
			express(`express')			///
			`cmd1' `cmd2'				///
			wvar(`wvar')				///
			n0(`N')					///
			nclust(`nclust')			///
			nfunc(`nfunc')				///
			postid(`postid')			///
			`dots'					///
			`noisily'				///
			`trace'					///
			`reject'				///
			// blank
		// use the same weights to summarize results
		local sumwgt [fw=`jkmultvar']
		local jk_wtype fweight
	}
	else {
		if "`jkrw'" != "" {
			_loop_rw `touse' `subuse' `pseudo',	///
				caller(Jackknife)		///
				command(`command')		///
				express(`express')		///
				`cmd1' `cmd2'			///
				rwvars(`jkrw')			///
				owvar(`wvar')			///
				`pstropt'			///
				postid(`postid')		///
				postextra(`strid' `jkrm' `fpc')	///
				`dots'				///
				`noisily'			///
				`trace'				///
				`reject'			///
				// blank
		}
		else {
			if "`wvar'" == "" {
				tempname wvar
				quietly gen double `wvar' = `touse'
			}
			if "`strata'" == "" {
				tempvar strid
				quietly gen byte `strid' = 1
			}
			if "`fpc'" != "" {
				local fpcopt fpc(`fpc')
			}
			if `usesvy' {
				local svyopt svy
			}
			_loop_jknife_iw `touse' `subuse'	///
				`strid' `clid' `ncl' `pseudo',	///
				command(`command')		///
				express(`express')		///
				`cmd1' `cmd2' `svyopt'		///
				`wtype'				///
				wvar(`wvar')			///
				`pstropt'			///
				n0(`N')				///
				nclust(`nclust')		///
				strata(`strata')		///
				`fpcopt'			///
				nfunc(`nfunc')			///
				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'

	// merge in the pseudovalues, and label them
	if "`keep'" != "" {
		preserve
		quietly use `"`saving'"', clear
		_jk_pseudo `names' `sumwgt', b(`b') strata(`strata')
		sort `strata' `clid'
		tempfile keepfile
		quietly save `"`keepfile'"', replace
		restore
		sort `strata' `clid'
		quietly merge `strata' `clid' using `"`keepfile'"'
		drop _merge
		forval i = 1/`K' {
			local var : word `i' of `names'
			if "`firstofcl'" != "" {
				quietly replace `var' = . if !`firstofcl'
			}
			local label = substr(`"`exp`i''"',1,65)
			label var `var' `"pseudovalues: `label'"'
		}
		if "`idcluster'" != "" {
			capture confirm new variable `idcluster'
			if c(rc) {
				confirm variable `idcluster'
				drop `idcluster'
			}
			rename `clid' `idcluster'
		}
	}

	if "`svy'" != "" {
		if `"`subpop'"' != "" {
			local subopt by(`subuse') nby(1)
			sum `subuse' [aw=`wvar'] if `subuse', mean
			scalar `nsub' = r(N)
			scalar `nsubpop' = r(sum_w)
		}
		if "`jkrw'" != "" {
			if `goodstrid' {
				quietly tabulate `strid'
				scalar `nstrata' = r(r)
			}
			else	scalar `nstrata' = 1
			scalar `npsu' = .
		}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -