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

📄 _svy_subpop.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
字号:
*! version 1.0.5  28jan2005
program _svy_subpop, rclass sort
	version 9
	// touse subuse [, <options> ]
	syntax namelist(min=2 max=2) [,	///
		hasover			/// undocumented
		over(string asis)	///
		SUBpop(string asis)	///
		SRSsubpop		///
		wvar(varname numeric)	///
		STRata(varname)		///
		NOSUBDROP		///
	]
	tokenize `namelist'
	args touse genvar
	confirm numeric var `touse'
	confirm new var `genvar'
	tempvar subuse

	if `"`subpop'"' != "" {
		capture ParseSubpopOption `subpop'
		if c(rc) {
			di as err "invalid subpop() option"
			exit c(rc)
		}
		local subvar `s(varlist)'
		local if `s(if)'
		local in `s(in)'
		local subpop `subvar' `if' `in'
		if "`srssubpop'" == "" {
			local srssubpop `s(srssubpop)'
		}
	}

	if `"`over'"' != "" {
		capture noisily ParseOverOption `over'
		if c(rc) {
			di as err "invalid over() option"
			exit c(rc)
		}
		local over `s(over)'
		markout `touse' `over'
		local over_nolabel `s(over_nolabel)'
		if "`srssubpop'" == "" {
			local srssubpop `s(srssubpop)'
		}
	}
	if `"`over'`hasover'`subpop'"' == "" & "`srssubpop'" != "" {
		di as err ///
"{p 0 0 2}option subpop() requires a variable name or" ///
" an if expression when the srssubpop option is specified{p_end}"
		exit 198
	}

	// generate the subpop indicator variable
	if `"`subvar'`if'`in'"' != "" {
		mark `subuse' `if' `in'
		if "`if'" != "" {
			gettoken if exp : if
			quietly replace `subuse' = . if missing(`exp')
		}
		markout `touse' `subvar' `subuse'
		quietly replace `subuse' = 0 if `touse' == 0
		if "`subvar'" != "" {
			quietly replace `subuse' = 0 if `subvar' == 0
		}
	}
	else	quietly gen byte `subuse' = `touse'

	// saved results
	return local over `over'
	return local over_nolabel `over_nolabel'
	return local subpop `"`subpop'"'
	return local srssubpop `srssubpop'

	quietly count if `touse'
	return scalar N = r(N)
	if return(N) == 0 {
		error 2000
	}

	// nothing more to do, so exit
	if "`subpop'`over'" == "" {
		return scalar N_sub = return(N)
		return scalar N_strata_omit = 0
		rename `subuse' `genvar'
		exit
	}

	quietly count if `subuse'
	return scalar N_sub = r(N)
	if return(N_sub) == 0 {
		di as err ///
"no observations in subpop() subpopulation"    _n ///
"subpop() = 1 indicates observation in subpopulation" _n ///
"subpop() = 0 indicates observation not in subpopulation"
		exit 461
	}

	if "`wvar'" != "" {
		quietly count if `subuse' != 0 & `wvar' != 0
		if r(N) == 0 {
			di as err ///
"all observations in subpop() subpopulation have zero weights"
			exit 461
		}
	}

	if "`subpop'" != "" & return(N_sub) == return(N) {
		di as txt _n ///
"Note: subpop() subpopulation is same as full population" _n ///
"      subpop() = 1 indicates observation in subpopulation" _n ///
"      subpop() = 0 indicates observation not in subpopulation"
		local same 1
	}

	if "`subvar'" != "" {
		quietly count if `subvar' != 1 & `subvar' != 0 & `touse'
		if r(N) > 0 {
			if "`same'"=="" {
				di as txt _n ///
"Note: subpop() takes on values other than 0 and 1" _n ///
"      subpop() != 0 indicates subpopulation"
			}
		}
	}

	rename `subuse' `genvar'
	local subuse `genvar'

	// with over(), `subuse' identifies multiple subpops
	if "`over'" != "" {
		GenSub `touse' `subuse' "`over_nolabel'" `over'
		return local over_namelist `"`r(names)'"'
		return local over_labels `"`r(labels)'"'
	}

	if "`strata'" == "" | "`same'`nosubdrop'" != "" {
		return scalar N_strata_omit = 0
		exit
	}

	// Check for strata with no subpopulation members
	sort `touse' `strata'
	tempvar strobs
	quietly by `touse' `strata': ///
		gen long `strobs' = cond(_n==_N, sum(`subuse'!=0), .) ///
		if `touse'
	quietly count if `strobs' == 0
	return scalar N_strata_omit = r(N)
	if r(N) != 0 {
		quietly by `touse' `strata': ///
			replace `touse' = 0 if `strobs'[_N]==0
	}

end

program ParseSubpopOption, sclass
	syntax [varname(default=none numeric)] [if] [in] [, SRSsubpop ]
	sreturn clear
	sreturn local varlist `varlist'
	sreturn local if `"`if'"'
	sreturn local in `"`in'"'
	sreturn local srssubpop `srssubpop'
end

program ParseOverOption, sclass
	syntax [varlist(default=none)] [, NOLABel SRSsubpop ]
	sreturn clear
	sreturn local over `varlist'
	sreturn local over_nolabel `nolabel'
	sreturn local srssubpop `srssubpop'
end

program GenSub, rclass sortpreserve
	gettoken touse		0 : 0
	gettoken subvar		0 : 0
	gettoken nolabel	0 : 0
	tempvar sub

	local n_overvars : word count `0'
	if `n_overvars' != 1 & "`nolabel'" != "" {
		_strip_labels `0'
		local vlist `"`s(varlist)'"'
		local llist `"`s(labellist)'"'
		local nolabel
	}
	else	local renum renumber

capture noisily {

	quietly egen `sub' = group(`0') if `subvar', label
	quietly replace `subvar' = `sub' if `subvar' & `touse'

	if `n_overvars' == 1 {
		local uvar `0'
	}
	else {
		local uvar `sub'
	}

	_labels2names `uvar' if `subvar' , `nolabel' `renum' stub(_subpop_)
	return local names	`"`s(names)'"'
	return local labels	`"`s(labels)'"'

} // capture noisily

	local rc = c(rc)

	if "`vlist'" != "" {
		nobreak _restore_labels `vlist', labels(`llist')
	}
	exit `rc'
end

exit

⌨️ 快捷键说明

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