📄 _robust2.ado
字号:
*! version 1.0.5 01apr2005
program _robust2, rclass sort
version 9
syntax varlist(numeric) [if] [in] ///
[pw iw] [, ///
SVY ///
CLuster(varname) ///
SUBpop(passthru) ///
Variance(name) ///
VSRS(name) ///
minus(numlist max=1 int >=0) ///
ZEROweight ///
]
if "`minus'" == "" {
local minus 1
}
if "`svy'" == "" & "`weight'" != "" {
di as err ///
"weights can only be supplied to {help svyset##|_new:svyset}"
exit 198
}
if "`svy'" != "" | "`weight'" == "iweight" {
local zeroweight zeroweight
}
marksample touse, `zeroweight'
if "`variance'" != "" {
confirm matrix `variance'
}
else {
if "`e(V)'" != "matrix" {
error 301
}
local vartmp yes
tempname variance
matrix `variance' = e(V)
}
local k_scores : word count `varlist'
tempname eqdims
// verify # vars in varlist == # equations is `variance'
CheckMatrixLabels `k_scores' `variance' `eqdims'
local xvarlist `"`r(varlist)'"'
local eqnames `"`r(eqnames)'"'
local xlist : subinstr local xvarlist "_cons" "`touse'", all word
markout `touse' `xlist'
// get the -svyset- information
tempvar subuse
_svy_setup `touse' `subuse', `svy' `subpop'
return add
return local settings
return local brrweight
return local jkrweight
if "`svy'" != "" {
local stages = return(stages)
if missing(`stages') {
local stages 0
}
forval i = 1/`stages' {
local strata `strata' `return(strata`i')'
if "`return(su`i')'" == "" {
tempvar obsid
quietly gen byte `obsid' = . in 2
local su `su' `obsid'
}
else local su `su' `return(su`i')'
local fpc `fpc' `return(fpc`i')'
}
local posts `return(poststrata)'
local postw `return(postweight)'
local wtype `return(wtype)'
local wexp `"`return(wexp)'"'
if "`wexp'" != "" {
tempvar wvar
quietly gen double `wvar' `wexp'
}
}
else {
local su `cluster'
local wtype `weight'
local wvar : word 2 of `exp'
gettoken equal wvar : wexp, parse(" =")
local wvar : list retok wvar
}
if "`vartmp'" == "yes" {
return matrix V `variance'
}
// poststratification
if "`posts'" != "" {
tempvar postid
sort `touse' `posts', stable
local by `touse' `posts'
quietly by `by': gen `postid' = _n==1 if `touse'
quietly replace `postid' = sum(`postid')
// do not return vsrs() or vmsp() for poststratification
local vsrs
local vmsp
}
capture noisily quietly ///
mata: _robust2( ///
"`varlist'", ///
"`xlist'", ///
"`eqdims'", ///
"`variance'", ///
"`vsrs'", ///
"`touse'", ///
"`subuse'", ///
"`wvar'", ///
"`fpc'", ///
"`strata'", ///
"`su'", ///
"`postid'", ///
"`postw'", ///
`minus' ///
)
if c(rc) error c(rc)
// saved results
local Vlist `variance'
if "`vsrs'" != "" {
local Vlist `Vlist' `vsrs' `vsrs'sub
if "`vsrs'" != "" & "`fpc'" != "" {
local Vlist `Vlist' `vsrs'wr `vsrs'subwr
}
}
return scalar census = r(census)
foreach mat of local Vlist {
matrix colna `mat' = `xvarlist'
matrix rowna `mat' = `xvarlist'
matrix coleq `mat' = `eqnames'
matrix roweq `mat' = `eqnames'
}
local sclist : r(scalars)
foreach sc of local sclist {
return scalar `sc' = r(`sc')
}
local matlist : r(matrices)
tempname m
foreach mat of local matlist {
matrix `m' = r(`mat')
return matrix `mat' `m'
}
if "`svy'" != "" {
return scalar df_r = r(N_clust) - r(N_strata)
if `"`subpop'"' == "" {
return local N_sub
return local N_subpop
}
}
else {
return local N_sub
return local N_subpop
if inlist("`wtype'", "fweight", "iweight") {
return scalar N = r(N_pop)
return scalar df_r = r(N_pop) - 1
}
else return scalar df_r = r(N) - 1
if "`wtype'" != "" {
return local wtype `wtype'
return local wexp `"`wexp'"'
}
return local N_pop
return local N_strata
return local N_psu
}
end
program CheckMatrixLabels, rclass
args k v eqdims
local cons _cons
local eqnames : coleq `v', quote
local ueq : list uniq eqnames
local names : colna `v'
local k_eq : word count `ueq'
if `k' < `k_eq' {
error 102
}
else if `k' > `k_eq' {
error 103
}
local vlist : subinstr local names "_cons" "", all word
if "`:list uniq vlist'" != "" {
confirm var `vlist'
}
matrix `eqdims' = J(1,`k',0)
forval i = 1/`k' {
local eq : word `i' of `ueq'
local ignored : subinstr local eqnames `""`eq'""' "", ///
all word count(local cnt)
matrix `eqdims'[1,`i'] = `cnt'
}
return local varlist `"`names'"'
return local eqnames `"`eqnames'"'
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -