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

📄 ltable.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 2 页
字号:
*! version 2.8.2  02mar2005
program define ltable, sortpreserve
	version 6, missing
	if _caller() < 8 {
		ltable_7 `0'
		exit
	}

	local baopts 					/*
		*/ noAdjust BY(varname) noCONF 		/*
		*/ Failure Hazard Intervals(string) 	/*
		*/ Level(integer $S_level) 		/*
		*/ SUrvival noTAble Test TVid(varname)
	if _caller() >= 8.2 {
		local baopts `baopts' SAVing(string asis)
	}
	local gropts Graph OVerlay *

	syntax varlist(min=1 max=2) [fw] [if] [in] [, `baopts' `gropts' ]
	if "`graph'`overlay'" == "" {
		cap noi syntax varlist(min=1 max=2) [fw] [if] [in] [, `baopts']
		if _rc { 
			di in red /*
	*/ "(option is invalid or you need to specify graph option, too)"
			exit _rc
		}
	}
	else {
		if "`overlay'" != "" {
			local graph graph
			if "`by'" == "" {
				di as err ///
"option overlay may not be specified without the by() option"
				exit 198
			}
		}
		if "`hazard'"!="" {	
			di as err "graph not allowed with hazard"
			di as err "use sts graph to graph hazard estimates"
			exit 198
		}
		_get_gropts , graphopts(`options')	///
			gettwoway			///
			getallowed(CIOPts plot addplot)
		local myopts `"`s(graphopts)'"'
		local twopts `"`s(twowayopts)'"'
		local ciopts `"`s(ciopts)'"'
		local plot `"`s(plot)'"'
		local addplot `"`s(addplot)'"'
		_check4gropts ciopts, opt(`ciopts')
		if `"`overlay'"' == "" & `"`by'"' != "" & `"`plot'"' != "" {
			di as err ///
			"options by() and plot() may not be combined"
			exit 198
		}
		if `"`overlay'"' == "" & `"`by'"' != "" & `"`addplot'"' != "" {
			di as err ///
			"options by() and addplot() may not be combined"
			exit 198
		}		
	}

	CheckSaving `saving'

	local baopts
	local gropts

	tempvar touse
	mark `touse' `if' `in' [`weight'`exp']
	markout `touse' `by', strok
	tokenize `varlist'

	qui count if `touse'
	if r(N)==0 {
		error 2000
	} 

	if `"`hazard'"'=="" & `"`failure'"'=="" { 
		local surviva "survival"
	}

	if `"`graph'"'!="" { 
		local type `hazard' `surviva' `failure'
		if 0`:word count `type''>1 {
			di in red "options `type' cannot be combined"
			exit 198
		}
	}

	if `level'<10 | `level'>99 {
		local level 95
	}

	tempvar Group I0 I1 dI Total tt td dead lost start atrisk fail 
	tempvar F seF loF upF S loS upS H seH loH upH
	tempvar sv1 st ss
	tempvar Imid sellS

	local t `1'
	if `"`2'"'=="" { 
		tempvar d 
		quietly gen byte `d'=1
	}
	else local d `2'

	if `"`exp'"'!="" { 
		tempvar wgt
		gen long `wgt' `exp'
		local wvar `wgt'
	}
	else 	local wgt 1

	preserve

quietly {

	keep if `touse'
	drop if `wgt'<=0
	drop if `t'>=.
	capture assert `t'>=0 
	if _rc { 
		noi di in red "time variable has negative values"
		exit 411
	}
	if `"`tvid'"'!="" { 
		sort `tvid' `t' `d'
		by `tvid': keep if _n==_N
	}
	count if `d'>=.
	if r(N) { 
		noisily di in blu /*
			*/ `"(warning:  `d' has missing values; "' /* 
			*/ r(N) " obs not used)" 
		drop if `d'>=.
	}

	local g `by'
	if `"`g'"'=="" {
		gen `Group' = 1
		local g `"`Group'"'
        }
	else {
		capture drop if `g'>=.
		local byopt by(`g')
	}

	if _N==0 {
		error 2000
	}
	keep `t' `d' `g' `wvar'


	/*
		Process intervals or set default intervals
	*/

	if `"`interva'"'=="" {
		local interva 1
	} 
	noisily _crcltab `t' `I0' `I1' `"`interva'"'

	sort `g' `I0' `t'

/*-------------------- CALCULATE STATISTICS -------------------------*/
	by `g': 	gen `Total'= sum(`wgt')
	by `g':		replace `Total'=`Total'[_N]
	by `g': 	gen `tt'   = sum(`wgt'*`t')
	by `g': 	gen `td'   = sum(`wgt'*(`d'!=0))
	by `g' `I0':	gen `dead' = sum(`wgt'*(`d'!=0))
	by `g' `I0':	gen `lost' = sum(`wgt')
	by `g' `I0':	keep if _n==_N

	local gtot=_N

	gen `start'  = `Total'
	drop `Total'
	by `g': replace `start'  = `start'[_n-1]-`lost'[_n-1] if _n>1
	if `"`adjust'"'=="" {
		gen double `atrisk' = `start'-(`lost'-`dead')/2
	}
	else	gen double `atrisk' = `start'
	gen double `fail' = `dead'/`atrisk'

				/* Hazard calculation		*/
	gen `dI'  = `I1'-`I0'
	if `"`adjust'"'=="" {
		gen `H'   = 2*`fail'/((2-`fail')*`dI')
		gen `seH' = `H'*sqrt((1-(`dI'*`H'/2)^2) /*
		*/	     / (`atrisk'*`fail'))
	}
	else {
		gen `H' = `fail'/`dI'
		gen `seH' = `H'/sqrt(`dead')
	}

				/* Fail calculation		*/
	gen double `S'=.
	by `g': replace `S'=cond(_n==1,1,`S'[_n-1])*(1-`fail')
	gen `F' = 1-`S'
	by `g': gen `sv1' = sum(`fail'/(`atrisk'-`dead'))
	by `g': gen `seF' = `S'*sqrt(`sv1') if `S'!=0

	by `g': gen `sellS'= /*
		*/ sqrt(sum(`dead'/(`atrisk'*(`atrisk'-`dead'))) / /*
		*/ (sum(ln((`atrisk'-`dead')/`atrisk'))^2))

	local iz=invnorm(1-(1-`level'/100)/2)
	gen `upS' = `S'^exp(-`iz'*`sellS') if `S'!=0
	gen `loS' = `S'^exp(`iz'*`sellS') if `S'!=0
	*gen `upS' = max(min(`S'+`iz'*`seF',1),0)
	*gen `loS' = max(min(`S'-`iz'*`seF',1),0)

	gen `upF' = 1-`loS'
	gen `loF' = 1-`upS'
	* gen `upF' = max(min(`F'+`iz'*`seF',1),0)
	* gen `loF' = max(min(`F'-`iz'*`seF',1),0)
	if `"`adjust'"'=="" {
		gen `upH' = `H'+`iz'*`seH'
		gen `loH' = `H'-`iz'*`seH'
	}
	else {
		gen `upH' = (`H'/`dead')*invgammap(`dead',(1+`level'/100)/2)
		gen `loH' = (`H'/`dead')*invgammap(`dead',(1-`level'/100)/2)
	}
	replace `upH'=0 if `upH'<0
	replace `loH'=0 if `loH'<0


/*------------------------- GRAPH -----------------------------------*/
	if `"`graph'"'!="" {

		local tlbl : var label `t'
		if `"`tlbl'"'=="" {
			local tlbl `"`t'"'
		}
		label var `I1' `"`tlbl'"'

		if `"`failure'"'!="" { 
			local yttl "Proportion Failed"
			label var `F' "`yttl'"
			local y `F'
			local x `I1'
			if `"`conf'"'=="" {
				label var `upF' "`level'% CI"
				label var `loF' "`level'% CI"
				local cigraph			///
				(rspike `upF' `loF' `x',	///
					sort			///
					pstyle(ci)		///
					`ciopts'		///
				)				///
				// blank
			}
		}
		else if `"`surviva'"'!="" {
			local yttl "Proportion Surviving"
			label var `S' "`yttl'"
			local y `S'
			local x `I1'
			if `"`conf'"'=="" {
				label var `upS' "`level'% CI"
				label var `loS' "`level'% CI"
				local cigraph			///
				(rspike `upS' `loS' `x',	///
					sort			///
					pstyle(ci)		///
					`ciopts'		///
				)				///
				// blank
			}
		}
		else {                      // dead code
			local yttl "Hazard"
			label var `H' "`yttl'"
			gen `Imid'=(`I0'+`I1')/2
			label var `Imid' `"`tlbl'"'
			local y `H'
			local x `Imid'
			if `"`conf'"'=="" {
				label var `upH' "`level'% CI"
				label var `loH' "`level'% CI"
				local cigraph			///
				(rspike `upH' `loH' `x',	///
					sort			///
					pstyle(ci)		///
					`ciopts'		///
				)				///
				// blank
			}
		}

		if `"`plot'`addplot'"' == "" {
			local legend legend(nodraw)
		}
		else {
			local 0 , `twopts'
			syntax [, noDRAW * ]
			local twopts `"`options'"'
			local draw nodraw
		}

		if "`overlay'" == "" {
			version 8: graph twoway			///
			`cigraph'				///
			(connected `y' `x',			///
				sort				///
				ytitle(`"`yttl'"')		///
				pstyle(p1)			///
				`legend'			///
				`draw'				///
				`myopts'			///
			)					///
			,					///
			`twopts'				///
			`byopt'					///
			// blank
		}
		else {
			tempvar byid bysize
			sort `by'
			by `by' : gen `byid' = _n==1
			by `by' : gen long `bysize' = _N
			quietly replace `byid' = sum(`byid')
			local nby = `byid'[_N]
			local j = 1
			forval i = 1/`nby' {
				if substr("`:type `by''",1,3) == "str" {
					local yvl : display `by'[`j']
				}
				else {
					local yvl : label (`by') `=`by'[`j']'
					capture confirm number `yvl'
					if !c(rc) {
						local yvl `"`by' = `yvl'"'
					}
				}

⌨️ 快捷键说明

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