cs.ado
来自「是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到」· ADO 代码 · 共 599 行 · 第 1/2 页
ADO
599 行
*! version 3.4.14 18mar2005
program define cs, rclass sort
version 6, missing
syntax varlist(min=2 max=2) [if] [in] [fw] [, Binomial(varname) /*
*/ BY(varlist) noHom noHEt noCrude Exact EStandard Fast IStandard /*
*/ Level(cilevel) OR Pool RD Standard(varname) /*
*/ TB Woolf ]
local hom "`hom'`het'"
tokenize `varlist'
local cas `1'
local ex `2'
if "`woolf'" != "" & "`or'" == "" {
di as error "woolf option only valid with OR"
exit 198
}
local stdflg=("`standar'"!="")+("`estanda'"!="")+("`istanda'"!="")
if `stdflg'>1 { error 198 }
marksample use
tempvar WGT one first decoded
* checks that weight and binomial are not both present
if "`binomial'"!="" & "`weight'"!="" {
di in re "weight not allowed with binomial frequency records"
exit 198
}
if "`binomial'"~="" {
preserve
qui keep if `use'
tempvar case mywt
bitowt `cas' `binomial' , c(`case') w(`mywt')
local exp "= `mywt'"
qui drop `cas'
tempvar cas
rename `case' `cas'
local weight "fweight"
}
if "`weight'"!="" {
qui gen double `WGT' `exp' if `use'
local w "[fweight=`WGT']"
}
if "`by'"~="" {
local count: word count `by'
if `count' > 1 {
tempvar myby
qui gen str18 `myby'=""
tokenize `by'
while "`1'"~="" {
qui replace `myby'=`myby'+" "+string( `1')
mac shift
}
if "`standard'"~="" {
local stdop "standard(`standard')"
}
label var `myby' "`by'"
*local myopt ", `pool' `or' `tb' `woolf' `exact' "
*cs `cas' `ex' `if' `in' `w' `myopt'
local myopt ", `estandard' `istandard' `pool' `or' `tb' `woolf' `exact' by(`myby') `rd' level(`level') `crude' `hom' `stdopt' "
cs `cas' `ex' `if' `in' `w' `myopt'
ret add
exit
}
}
if "`by'"!="" {
capture replace `use'=0 if `by'>=. /* fail on str ok */
quietly {
sort `use' `by'
if "`standar'"!="" {
capture assert `standar'>=0 if `use'
if _rc {
noi di in red /*
*/ "`standar' has negative values"
exit 498
}
capture by `use' `by': assert /*
*/ `standar'==`standar'[_n-1] if _n>1 & `use'
if _rc {
noi di in red /*
*/ "`standar' not constant within `by'"
exit 198
}
}
by `use' `by': gen byte `first'=1 if _n==1 & `use'
sort `first' `by'
if "`crude'" == "" {
if "`level'" != "" {
local ml "level(`level')" }
else local ml ""
local myopt ", `or' `tb' `woolf' `exact' `ml'"
cs `cas' `ex' `if' `in' `w' `myopt'
if "`or'"!="" {
local CRUDE = r(or)
local C0 = r(lb_or)
local C1 = r(ub_or)
}
else {
if "`rd'" != "" {
local CRUDE = r(rd)
local C0 = r(lb_rd)
local C1 = r(ub_rd)
}
else {
local CRUDE = r(rr)
local C0 = r(lb_rr)
local C1 = r(ub_rr)
}
}
ret add
local CTYPE "(Cornfield)"
if "`tb'" != "" { local CTYPE "(tb)" }
if "`woolf'" != "" { local CTYPE "(Woolf)" }
}
}
}
else {
if `stdflg' | "`rd'" != ""{
error 198
}
}
quietly gen byte `one'=1
_crcvarl `ex'
local col "col(`s(varlabel)')"
if "`by'"=="" {
quietly {
safesum `one' `w' if `cas' & `ex' & `use'
local a=r(sum)
safesum `one' `w' if `cas' & `ex'==0 & `use'
local b=r(sum)
safesum `one' `w' if `cas'==0 & `ex' & `use'
local c=r(sum)
safesum `one' `w' if `cas'==0 & `ex'==0 & `use'
local d=r(sum)
}
csi `a' `b' `c' `d', level(`level') /*
*/ `col' `or' `woolf' `tb' `exact'
ret add /* add return values from csi call */
exit
}
local lby : value label `by'
if "`lby'"!="" {
quietly decode `by', gen(`decoded')
local lby "`decoded'"
}
else local lby `by'
local lbl : var label `by'
if "`lbl'"=="" { local lbl "`by'" }
else local lbl = substr("`lbl'",1,16)
local skip=16-length("`lbl'")
if "`or'"!="" {
if `stdflg'!=0 {
error 198
}
local type "OR"
}
else if "`rd'"!="" {
if `stdflg'==0 {
error 198
}
local type "RD"
}
else local type "RR"
if `stdflg'== 0 { local hdr2 "M-H" }
else local hdr2 " "
local cil `=string(`level')'
local cil `=length("`cil'")'
di in smcl _n in gr _skip(`skip') "`lbl' {c |}" _col(26) "`type'" /*
*/ _col(`=37-`cil'') `"[`=strsubdp("`level'")'% Conf. Interval] `hdr2' Weight"' _n /*
*/ "{hline 17}{c +}{hline 49}"
#delimit ;
local i 1; local df 0; local iz=invnorm(1-(1-`level'/100)/2);
local Swgt 0; local Sor 0; local SPR 0; local SR 0;
local SPSQR 0; local SS 0; local SQS 0; local SXnum 0;
local SXden 0; local S1 0; local S2 0; local or0 .;
local or1 .; local POOL .; local P0 .; local P1 .; local Sa 0;
local Sb 0; local Sc 0; local Sd 0; local Sn0 0; local Sn1 0;
local pnum 0; local pden 0; /* local nf ; */
tempvar irr virr Sf;
qui gen `Sf'=. ; qui gen `irr'=. ; qui gen `virr'=. ;
#delimit cr
while 1 {
if `first'[`i']!=1 { /* End of `by' loop */
#delimit ;
global S_1 . ; global S_2 . ; global S_3 . ; global S_4 . ;
global S_5 . ; global S_6 . ; global S_7 . ; global S_8 . ;
global S_9 . ; global S_10 .; global S_11 .; global S_12 ;
global S_13 ; global S_14 ;
#delimit cr
#delimit ;
ret local p1_exact ; ret local chi2 ; ret local p ;
ret local p_exact ; ret local rd ; ret local lb_rd ;
ret local ub_rd ; ret local rr ; ret local lb_rr ;
ret local ub_rr ; ret local or ; ret local lb_or ;
ret local ub_or ; ret local afe ; ret local lb_afe ;
ret local ub_afe ;
#delimit cr
if `stdflg'==0 {
local or=`Sor'/`Swgt'
if "`type'"=="OR" {
local se=sqrt(`SPR'/(2*((`SR')^2))+/*
*/ `SPSQR'/(2*`SR'*`SS')+/*
*/ `SQS'/(2*((`SS')^2)))
local x2=((`SXnum')^2)/`SXden'
global S_1 `x2' /* double save */
ret scalar chi2 = `x2'
if "`tb'"=="" {
local or0=exp(ln(`or')-`iz'*`se')
local or1=exp(ln(`or')+`iz'*`se')
}
else {
local x=`SXnum'/sqrt(`SXden')
local or0=(`or')^(1-`iz'/`x')
local or1=(`or')^(1+`iz'/`x')
if `or0'>`or1' {
local h `or1'
local or1 `or2'
local or2 `h'
}
local note "tb"
}
}
else { /* RR */
local se=sqrt(`S1'/(`S2'*`Swgt'))
local or0=exp(ln(`or')-`iz'*`se')
local or1=exp(ln(`or')+`iz'*`se')
}
local hdr2 " M-H combined"
local paren "M-H"
}
else {
if "`estanda'"!="" {
local hdr2 "E. Standardized"
local paren "E.S."
}
else if "`istanda'"!="" {
local hdr2 "I. Standardized"
local paren "I.S."
}
else {
local hdr2 " Standardized"
local paren "STD."
}
if "`type'"=="RR" {
local or=`SXnum'/`SXden'
local se=sqrt(`SPR'/(`SXnum')^2+/*
*/ `SR'/(`SXden')^2)
local or0=exp(ln(`or')-`iz'*`se')
local or1=exp(ln(`or')+`iz'*`se')
}
else {
local or=`Sor'/`Swgt'
local se=sqrt(`SXnum'/(`Swgt')^2)
local or0=`or'-`iz'*`se'
local or1=`or'+`iz'*`se'
}
}
if "`type'"=="RR" {
global S_6 `or' /* double save S_ and r() */
global S_7 `or0'
global S_8 `or1'
ret scalar rr = `or'
ret scalar lb_rr = `or0'
ret scalar ub_rr = `or1'
}
else if "`type'"=="OR" {
global S_9 `or'
global S_10 `or0'
global S_11 `or1'
ret scalar or = `or'
ret scalar lb_or = `or0'
ret scalar ub_or = `or1'
}
else { /* RD */
global S_3 `or'
global S_4 `or0'
global S_5 `or1'
ret scalar rd = `or'
ret scalar lb_rd = `or0'
ret scalar ub_rd = `or1'
}
if "`note'"=="" { local jopt "" }
else local jopt "mote(`note')"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?