*! version 1.0.2 07may1996 program define svyreg version 4.0 if substr("`1'",1,1)=="," | "`*'"=="" { if "$S_E_cmd"!="svyreg" { error 301 } svy_dreg `*' /* display results */ exit } capture noisily { tempvar doit w subvar res tempname s b D V Vdeff Vdeft Vmeff svy_preg reg `doit' `w' `subvar' `*' quietly { /* Get regression estimates for meff. */ reg $S_VYdepv $S_VYindv if `subvar', $S_VYcons if _result(1)==0 | _result(1)==. { noisily error 2000 } matrix `Vmeff' = get(VCE) global S_VYmeff "`Vmeff'" /* Scale weights for regression. */ if "$S_VYwgt"!="" { summarize $S_VYw if `subvar' if _result(3)<=0 { di in red "sum of weights <= 0" exit 499 } scalar `s' = 1/_result(3) local swt "[iw=`s'*$S_VYw]" local wt "[iw=$S_VYw]" } /* Get regression estimates. */ reg $S_VYdepv $S_VYindv `swt' if `subvar', /* */ mse1 $S_VYcons if _result(1)==0 | _result(1)==. { noisily error 2000 } matrix `b' = get(_b) matrix `D' = get(VCE) if "$S_VYwgt"!="" { /* unwind weight scaling */ matrix `D' = `s'*`D' } local mdf = _result(3) local r2 = _result(7) predict double `res' if `subvar', residuals replace `res' = 0 if `subvar'==0 } /* Compute variance estimate. */ svy_reg `D' `res' $S_VYindv `wt' if `doit', $S_VYopt /* */ $S_VYcons var(`V') deff(`Vdeff') deft(`Vdeft') /* Post results. */ local df = $S_VYnpsu - $S_VYnstr /* Note: we do NOT subtract # terms in model. */ matrix post `b' `V', dof(`df') obs($S_VYnobs) depn($S_VYdepv) /* Set macros. */ local doption "$S_VYdopt" global S_E_mdf "`mdf'" global S_E_r2 "`r2'" svy_preg save /* save macros */ global S_E_cmd "svyreg" } nobreak { if _rc { local rc = _rc svy_preg cleanup exit `rc' } } svy_dreg, `doption' /* display results */ end