📄 svy_est.ado
字号:
*/ DEFF /*
*/ DEFT /*
*/ MEFF /*
*/ MEFT /*
*/ EForm /*
*/ SCore(string) /*
*/ `okopts' /*
*/ `dopts' /*
*/ `first' /*
*/ `mlopts' /*
*/ `offset' /*
*/ STRata(passthru) /* see _svy_newrule.ado
*/ PSU(passthru) /* see _svy_newrule.ado
*/ FPC(passthru) /* see _svy_newrule.ado
*/ ]
_svy_newrule , `weight' `strata' `psu' `fpc'
if "`mlopts'"!="" {
mlopts mlopts, `options'
CkConst ,`mlopts'
}
/* Set global macros. */
global S_VYcmd `cmd' /* name of underlying command */
global S_VYadj `adjust' /* do unadjusted F test if !="" */
global S_VYcons `constant'
global S_VYscore `score'
/* Display options. */
global S_VYdopt level(`level') `prob' `ci' `deff' `deft' /*
*/ `meff' `meft' `eform' `first'
local opts `dopts'
while "`opts'"!="" { /* add special display options to S_VYdopt */
NextOpt `opts'
global S_VYdopt $S_VYdopt ``r(macro)''
local opts `r(rest)'
}
/* Options for estimation. */
global S_VYeopt `constant' `log' `mlopts'
local opts `okopts'
while "`opts'"!="" { /* add other allowed options to S_VYeopt */
NextOpt `opts'
if "``r(macro)''"!="" {
if `r(varlist)' {
local markout `markout' ``r(macro)''
global S_VYeopt $S_VYeopt /*
*/ `r(option)'(``r(macro)'')
}
else global S_VYeopt $S_VYeopt ``r(macro)''
}
local opts `r(rest)'
}
CkConst , $S_VYeopt
/* Split off dependent and independent variables. */
local i 1
while `i' <= `k_depvar' {
gettoken var varlist : varlist
global S_VYdepv $S_VYdepv `var'
local i = `i' + 1
}
global S_VYindv `varlist' /* RHS for command */
if "`constant'"!="" & "$S_VYindv"=="" {
di as err /*
*/ "independent variables required with noconstant option"
exit 100
}
/* Get weights, strata, psu, and fpc. */
quietly svyset
global S_VYstr `r(strata)'
global S_VYpsu `r(psu)'
global S_VYfpc `r(fpc)'
if "`r(wtype)'"!="" {
global S_VYexp `r(`r(wtype)')'
global S_VYwgt `r(wtype)'
local wt [`r(wtype)'`r(wexp)']
}
if "$S_VYstr"!="" {
global S_VYopt $S_VYopt strata($S_VYstr)
}
if "$S_VYpsu"!="" {
global S_VYopt $S_VYopt psu($S_VYpsu)
}
if "$S_VYfpc"!="" {
global S_VYopt $S_VYopt fpc($S_VYfpc)
}
/* Mark/markout. */
mark `doit' `wt' `if' `in', zeroweight
if "`svycmd'"=="svyintreg" {
markout `doit' $S_VYindv $S_VYfpc `markout'
local y1 : word 1 of $S_VYdepv
local y2 : word 2 of $S_VYdepv
qui replace `doit' = 0 if `y1'>=. & `y2'>=.
}
else markout `doit' $S_VYdepv $S_VYindv $S_VYfpc `markout'
markout `doit' $S_VYstr $S_VYpsu, strok
/* Compute total #obs. */
qui count if `doit'
local nobs = r(N)
if `nobs' == 0 {
error 2000
}
if "$S_VYwgt"!="" {
qui count if `doit' & ($S_VYexp)!=0
if r(N) == 0 {
di as txt "all observations have zero weights"
exit 2000
}
}
/* Handle subpop. If no subpop, S_VYsub is mark variable `doit'. */
if "`subpop'`srssubpop'"=="" {
global S_VYsub `doit'
}
else {
// WARNING: sort order should not change prior to calling
// svy_sub; it accepts [in range].
svy_sub `doit' ///
`subvar' ///
"$S_VYexp" ///
"$S_VYstr" ///
"" "" /// not byable
"`srssubpop'" ///
`subpop'
global S_VYsrss `r(srssubpop)' /* srssubpop option flag */
global S_VYopt $S_VYopt `r(srssubpop)' subpop(`subvar')
global S_VYsub `subvar'
global S_VYsubv `r(subcond)'
}
/* Remove collinearity. */
/* if "`svycmd'"!="svyreg" & "`svycmd'"!="svyivreg" { */
_rmcoll $S_VYindv `wt' if $S_VYsub, `constant'
global S_VYindv `r(varlist)'
/* } */
/* Save variables for model test; it may be reset by some commands. */
global S_VYmodl $S_VYindv
end
program define NextOpt, rclass
gettoken option 0 : 0, parse(" (")
ret local option = lower("`option'")
/* this is the option name */
ret local macro = substr("`return(option)'",1,31)
/* this is the macro name */
ret scalar varlist = 0
/* Check if it is an "xxx(...)" option. */
gettoken next 0 : 0, match(parens)
if "`parens'"=="(" {
local next = substr(ltrim("`next'"),1,7)
if "`next'"=="varname" | "`next'"=="varlist" {
ret scalar varlist = 1
}
ret local rest `0'
}
else ret local rest `next' `0'
end
program define Option, rclass
gettoken opts 0 : 0, parse(" ,")
syntax [, `opts' *]
while "`opts'"!="" {
NextOpt `opts'
if "``r(macro)''"!="" {
return scalar option = 1
return local contents ``r(macro)''
exit
}
local opts `r(rest)'
}
return scalar option = 0
end
/*--------------------------- Save results program ---------------------------*/
program define SvySave, eclass
args npop nsubpop Vdeff Vmeff
ereturn scalar N_pop = `npop' /* population size */
if "`nsubpop'"!="" {
ereturn scalar N_sub = $S_VYosub /* # subpop. obs*/
ereturn scalar N_subpop = `nsubpop' /* subpop. size */
}
/* Save results from S_VY* macros. */
ereturn scalar N = $S_VYn /* number of obs */
ereturn scalar N_strata = $S_VYnstr /* number of strata */
ereturn scalar N_psu = $S_VYnpsu /* number of PSUs */
ereturn scalar df_r = e(N_psu) - e(N_strata) /* df */
ereturn local depvar $S_VYdepv /* dependent variable(s)*/
ereturn local wtype $S_VYwgt /* weight type */
if "$S_VYexp"!="" {
ereturn local wexp "= $S_VYexp" /* weight expression */
}
ereturn local strata $S_VYstr /* strata variable */
ereturn local psu $S_VYpsu /* psu variable */
ereturn local fpc $S_VYfpc /* fpc variable */
ereturn local subpop $S_VYsubv /* subpop variable */
ereturn local adjust $S_VYadj /* "noadjust" if given */
ereturn local svy_est svy_est /* used by svy_dreg */
Option "OFFset(varname numeric)", $S_VYeopt
if `r(option)' { /* offset variablea */
ereturn local offset `r(contents)'
}
Option "EXPosure(varname numeric)", $S_VYeopt
if `r(option)' { /* offset variable */
ereturn local offset ln(`r(contents)')
}
if `"$S_VYscore"' != "" { /* score() variables */
ereturn local scorevars $S_VYscore
}
/* Double saves. */
global S_E_nobs = e(N) /* number of obs */
global S_E_nstr = e(N_strata) /* number of strata */
global S_E_npsu = e(N_psu) /* number of PSUs */
global S_E_npop = e(N_pop) /* pop. size */
if e(N_sub)<. {
global S_E_osub = e(N_sub) /* # subpop. obs */
global S_E_nsub = e(N_subpop) /* subpop. size */
}
global S_E_wgt `e(wtype)' /* weight type */
global S_E_exp `e(wexp)' /* weight expression */
global S_E_str `e(strata)' /* strata variable */
global S_E_psu `e(psu)' /* psu variable */
global S_E_fpc `e(fpc)' /* fpc variable */
global S_E_depv `e(depvar)' /* dependent variable(s) */
global S_E_adj `e(adjust)' /* "noadjust" if specified */
/* Compute model F test: create e(F) and e(df_m). */
my_svy_ftest "$S_VYmodl" "$S_VYcnt"
/* Make matrices e(deff), e(deft), and e(V_srs).
If fpc, make matrix e(V_srswr).
If meff or meft, make matrices e(V_msp) and e(meft).
*/
_svy_mkvsrs `Vdeff' "$S_VYsrss"
_svy_mkdeff
if "`Vmeff'"!="" {
_svy_mkmeff `Vmeff'
}
end
program define my_svy_ftest, eclass
version 8
args modl const
if "`modl'"!="" {
capture _test `modl', min
if _rc==0 {
ereturn scalar df_m = r(df)
if reldif(r(drop) ,0)<1e-10 | `"`const'"' == "1" {
if "`e(adjust)'"=="" {
if e(df_r)-e(df_m)+1 > 0 {
ereturn scalar F = /*
*/ r(F)*(e(df_r)-e(df_m)+1)/e(df_r)
}
}
else { /* unadjusted */
ereturn scalar F = r(F)
}
}
else {
ereturn scalar F = .
}
}
}
else ereturn scalar df_m = 0
/* Double saves. */
global S_E_f = e(F)
global S_E_mdf = e(df_m)
end
program define CkConst
syntax [, CONSTRAINTS(string) * ]
if "`constraints'" != "" {
global S_VYcnt 1
}
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -