_loop_jknife.ado

来自「是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到」· ADO 代码 · 共 124 行

ADO
124
字号
*! version 1.0.1  03jan2005
program _loop_jknife
	version 9
	syntax namelist(min=3) ,		///
		command(string asis)		///
		express(string asis)		///
		cmd1(string asis)		///
		n0(string)			///
		postid(name)			///
		[				///
			cmd2(string asis)	///
			nclust(integer 0)	///
			nfunc(string)		///
			noDOTS			///
			NOIsily			///
			trace			///
			reject(string asis)	///
		]

	if `"`cmd2'"' != "" {
		local cmd2 `", `cmd2'"'
	}
	if "`trace'" != "" {
		local noisily	noisily
		local traceon	set trace on
		local traceoff	set trace off
	}
	if "`noisily'" != "" {
		local dots nodots
	}
	local nodots `dots'
	if "`dots'" != "" {
		local dots "*"
		local noiqui noisily quietly
	}
	else	local dots _dots
	local K 0
	while `"`express'"' != "" {
		gettoken exp`++K' express : express,	///
			parse("()") bind match(par)
	}
	gettoken touse namelist : namelist
	gettoken clid  pseudo   : namelist
	confirm var `touse' `clid'
	if `K' != `: word count `pseudo'' {
		di as err "internal error in jackknife"
		exit 9		// [sic] this should never happen
	}
	forval j = 1/`K' {
		local tv : word `j' of `pseudo'
		local ppseudo `ppseudo' (`tv')
		local missing `missing' (.)
	}
	local noi = cond("`noisily'"=="","*","noisily")

	tempname nobs
	if "`nodots'" == "" | "`noisily'" != "" {
		di
		_dots 0, title(Jackknife replications) reps(`nclust') `nodots'
	}
	local rejected 0
	forval j = 1/`nclust' {
		`noi' di as inp `". `command'"'
		quietly count if `clid' == `j' & `touse' == 1
		scalar `nobs' = r(N)
		`traceon'
		capture `noiqui' `noisily'	///
			`cmd1' if `clid' != `j' & `touse' == 1 `cmd2'
		`traceoff'
		if (c(rc) == 1)	error 1
		local bad = c(rc) != 0
		if c(rc) {
			`noi' di in smcl as error ///
`"{p 0 0 2}an error occurred when jackknife executed `cmdname', "' ///
`"posting missing values{p_end}"'
		}
		else {
			if `"`reject'"' != "" {
				capture local rejected = `reject'
				if c(rc) {
					local rejected 1
				}
			}
			if `rejected' {
				local bad 1
				`noi' di as error ///
`"{p 0 0 2}`caller' rejected results from `cmdname', "' ///
`"posting missing values{p_end}"'
			}
			else {
				forval i = 1/`K' {
					local tv : word `i' of `pseudo'
					capture scalar `tv' = `exp`i''
					if (c(rc) == 1)	error 1
					if c(rc) {
						scalar `tv' = .
					}
					if missing(`tv') {
						local bad 2
						`noi' di as error ///
`"{p 0 0 2}captured error in `exp`i'', posting missing value{p_end}"'
					}
				}
				if `"`nfunc'"' != "" {
					local nn = int(`nfunc')
					// keep the value
					if `nn' != `n0'-`nobs' {
						local bad 3
					}
				}
			}
		}
		if inlist(`bad', 1, 3) {
			post `postid' (`j') `missing'
		}
		else {
			post `postid' (`j') `ppseudo'
		}
		`dots' `j' `bad'
	}
	`dots' `nclust'
end
exit

⌨️ 快捷键说明

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