📄 xttab.ado
字号:
*! version 1.1.7 02apr2005
program define xttab, byable(recall) sort
version 6.0, missing
syntax varlist(max=1) [if] [in] [, I(varname)]
xt_iis `i'
local ivar "`s(ivar)'"
local typ : type `varlist'
if substr("`typ'",1,3)=="str" {
di in red "`varlist' must be numeric"
exit 109
}
preserve
tempvar touse freqo freqb freqw nivar ni
mark `touse' `if' `in'
markout `touse' `varlist' `ivar'
qui sum if `touse'== 1
if r(N)==0 {
noi di in red "no observations"
exit 2000
}
local v "`varlist'"
quietly {
keep if `touse'
keep `v' `ivar'
sort `ivar' `v'
by `ivar': gen long `nivar' = _N
by `ivar': gen byte `ni'=1 if _n==_N
summ `ni'
local N = r(sum)
drop `ni'
sort `v' `ivar'
by `v': gen long `freqw' = _N
by `v' `ivar': replace `nivar' = 0 if _n!=_N
by `v': replace `nivar' = sum(`nivar')
by `v': gen long `freqo' = _N
local Nv = _N
by `v' `ivar': gen long `freqb' = 1 if _n==_N
by `v': replace `freqb'=sum(`freqb')
by `v': replace `freqb' = `freqb'[_N]
by `v': keep if _n==_N
}
qui gen long `ni' = sum(`freqb')
local vlab : value label `v'
if "`vlab'"!="" {
tempvar new
decode `v', gen(`new') maxlen(8)
local v `new'
}
di _n _skip(18) in gr "Overall" _skip(13) "Between" _skip(12) "Within"
di in smcl in gr %9s abbrev("`varlist'",9) /*
*/ " {c |} Freq. Percent" _skip(6) "Freq. Percent" /*
*/ _skip(8) "Percent"
di in smcl in gr "{hline 10}{c +}{hline 53}"
local i 1
while `i' <= _N {
local stub = `v'[`i']
if "`new'" != "" {
local distub %9s "`stub'"
}
else {
local distub %9.0g `stub'
}
di in smcl in gr `distub' " {c |}" in ye /*
*/ %8.0f `freqo'[`i'] /*
*/ %10.2f 100*`freqo'[`i']/`Nv' /*
*/ %10.0f `freqb'[`i'] /*
*/ %10.2f 100*`freqb'[`i']/`N' /* `ni'[_N] */ " " /*
*/ %14.2f 100*`freqw'[`i']/`nivar'[`i']
local i=`i'+1
}
tempvar overp
quietly {
gen `overp'= sum( /*
*/ (`freqb'/`ni'[_N])*100*(`freqw'/`nivar') /*
*/ )
replace `freqo'=sum(`freqo')
replace `freqb'=sum(`freqb')
}
di in smcl in gr "{hline 10}{c +}{hline 53}"
di in smcl in gr " Total {c |}" in ye /*
*/ %8.0f `freqo'[_N] /*
*/ %10.2f 100 /*
*/ %10.0f `freqb'[_N] /*
*/ %10.2f 100*`freqb'[_N]/`N' /* 100 */ " " /*
*/ %14.2f `overp'[_N]
local base : di "(n = " `N'
local col = 40 - length("`base'")
di in gr _col(`col') "(n = " in ye `N' in gr ")"
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -