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

📄 svy_x_7.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 2 页
字号:
*! version 1.1.6  07feb2002 updated 20dec2004
program define svy_x_7, sortpreserve
	version 6, missing
	gettoken cmd 0 : 0
	if replay() {
		if "`e(cmd)'"!="svy`cmd'" {
			error 301
		}
		svy_disp `0'  /* display results */
		exit
	}
	nobreak {
		capture noisily break {
			tempvar doit subvar

			SvyParse `cmd' `doit' `subvar' `0'

			local dopt "$S_VYdopt" /* display options */

			if "$S_VYcomp"!="" { /* complete cases */

				Complete `doit'
			}
			else { /* available; do one variable at a time */

				Avail `doit' `subvar'
			}
		}
		local rc = _rc
		macro drop S_VY*

		if `rc' {
			estimates clear
			exit `rc'
		}
	}

	svy_disp, `dopt'  /* display results */
end

program define Complete
	args doit

	tempname b V Vdeff Vmeff nsub osub error

	global S_VYdeff "`Vdeff'"
	global S_VYmeff "`Vmeff'"
	global S_VYerr  "`error'"
	global S_VYosub "`osub'"
	global S_VYnsub "`nsub'"

	if "$S_VYfpc"!="" {
		tempname Vdeft
		global S_VYdeft "`Vdeft'"
	}
	if "$S_VYwgt"!="" {
		local wt "[$S_VYwgt=$S_VYexp]"
	}
	if "$S_VYnby"!="" {
		local srssub "srssub"

		if $S_VYnby > 1 {
			local onopt "obs($S_VYosub) npop($S_VYnsub)"
		}
	}

/* Main call to _svy. */

	_svy $S_VYvl `wt' if `doit', type($S_VYcmd) $S_VYopt /*
	*/	b(`b') v(`V') vsrs($S_VYdeff) `onopt'

	global S_VYnobs = r(N)
	global S_VYnstr = r(N_strata)
	global S_VYnpsu = r(N_psu)
	global S_VYnpop = r(N_pop)

	if "`onopt'"=="" { MakeN $S_VYnvl `osub' `nsub' }

	local dim = colsof(`b')
	matrix `error' = J(1,`dim',0)

	if r(errcode)==3 | r(errcode)==4 { CompErr `b' $S_VYerr }

/* Call for meff. */

	if "$S_VYcmd"=="total" { local cmd "mean" }
	else			 local cmd "$S_VYcmd"

	_svy $S_VYvl if `doit', type(`cmd') $S_VYsopt /*
	*/	vsrs($S_VYmeff) `srssub'

	if "$S_VYcmd"=="total" { CompMeff }

/* Create Vdeft if fpc. */

	if "$S_VYfpc"!="" { CompDeft }

/* Label matrices. */

	Labelmat `b' `V' $S_VYosub $S_VYnsub /*
	*/	 $S_VYdeff $S_VYdeft $S_VYmeff $S_VYerr

/* Post. */

	local cmd = upper(substr("$S_VYcmd",1,1)) + substr("$S_VYcmd",2,.)

	local dof = $S_VYnpsu - $S_VYnstr

	estimates post `b' `V', dof(`dof') obs($S_VYnobs) depn(`cmd') /*
	*/ esample(`doit')

	SvySave  /* set macros, etc. */
end

program define Avail
	args doit subvar

	tempname b b1 V V1 Vdeff Vdeff1 Vmeff Vmeff1 /*
	*/ nsub nsub1 osub osub1 error error1 /*
	*/ mstr mstr1 mpsu mpsu1 zero sqzero

	global S_VYb    "`b'"
	global S_VYv    "`V'"
	global S_VYdeff "`Vdeff'"
	global S_VYmeff "`Vmeff'"
	global S_VYerr  "`error'"
	global S_VYosub "`osub'"
	global S_VYnsub "`nsub'"
	global S_VYmstr "`mstr'"
	global S_VYmpsu "`mpsu'"

	if "$S_VYfpc"!="" {
		tempname Vdeft
		global S_VYdeft "`Vdeft'"
	}
	if "$S_VYwgt"!="" {
		local wt "[$S_VYwgt=$S_VYexp]"
	}
	if "$S_VYnby"!="" {
		local srssub "srssub"
		local dim    "$S_VYnby"
		if $S_VYnby > 1 {
			local onopt "obs(`osub1') npop(`nsub1')"
		}
	}
	else local dim 1

	matrix `zero'   = J(1,`dim',0)
	matrix `sqzero' = J(`dim',`dim',0)

	if "$S_VYfpc"!="" {
		matrix $S_VYdeft = J(1,$S_VYnvl,0)
	}

	if "$S_VYcmd"=="total" { local meffcmd "mean" }
	else			 local meffcmd "$S_VYcmd"

/* Sort. */

	if "$S_VYstr$S_VYpsu"!="" {
		sort $S_VYstr $S_VYpsu
	}

/* Get $S_VYnpop, etc., for dataset assuming no missing values. */

	_svy `doit' `wt' if `doit', type(total) $S_VYopt vsrs(*)

	global S_VYnobs = r(N)
	global S_VYnstr = r(N_strata)
	global S_VYnpsu = r(N_psu)
	global S_VYnpop = r(N_pop)

/* Step through varlist. */

	tokenize $S_VYvl
	local first 1
	local i 1
	while `i' <= $S_VYnvl {
		if "$S_VYcmd"=="ratio" {
			local i2 = 2*`i'
			local i1 = `i2' - 1
			local vl "``i1'' ``i2''"
		}
		else	local vl "``i''"

		local setzero 0

	/* Main call to _svy. */

		cap _svy `vl' `wt' if `doit', type($S_VYcmd) $S_VYopt /*
		*/	b(`b1') v(`V1') vsrs(`Vdeff1') `onopt'
		if _rc {
			local rc = _rc
			if `rc' == 460 {
				matrix `error1' = J(1,`dim',2)
				local nobs 0
				local setzero 1
			}
			else error `rc'
		}
		else if r(N)==0 {
			matrix `error1' = J(1,`dim',1)
			local setzero 1
		}
		else	matrix `error1' = `zero'

	/* Build vectors. */

		if `setzero' {
			matrix `b1'     = `zero'
			matrix `V1'     = `sqzero'
			matrix `Vdeff1' = `sqzero'
			matrix `osub1'  = `zero'
			matrix `nsub1'  = `zero'
			matrix `mstr1'  = `zero'
			matrix `mpsu1'  = `zero'
		}
		if `first' {
			matrix `b'     = `b1'
			matrix `V'     = vecdiag(`V1')
			matrix `Vdeff' = vecdiag(`Vdeff1')
			if "`onopt'"=="" {
				MakeN `dim' `osub' `nsub' `mstr' `mpsu'
			}
			else {
				matrix `osub' = `osub1'
				matrix `nsub' = `nsub1'
				MakeN `dim' "" "" `mstr' `mpsu'
			}
			if r(errcode)==3 | r(errcode)==4 /*
			*/ | ("$S_VYcmd"=="total" & !`setzero')  {
				AvErr `b1' `error' `osub'
			}
			else 	matrix `error' = `error1'
		}
		else {
			matrix `b'      = `b'     , `b1'
			matrix `V1'     = vecdiag(`V1')
			matrix `Vdeff1' = vecdiag(`Vdeff1')
			matrix `V'      = `V'     , `V1'
			matrix `Vdeff'  = `Vdeff' , `Vdeff1'
			if "`onopt'"=="" {
				MakeN `dim' `osub1' `nsub1' `mstr1' `mpsu1'
			}
			else {
				MakeN `dim' "" "" `mstr1' `mpsu1'
			}
			matrix `osub' = `osub' , `osub1'
			matrix `nsub' = `nsub' , `nsub1'
			matrix `mstr' = `mstr' , `mstr1'
			matrix `mpsu' = `mpsu' , `mpsu1'
			if r(errcode)==3 | r(errcode)==4 /*
			*/ | ("$S_VYcmd"=="total" & !`setzero')  {
				AvErr `b1' `error1' `osub1'
			}
			matrix `error' = `error' , `error1'
		}

	/* Check obs. */

		if r(N)!=$S_VYnobs {
			global S_VYmiss "missing"
		}

	/* Set deft if fpc. */

		if "$S_VYfpc"!="" {
			matrix $S_VYdeft[1,`i'] /*
			*/ = cond(1/(1-r(N)/r(N_pop))<., /*
			*/        1/(1-r(N)/r(N_pop)), 0)
		}

	/* Call for meff. */

		cap _svy `vl' if `doit', type(`meffcmd') vsrs(`Vmeff1') /*
		*/	$S_VYsopt `srssub'

		if _rc | r(N)==0 {
			matrix `Vmeff1' = `sqzero'
		}
		if `first' {
			matrix `Vmeff' = vecdiag(`Vmeff1')
			local first 0
		}
		else {
			matrix `Vmeff1' = vecdiag(`Vmeff1')
			matrix `Vmeff'  = `Vmeff' , `Vmeff1'
		}

		local i = `i' + 1
	}

	if "$S_VYcmd"=="total" { AvMeff }

/* Create Vdeft if fpc. */

	if "$S_VYfpc"!="" { AvDeft }

/* Label matrices. */

	Labelmat $S_VYb $S_VYv $S_VYosub $S_VYnsub /*
	*/	 $S_VYdeff $S_VYdeft $S_VYmeff     /*
	*/	 $S_VYerr $S_VYmstr $S_VYmpsu

/* Do fake post to set e(sample). */

	matrix `b1' = 0
	matrix `V1' = 0
	matrix colnames `b1' = dummy
	matrix colnames `V1' = dummy
	matrix rownames `V1' = dummy
	estimates post `b1' `V1', esample(`doit')

	SvySave  /* set macros, etc. */
end

program define CompErr
	args b error
	local dim = colsof(`b')
	local i 1
	while `i' <= `dim' {
		if reldif(`b'[1,`i'],1e99) < 1e-14 {
			matrix `b'[1,`i'] = 0
			matrix `error'[1,`i'] = r(errcode) /* from _svy call */
		}
		local i = `i' + 1
	}
end

program define AvErr
	args b error osub

	local dim = colsof(`b')
	matrix `error' = J(1,`dim',0)

	if "$S_VYcmd"=="total" {
		local i 1
		while `i' <= `dim' {
			if `osub'[1,`i']==0 {
				matrix `error'[1,`i'] = 1
			}
			local i = `i' + 1
		}
		exit
	}

/* Here only if mean or ratio with error. */

	local i 1
	while `i' <= `dim' {
		if reldif(`b'[1,`i'],1e99) < 1e-14 {
			matrix `b'[1,`i'] = 0
			if `osub'[1,`i']==0 {
				matrix `error'[1,`i'] = 1
			}
			else if "$S_VYcmd"!="ratio" {
				matrix `error'[1,`i'] = 3
			}
			else	matrix `error'[1,`i'] = 4
		}
		local i = `i' + 1
	}
end

program define CompDeft  /* version for complete case */
	tempname c

	if "$S_VYsrss"=="" {
		scalar `c' = cond(1/(1-$S_VYnobs/$S_VYnpop)<., /*
		*/ 1/(1-$S_VYnobs/$S_VYnpop), 0)

		matrix $S_VYdeft = `c'*$S_VYdeff
		exit
	}

/* Here only if srssubpop. */

	matrix $S_VYdeft = J(1,$S_VYnby,0)

	local i 1
	while `i' <= $S_VYnby {
		matrix $S_VYdeft[1,`i'] /*
	 	*/ = cond(1/(1-$S_VYosub[1,`i']/$S_VYnsub[1,`i'])<., /*
		*/        1/(1-$S_VYosub[1,`i']/$S_VYnsub[1,`i']), 0)
		local i = `i' + 1
	}

	matrix `c' = J(1,$S_VYnvl,1)
	matrix $S_VYdeft = `c' # $S_VYdeft
	matrix $S_VYdeft = diag($S_VYdeft)
	matrix $S_VYdeft = $S_VYdeft*$S_VYdeff
end

program define CompMeff  /* version for complete case */
	tempname c

	if "$S_VYnby"=="" | "$S_VYnby"=="1" {
		scalar `c' = $S_VYnsub[1,1]^2
		matrix $S_VYmeff = `c'*$S_VYmeff
		exit
	}

	matrix `c' = J(1,$S_VYnby,0)

	local i 1
	while `i' <= $S_VYnby {
		matrix `c'[1,`i'] = $S_VYnsub[1,`i']^2
		local i = `i' + 1
	}

	tempname a
	matrix `a' = J(1,$S_VYnvl,1)
	matrix `c' = `a' # `c'
	matrix `c' = diag(`c')
	matrix $S_VYmeff = `c'*$S_VYmeff
end

program define AvDeft  /* version for available case */

	if "$S_VYsrss"=="" {
		if "$S_VYnby"!="" {
			local dim = $S_VYnby*$S_VYnvl
			if $S_VYnby > 1 {
				tempname c
				matrix `c' = J(1,$S_VYnby,1)
				matrix $S_VYdeft = $S_VYdeft # `c'
			}
		}
		else 	local dim "$S_VYnvl"

		local i 1
		while `i' <= `dim' {
			matrix $S_VYdeft[1,`i'] = $S_VYdeft[1,`i'] /*
			*/			 *$S_VYdeff[1,`i']
			local i = `i' + 1
		}
		exit
	}

/* Here only if srssubpop. */

	local dim = $S_VYnby*$S_VYnvl

	matrix $S_VYdeft = $S_VYdeff

	local i 1
	while `i' <= `dim' {
		matrix $S_VYdeft[1,`i'] /*
 		*/= cond(1/(1-$S_VYosub[1,`i']/$S_VYnsub[1,`i'])<.,/*
		*/       1/(1-$S_VYosub[1,`i']/$S_VYnsub[1,`i']), 0)/*
		*/  *$S_VYdeff[1,`i']

		local i = `i' + 1
	}
end

program define AvMeff  /* version for available case */
	local dim = colsof($S_VYnsub)

	local i 1
	while `i' <= `dim' {
		matrix $S_VYmeff[1,`i'] = $S_VYnsub[1,`i']^2*$S_VYmeff[1,`i']
		local i = `i' + 1
	}
end

program define MakeN
	args dim osub nsub nstr npsu

/* Note: r() refer to an _svy call before MakeN is called. */

	tempname one s

	if "$S_VYnby"=="" {
		local obs  "r(N)"
		local npop "r(N_pop)"
	}
	else {
		local obs  "r(N_sub)"
		local npop "r(N_subpop)"
	}
	matrix `one' = J(1,`dim',1)

	if "`osub'"!="" {
		scalar `s'    = cond(`obs'<.,`obs',0)
		matrix `osub' = `s'*`one'
		scalar `s'    = cond(`npop'<.,`npop',0)
		matrix `nsub' = `s'*`one'
	}
	if "`nstr'"!="" {
		scalar `s'    = cond(r(N_strata)<.,r(N_strata),0)
		matrix `nstr' = `s'*`one'
		scalar `s'    = cond(r(N_psu)<.,r(N_psu),0)
		matrix `npsu' = `s'*`one'
	}
end

program define Labelmat /* list of matrices */
	GetNames  /* get equation and column names */
	local M 1
	while "``M''"!="" {
		matrix coleq   ``M'' = $S_VYceq
		matrix colname ``M'' = $S_VYcnam
		if rowsof(``M'')==colsof(``M'') {
			matrix roweq   ``M'' = $S_VYceq
			matrix rowname ``M'' = $S_VYcnam
		}
		local M = `M' + 1
	}
end

program define GetNames
	if "$S_VYby"=="" {
		if "$S_VYcmd"!="ratio" {
			global S_VYceq  "_"
			global S_VYcnam "$S_VYvl"
			exit
		}

	/* Do ratio with no by() subpops. */

		tokenize $S_VYvl
		local y 1
		while "``y''"!="" {
			local x = `y' + 1
			global S_VYceq "$S_VYceq ``y''"
			global S_VYcnam "$S_VYcnam ``x''"
			local y = `y' + 2
		}
		exit
	}

/* If here, there are by() subpops. */

	local nvar : word count $S_VYby
	if `nvar'==1 { /* there is one subpop label */
		local twoby "*"
		local cnam "$S_VYcnam"
		global S_VYcnam
	}
	else { /* use numbers (isub) for subpop labels */
		local isub 1
		while `isub' <= $S_VYnby {
			local cnam "`cnam' `isub'"
			local isub = `isub' + 1
		}
	}

⌨️ 快捷键说明

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