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

📄 svytab.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 3 页
字号:

/* Display error and warning messages. */

	if "`e(zero)'"!="" {
		di _n as txt "  Table contains a zero in the marginals." _n /*
		*/ "  Statistics cannot be computed."
	}
	if e(r) == 1 {
		di _n as txt "  Only one row category." _n /*
		*/ "  Statistics cannot be computed."
	}
	if e(c) == 1 {
		di _n as txt "  Only one column category." _n /*
		*/ "  Statistics cannot be computed."
	}
	if e(N_psu) - e(N_strata) < (e(r) - 1)*(e(c) - 1) {
		di _n as txt "  Note:  variance estimate degrees of freedom " /*
		*/ "= " as res e(N_psu) - e(N_strata) _n as txt /*
		*/ "         are less than" _n /*
		*/ "         nominal table degrees of freedom = " /*
		*/ as res (e(r) - 1)*(e(c) - 1)
	}

/* Display statistics. */

	if "`pearson'`lr'`wald'`llwald'`fuller'"=="" {
		local pearson "pearson"
	}
	if "`pearson'"!="" {
		if "`null'"!="" {
			DispStat "Pearson:" Pear Penl
		}
		else	DispStat "Pearson:" Pear
	}
	if "`lr'"!="" {
		if "`null'"!="" {
			DispStat "Likelihood ratio:" LR LRnl
		}
		else	DispStat "Likelihood ratio:" LR
	}
	if "`fuller'"!="" {
		DispStat "Pearson (Fuller version):" Full
	}
	if "`wald'"!="" {
		DispWald "Wald (Pearson):" Wald `adjust'
	}
	if "`llwald'"!="" {
		DispWald "Wald (log-linear):" LLW `adjust'
	}

/* Display mean generalized deff and cv. */

	if "`deff'`deft'"!="" {
		di _n as txt "  Mean generalized deff" _col(35) "= " as res /*
		*/ %9.4f e(mgdeff) _n as txt "  CV of generalized deffs" /*
		*/ _col(35) "= " as res %9.4f e(cvgdeff)
	}

/* Display FPC warning. */

	if "`e(fpc)'"!="" { /* print FPC note */
		di _n as txt "Finite population correction (FPC) assumes " /*
		*/ "simple random sampling without " _n /*
		*/ "replacement of PSUs within each stratum with no " /*
		*/ "subsampling within PSUs."
	}
end

program DispTab
	args label se deff deft marginals percent proportion cell count row /*
	*/ column level ci format vertical obs /*
	*/ cellwid /* 
	*/ csepwid /*
	*/ stubwid /* 
	*/ 


	if "`format'"=="" {
		local format "%6.0g"
	}

/* Preserve, then make data set for -tabdisp-. */

	preserve
	drop _all

	tempname b matr matc Row Col

	local ncat = e(r)*e(c)
	local iii "int((_n-1)/e(c))+1"  /* row position */
	local jjj "mod(_n-1,e(c))+1"    /* column position */

	mat `b' = e(Prop)
	local bij "`b'[`iii',`jjj']"

	mat `matr' = J(1,e(c),1)
	mat `matr' = `matr'*`b''  /* row marginals */
	mat `matc' = J(1,e(r),1)
	mat `matc' = `matc'*`b'   /* column marginals */

	mat `Row' = e(Row)
	mat `Col' = e(Col)

	quietly {

	/* Set obs. */

		if "`marginals'"=="" {
			local Nr1 = `ncat' + 1 /* start row marginals */
			local Nr2 = `ncat'+e(r) /* end row marginals */
			local Nc1 = `Nr2' + 1     /* start column marginals */
			local Nc2 = `Nr2' + e(c) /* end column marginals */
			local N   = `Nc2' + 1     /* end */

			local total "total"
		}
		else {
			local Nr1 = 1
			local Nr2 = `ncat'
			local Nc1 = 1
			local Nc2 = `ncat'
			local N `ncat'
		}

		set obs `N'

	/* Make stubs of table. */

		gen double `e(rowvar)' = `Row'[1,`iii'] in 1/`ncat'
		gen double `e(colvar)' = `Col'[1,`jjj'] in 1/`ncat'

		if "`marginals'"=="" {
			replace `e(rowvar)' = `Row'[1,_n-`Nr1'+1] in `Nr1'/`Nr2'
			replace `e(colvar)' = `Col'[1,_n-`Nc1'+1] in `Nc1'/`Nc2'
		}

	/* Make variable labels and value labels for stub variables. */

		if "`label'"=="" {
			label variable `e(rowvar)' `"`e(rowvlab)'"'
			label variable `e(colvar)' `"`e(colvlab)'"'

			if "`e(rowlab)'"!="" { 
				tempname lblname
				MakeLab `lblname' `e(rowvar)' `Row' 
			}
			if "`e(collab)'"!="" { 
				tempname lblname
				MakeLab `lblname' `e(colvar)' `Col'
			}
		}

	/* Handle display of missing values if necessary. */

		tempname lblname
		SwitchMiss `lblname' `e(rowvar)' `ncat' `Nr1' `Nr2' `Row'
		tempname lblname
		SwitchMiss `lblname' `e(colvar)' `ncat' `Nc1' `Nc2' `Col'

	/* Make counts and proportions or percents. */

		local keyi 1

		if "`count'"!="" {
			tempvar xc
			gen double `xc' = e(total)*`bij' in 1/`ncat'

			if "`marginals'"=="" {
				replace `xc' = e(total)*`matr'[1,_n-`Nr1'+1] /*
				*/ in `Nr1'/`Nr2'
				replace `xc' = e(total)*`matc'[1,_n-`Nc1'+1] /*
				*/ in `Nc1'/`Nc2'
				replace `xc' = e(total) in l
			}

			if "`e(wtype)'"!="" {
				local key`keyi' "weighted counts"
			}
			else	local key`keyi' "counts"
			local keyi = `keyi' + 1
		}

		if "`percent'"!="" {
			local porp 100 /* percent or proportion */
			local kporp "percentages"
		}
		else {
			local porp 1
			local kporp "proportions"
		}

		if "`cell'"!="" {
			tempvar xp
			gen double `xp' = `porp'*`bij' in 1/`ncat'

			if "`marginals'"=="" {
				replace `xp' = `porp'*`matr'[1,_n-`Nr1'+1] /*
				*/ in `Nr1'/`Nr2'
				replace `xp' = `porp'*`matc'[1,_n-`Nc1'+1] /*
				*/ in `Nc1'/`Nc2'
				replace `xp' = `porp' in l
			}
			local key`keyi' "cell `kporp'"
			local keyi = `keyi' + 1
		}
		if "`row'"!="" {
			tempvar xrow
			gen double `xrow' = `porp'*`bij'/`matr'[1,`iii'] /*
			*/ in 1/`ncat'

			if "`marginals'"=="" {
				replace `xrow' = `porp' in `Nr1'/`Nr2'
				replace `xrow' = `porp'*`matc'[1,_n-`Nc1'+1] /*
				*/ in `Nc1'/`Nc2'
				replace `xrow' = `porp' in l
			}
			local key`keyi' "row `kporp'"
			local keyi = `keyi' + 1
		}
		if "`column'"!="" {
			tempvar xcol
			gen double `xcol' = `porp'*`bij'/`matc'[1,`jjj'] /*
			*/ in 1/`ncat'

			if "`marginals'"=="" {
				replace `xcol' = `porp'*`matr'[1,_n-`Nr1'+1] /*
				*/ in `Nr1'/`Nr2'
				replace `xcol' = `porp' in `Nc1'/`Nc2'
				replace `xcol' = `porp' in l
			}
			local key`keyi' "column `kporp'"
			local keyi = `keyi' + 1
		}

	/* From here to `obs', only one of count, cell, row, or column is
	   chosen.
	*/
		local keylast = `keyi' - 1
		local item "`key`keylast''"

		if "`count'"!="" {
			local porp 1
		}

		if "`se'`ci'"!="" {
			tempvar xse
			tempname V
			mat `V' = e(V)
			gen double `xse' = `porp'*sqrt(`V'[_n,_n]) /*
			*/ in 1/`ncat'

			if "`marginals'"=="" {
				if "`row'"=="" {
					mat `V' = e(V_row)
					replace `xse' = `porp'* /*
					*/ sqrt(`V'[_n-`Nr1'+1, /*
					*/ _n-`Nr1'+1]) in `Nr1'/`Nr2'
				}
				if "`column'"=="" {
					mat `V' = e(V_col)
					replace `xse' = `porp'* /*
					*/ sqrt(`V'[_n-`Nc1'+1, /*
				        */ _n-`Nc1'+1]) in `Nc1'/`Nc2'
				}
			}

			if "`se'"!="" {
				if "`vertical'"=="" {
					local key`keyi' /*
					*/ "(standard errors of `item')"
				}
				else {
					local key`keyi' /*
					*/ "standard errors of `item'"
				}
				local keyi = `keyi' + 1
			}
		}
		if "`ci'"!="" {
			tempname t
			tempvar lb ub
			scalar `t' = /*
			*/ invttail(e(N_psu)-e(N_strata),(1-`level'/100)/2)

			if "`count'"=="" {
				local x "`xp'`xrow'`xcol'"
				if `porp' == 100 {
					local x "(`x'/100)"
				}

				gen double `lb' = `porp'/(1 + /*
				*/ exp(-(log(`x'/(1-`x')) /*
				*/ - `t'*`xse'/(`porp'*`x'*(1-`x')))))

				gen double `ub' = `porp'/(1 + /*
				*/ exp(-(log(`x'/(1-`x')) /*
				*/ + `t'*`xse'/(`porp'*`x'*(1-`x')))))
			}
			else {
				gen double `lb' = `xc' - `t'*`xse'
				gen double `ub' = `xc' + `t'*`xse'
			}

			local xci "`lb' `ub'"

			if "`se'"=="" {
				local xse /* erase tempvar */
			}

			if "`vertical'"=="" {
				local key`keyi' /*
*/ `"[`=strsubdp("`level'")'% confidence intervals for `item']"'
			}
			else {
				local key`keyi' /*
*/ `"lower `=strsubdp("`level'")'% confidence bounds for `item'"'
				local keyi = `keyi' + 1
				local key`keyi' /*
*/ `"upper `=strsubdp("`level'")'% confidence bounds for `item'"'
			}
			local keyi = `keyi' + 1
		}
		if "`vertical'"=="" & "`se'`ci'"!="" {
			if "`se'"=="" {
				local nose "*"
			}
			if "`ci'"=="" {
				local noci "*"
			}

			`nose' tempvar xxse
			`nose' gen str1 `xxse' = "" in 1
			`noci' tempvar xci
			`noci' gen str1 `xci' = "" in 1

			local i 1
			while `i' <= `N' {
				`nose' local ses : di `format' `xse'[`i']
				`nose' replace `xxse' = "("+trim("`ses'")+")" /*
				*/ in `i' if `xse'<.

				`noci' local slb : di `format' `lb'[`i']
				`noci' local sub : di `format' `ub'[`i']
				`noci' replace `xci' = "["+trim("`slb'") /*
				*/ +","+trim("`sub'")+"]" in `i' /*
				*/ if `lb'<. & `ub'<.
				local i = `i' + 1
			}

			`nose' local xse "`xxse'"
		}
		if "`deff'"!="" {
			tempvar xdeff
			DeffVar `xdeff' f `Nr1' `Nr2' `Nc1' `Nc2' /*
			*/ "`marginals'" "`row'" "`column'"
			local key`keyi' "deff for variances of `item'"
			local keyi = `keyi' + 1
		}
		if "`deft'"!="" {
			tempvar xdeft
			DeffVar `xdeft' t `Nr1' `Nr2' `Nc1' `Nc2' /*
			*/ "`marginals'" "`row'" "`column'"
			local key`keyi' "deft for variances of `item'"
			local keyi = `keyi' + 1
		}
		if "`obs'"!="" {
			tempname Obs
			tempvar xobs
			if "`e(ObsSub)'" ~= "" {
				mat `Obs' = e(ObsSub)
			}
			else mat `Obs' = e(Obs)
			gen long `xobs' = `Obs'[`iii',`jjj'] in 1/`ncat'
			if "`marginals'"=="" {
				tempname J
				mat `J' = J(1,e(c),1)
				mat `J' = `J'*`Obs''
				replace `xobs' = `J'[1,_n-`Nr1'+1] /*
				*/ in `Nr1'/`Nr2'
				mat `J' = J(1,e(r),1)
				mat `J' = `J'*`Obs'
				replace `xobs' = `J'[1,_n-`Nc1'+1] /*
				*/ in `Nc1'/`Nc2'
				if "`e(N_sub)'" ~= "" {
					replace `xobs' = e(N_sub) in l
				}
				else replace `xobs' = e(N) in l
			}
			local key`keyi' "number of observations"
			local keyi = `keyi' + 1
		}
	}

	local vars "`xc' `xp' `xrow' `xcol' `xse' `xci' `xdeff' `xdeft' `xobs'"

	tabdisp `e(rowvar)' `e(colvar)', cell(`vars') `total' /*
	*/ format(`format') /*
	*/ `cellwid' /*
	*/ `csepwid' /*
	*/ `stubwid' /*
	*/


	if "`e(tab)'"!="" {
		di as txt "  Tabulated variable:  `e(tab)'" _n
	}

	di as txt "  Key:  " _c
	local col 1
	local i 1
	while `i' < `keyi' {
		di _col(`col') as res "`key`i''"
		local col 9
		local i = `i' + 1
	}
end

program DeffVar
	args var ft Nr1 Nr2 Nc1 Nc2 marginals row column

	local ncat = e(r)*e(c)
	tempname def
	mat `def' = e(Def`ft')

	quietly {
		gen double `var' = cond(`def'[1,_n]!=0,`def'[1,_n],.) /*
		*/ in 1/`ncat'

		if "`marginals'"=="" {
			if "`row'"=="" {
				mat `def' = e(Def`ft'_row)
				replace `var' = cond(`def'[1,_n-`Nr1'+1]!=0, /*
				*/ `def'[1,_n-`Nr1'+1],.) in `Nr1'/`Nr2'
			}
			if "`column'"=="" {
				mat `def' = e(Def`ft'_col)
				replace `var' = cond(`def'[1,_n-`Nc1'+1]!=0, /*
				*/ `def'[1,_n-`Nc1'+1],.) in `Nc1'/`Nc2'
			}
		}
	}
end

program SwitchMiss
	args lblname var N N1 N2 mat

	local lab : value label `var'
	if "`lab'" == "" {
		local lab `lblname'
	}
	else	local add ", add"

	/* Note that a key assumption here is that after encountering the
	 * first missing value, the rest of the columns of `mat' (moving to
	 * the right) contain missing values.  Otherwise the `newid' may
	 * collide with non-missing valued labels.
	 */

	local newid 0
	local ncols = colsof(`mat')
	forval i = 1/`ncols' {
		if missing(`mat'[1,`i']) {
			local miss = `mat'[1,`i']
			local ++newid
			label define `lab' `newid' "`miss'" `add'
			qui replace `var' = `newid'		///
				if `var' == `miss'		///
				& (_n<=`N'|(`N1'<=_n&_n<=`N2'))

			local add ", add"
		}
		else	local newid = `mat'[1,`i']
	}
	if "`lab'" == "`lblname'" {
		label value `var' `lab'
	}
end

program FixMiss
	args lblname var missval N N1 N2
	local missval = round((`missval')+1,1)

	local lab : value label `var'
	if "`lab'"=="" {
		local lab `lblname'
		label define `lab' `missval' "."
		label value `var' `lab'
	}
	else	label define `lab' `missval' "." , add

	qui replace `var' = `missval'		///
		if missing(`var') & (_n<=`N'|(`N1'<=_n&_n<=`N2'))
end

program MakeLab
	args labname var stub

	tempname imat
	local dim = colsof(matrix(`stub'))
	local i 1
	while `i' <= `dim' {
		mat `imat' = `stub'[1,`i'..`i']
		local lab : colnames `imat'
		if "`lab'"!="hoborxqc" {
			local x = `stub'[1,`i']
			label define `labname' `x' "`lab'", `add'
			local add "add"
		}
		local i = `i' + 1
	}
	if "`add'"!="" {
		label value `var' `labname'
	}
end

program DispStat
	args title stat null

	local col0  5 /* left margin */
	local col1 19 /* statistic   */
	local col2 35 /* equal sign  */
	local col3 51 /* p-value     */

	local dfnom = (e(r)-1)*(e(c)-1)
	local df1 "e(df1_`stat')"
	local df2 "e(df2_`stat')"

	if `df1' != int(`df1') {
		local df1 "%4.2f `df1'"
	}
	if `df2' != int(`df2') {
		local df2 "%4.2f `df2'"
	}

	di _n as txt "  `title'"

	di as txt _col(`col0') "Uncorrected" _col(`col1') "chi2(" as res /*
	*/ `dfnom' as txt ")" _col(`col2') "= " as res %9.4f e(cun_`stat')

	if "`null'"!="" {
		local df1n "e(df1_`null')"
		local df2n "e(df2_`null')"

		if `df1n' != int(`df1n') {
			local df1n "%4.2f `df1n'"
		}
		if `df2n' != int(`df2n') {
			local df2n "%4.2f `df2n'"
		}

		di as txt _col(`col0') "D-B (null)" _col(`col1') "F(" as res /*
		*/ `df1n' as txt ", " as res `df2n' as txt ")" _col(`col2') "= " /*
		*/ as res %9.4f e(F_`null') _col(`col3') as txt "P = " as res /*
		*/ %6.4f e(p_`null')
	}

	di as txt _col(`col0') "Design-based" _col(`col1') "F(" as res `df1' /*
	*/ as txt ", " as res `df2' as txt ")" _col(`col2') "= " as res %9.4f /*
	*/ e(F_`stat') _col(`col3') as txt "P = " as res %6.4f e(p_`stat')
end

program DispWald
	args title stat unadj

	local col0  5 /* left margin */
	local col1 19 /* statistic   */
	local col2 35 /* equal sign  */
	local col3 51 /* p-value     */

	di _n as txt "  `title'"

	local df1 = (e(r) - 1)*(e(c) - 1)

	di as txt _col(`col0') "Unadjusted" _col(`col1') "chi2(" as res /*
	*/ `df1' as txt ")" _col(`col2') "= " as res %9.4f /*
	*/ e(cun_`stat')

	if "`unadj'"!="" {
		di as txt _col(`col0') "Unadjusted" _col(`col1') "F(" as res /*
		*/ `df1' as txt ", " as res e(df_r) /*
		*/ as txt ")" _col(`col2') "= " as res %9.4f e(Fun_`stat') /*
		*/ _col(`col3') as txt "P = " as res %6.4f e(pun_`stat')
	}

	di as txt _col(`col0') "Adjusted" _col(`col1') "F(" as res /*
	*/ `df1' as txt ", " as res e(df_r)-`df1'+1 as txt ")" /*
	*/ _col(`col2') "= " as res %9.4f e(F_`stat') _col(`col3') /*
	*/ as txt "P = " as res %6.4f e(p_`stat')
end

exit

(1) Non-Wald statistics:

    Pear = Pearson with observed misspecified variance
    Penl = Pearson with null misspecified variance
    LR   = LR      with observed
    LRnl = LR      with null

    all these yield

	cun_Pear   uncorrected (i.e., misspecified) chi2
	F_Pear     F-statistic: F = chi2/df1
	df1_Pear   df1 = tr^2/tr2
	df2_Pear   df2 = df1*(#psu - #strata)
	p_Pear     p-value for above F-statistic ~ F(df1,df2)

(2) Fuller variant:

    Full = Pearson with null misspecified variance using Fuller et al.'s
    formula.

	F_Full     F = chi2/df1 ~ F(df1,df2)
	df1_Full   df1 = <complex formula>
	df2_Full   df2 = #psu - #strata
	p_Full     p-value for above F-statistic ~ F(df1,df2)

(3) Wald statistics:

    Wald = "Pearson" Wald
    LLW  = log-linear Wald

    both of these produce (with W or T in place of W below):

	F_Wald     adjusted F = (dfv-df1+1)*chi2/(df1*dfv)
	df1_Wald   (# rows - 1)*(# columns - 1)
	df2_Wald   df2 = dfv - df1 + 1, where dfv = #psu - #strata
	p_Wald     p-value for adjusted F-statistic ~ F(df1,df2)

	cun_Wald   unadjusted chi2
	Fun_Wald   unadjusted F = chi2/df1
	pun_Wald   p-value for unadjusted F-statistic ~ F(df1,dfv)

<end of file>

⌨️ 快捷键说明

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