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 + -
显示快捷键?