📄 zts_5.ado
字号:
di in red /*
*/ "use " _quote "egen ... = group(`strata')" _quote /*
*/ " to make a single variable"
exit 198
}
}
if "`enter'"!="" & "`atrisk'"!="" {
di in red /*
*/ "atrisk and enter not possible at the same time"
exit 198
}
if "`adjustf'"!="" {
if "`gwood'"!="" {
di in red "gwood not possible with adjustfor()"
exit 198
}
if "`lost'"!="" | "`enter'"!="" | "`atrisk'"!="" {
di in red /*
*/ "atrisk, lost and enter not possible with adjustfor()"
exit 198
}
}
zt_sho_5 `show'
tempvar touse mark n d cens ent s lb ub
zt_smp_5 `touse' "`if'" "`in'" "`sb'" "`adjustf'"
preserve
quietly {
keep if `touse'
if "`adjustf'"=="" {
zt_ct_5 "`by'" -> `t' `n' `d' `cens' `ent'
if "`enter'"=="" & "`atrisk'"=="" {
replace `cens' = `cens' - `ent' if `t'
drop if `d'==0 & `cens'==0
replace `ent' = 0
}
if "`atrisk'"!="" {
replace `ent' = `n'[_n+1] if `d'
if "`lost'"=="" { replace `cens'=0 }
}
AddSurv "`by'" `t' `n' `d' `level' -> /*
*/ "" `s' "" "" `lb' `ub'
}
else {
DoAdjust "`by'" "`strata'" "`adjustf'" "" "" -> "" `s'
KeepDead "`sb'"
}
if "`failure'" != "" {
replace `s'=1-`s'
if "`adjustf'" == "" {
replace `lb'=1-`lb'
replace `ub'=1-`ub'
local hold "`lb'"
local lb "`ub'"
local ub "`hold'"
}
}
}
if `tmin' != -1 {
qui drop if `t'<`tmin'
}
if `tmax' != -1 {
qui drop if `t'>`tmax'
}
qui count
if _result(1)<1 {
di in red "no observations"
exit 2000
}
quietly {
if "`lost'"=="" & "`atrisk'"=="" {
if "`adjustf'"=="" {
/*
drop if `d'==0
*/
drop `d'
}
}
else {
summ `s'
local eps = max( (_result(6)-_result(5))/50, 0)
local nps = max( (_result(6)-_result(5))/25, 0)
tempvar dj tnext s2 s3 newt
sort `sb' `t' `d'
if "`sb'"!="" {
local byst "by `sb':"
}
`byst' replace `d'=1 if `d'==0 & (_n==1 | _n==_N)
`byst' gen long `dj' = _n if `d'
/* above is new */
`byst' replace `dj'=`dj'[_n-1] if `dj'>=.
sort `sb' `dj' `d'
by `sb' `dj': replace `cens'=sum(`cens')
by `sb' `dj': replace `ent' =sum(`ent')
by `sb' `dj': keep if _n==_N
drop `dj'
sort `sb' `t'
`byst' gen `tnext'=`t'[_n+1]
`byst' replace `tnext'=`t' if _n==_N
expand 3
sort `sb' `t'
by `sb' `t': gen `newt' = cond(_n==1, `t', /*
*/ (`t'+`tnext')/2)
drop `tnext'
by `sb' `t': gen `s2' = `s'+`eps' if _n==2
by `sb' `t': gen `s3' = `s'-`nps' if _n==3
by `sb' `t': replace `s'=. if _n>1
by `sb' `t': replace `cens' = 0 /*
*/ if _n==1 | _n==3
by `sb' `t': replace `ent' = 0 /*
*/ if _n==1 | _n==2
by `sb' `t': keep if _n==1 | /*
*/ (_n==2 & `cens') | (_n==3 & `ent')
label var `s2' " "
label var `s3' " "
local mvars "`s2' `s3'"
local msym "[`cens'][`ent']"
local mcon ".."
local mpen "11"
local lbl : var label `t'
drop `t'
rename `newt' `t'
label var `t' "`lbl'"
local lbl
sort `sb' `t'
}
}
if "`sb'"=="" | "`gwood'"!="" {
local separat "separate"
}
if "`separat'"=="separate" {
local svars "`s'"
local ssym "i"
local scon "J"
local spen "2"
if "`sb'"!="" {
local byopt "by(`sb')"
}
if "`gwood'" != "" {
local svars "`svars' `lb' `ub'"
local ssym "`ssym'ii"
local scon "`scon'JJ"
local spen "`spen'11"
}
}
else {
quietly {
tempvar grp
by `sb': gen int `grp' = 1 if _n==1
replace `grp' = sum(`grp')
local ng = `grp'[_N]
local i 1
local pen 1
while `i' <= `ng' {
tempvar x
gen float `x'=`s' if `grp'==`i'
local svars "`svars' `x'"
local ssym "`ssym'i"
local scon "`scon'J"
local pen=cond(`pen'<=8,`pen'+1,2)
local spen "`spen'`pen'"
local i = `i' + 1
}
}
if "`label'"=="" {
tempvar smark sttl
qui MarkPt `t' "`sb'" `s' -> `sttl' `smark'
local pen 1
local i 1
while `i' <= `ng' {
tempvar x
qui gen float `x'=`smark' if `grp'==`i'
local pen=cond(`pen'<=8,`pen'+1,2)
local svars "`svars' `x'"
local ssym "`ssym'[`sttl']"
local scon "`scon'."
local spen "`spen'`pen'"
local i = `i' + 1
}
drop `smark'
}
}
if "`ylabel'"=="" {
if "`yasis'"=="" {
if "`ylog'"!="" {
local ylabel "ylabel(.01,.05,.10,.25,.50,.75,1)"
}
else {
local ylabel "ylabel(0,.25,.50,.75,1)"
}
local fvar : word 1 of `svars'
format `fvar' %9.2f
}
else {
qui summ `s'
if "`ylog'"!="" {
local min = cond(_result(5)==0,.001,_result(5))
}
else {
local min=_result(5)
}
local max=cond("`origin'"=="",1,_result(6))
local ylabel "ylabel(`min',`max')"
}
}
else local ylabel "ylabel(`ylabel')"
if "`xlabel'"=="" {
if "`xasis'"=="" {
local xlabel "xlabel"
}
}
else local xlabel "xlabel(`xlabel')"
if "`border'"=="" { local border "border" }
else local border
if "`t1title'"=="" {
if "`fail'"=="" {
if "`adjustf'"!="" {
local t1title "Survivor function"
}
else local t1title "Kaplan-Meier survival estimate"
}
else {
if "`adjustf'"!="" {
local t1title "Failure function"
}
else local t1title "Kaplan-Meier failure estimate"
}
if "`sb'"!="" {
local t1title "`t1title's, by `sb'"
}
local t1title "t1(`t1title')"
}
else {
if "`t1title'"=="." {
local t1title
}
else local t1title "t1(`t1title')"
}
if "`t2title'"=="" {
if "`adjustf'"!="" {
if length("`adjustf'")>50 {
local adjustf = substr("`adjustf'",1,47)
local adjustf "`adjustf'..."
}
local t2title "t2(adjusted for `adjustf')"
}
else if "`gwood'"!="" {
local t2title "t2(`level'%, pointwise confidence band shown)"
}
}
else {
if "`t2title'"=="." {
local t2title
}
else local t2title "t2(`t2title')"
}
if "`ylog'" != "" {
local varcnt: word count `svars'
local i 1
while `i' <= `varcnt' {
local varn: word `i' of `svars'
qui replace `varn'=.001 if `varn'==0
local i=`i'+1
}
}
/*** new by mac *****/
if "`origin'"=="" {
tempvar last flg
local N = _N
if "`by'"=="" & "`strata'"=="" {
qui gen `last'=2 if _n==_N
qui expand `last'
qui gen `flg'=1 if _n>`N'
qui replace `t'=0 if `flg'==1
if "`failure'" == "" {
qui replace `s'=1 if `flg'==1
}
else qui replace `s'=0 if `flg'==1
}
else {
sort `by' `strata'
qui by `by' `strata': gen `last'=2 if _n==_N
qui expand `last'
qui gen `flg'=1 if _n>`N'
qui replace `t'=0 if `flg'==1
local varcnt: word count `svars'
local i 1
while `i' <= `varcnt' {
local varn: word `i' of `svars'
if "`failure'" == "" {
qui replace `varn'=1 if `t'==0
}
else qui replace `varn'=0 if `t'==0
if substr("`ssym'",-1,1)!="i" & /*
*/ `i'> (`varcnt'/2 ) {
qui replace `varn'=. if `t'==0
}
local i=`i'+1
}
}
if "`gwood'"!="" {
replace `lb'=. if `flg'==1
replace `ub'=. if `flg'==1
}
if "`byopt'"!="" {
sort `sb'
}
if "`lost'" !="" | "`enter'" !="" {
qui replace `cens'=. if `flg'==1
}
}
gr7 `svars' `mvars' `t', c(`scon'`mcon') s(`ssym'`msym') /*
*/ pen(`spen'`mpen') `byopt' `ylabel' `xlabel' `border' /*
*/ `t1title' `t2title' trim(`trim') `ylog' `options' sort
end
program define DoAdjust /* by strata adjustf if in -> haz s */
local by "`1'" /* optional */
local strata "`2'" /* optional */
local adjustf "`3'" /* required */
local if "`4'" /* optional */
local in "`5'" /* optional */
/* */
local haz "`7'" /* optional */
local s "`8'" /* optional */
if "`strata'"!="" {
local stopt "strata(`strata')"
}
if "`by'"=="" {
if "`s'" != "" {
local sopt "bases(`s')"
}
if "`haz'" != "" {
local hopt "baseh(`haz')"
}
stcox `adjustf' `if' `in', /*
*/ `stopt' `sopt' `hopt' estimate norobust
exit
}
if "`haz'" != "" {
tempvar hi
local hopt "baseh(`hi')"
gen double `haz' = .
}
if "`s'" != "" {
tempvar si
local sopt "bases(`si')"
gen double `s' = .
}
if !("`if'"=="" & "`in'"=="") {
tempvar touse
mark `touse' `if' `in'
local cond "if `touse'"
local andcond "& `touse'"
}
tempvar grp
sort `touse' `by'
by `touse' `by': gen int `grp' = 1 if _n==1 `andcond'
replace `grp'=sum(`grp') `cond'
local ng = `grp'[_N]
local i 1
while `i' <= `ng' {
capture stcox `adjustf' if `grp'==`i', /*
*/ `stopt' `sopt' `hopt' estimate norobust
if _rc==0 {
if "`hopt'"!="" {
replace `haz' = `hi' if `grp'==`i'
drop `hi'
}
if "`sopt'"!="" {
replace `s' = `si' if `grp'==`i'
drop `si'
}
}
local i = `i' + 1
}
end
program define KeepDead /* strata */
local strata "`1'"
local t : char _dta[st_t]
local d : char _dta[st_d]
if "`d'"!="" {
/* keep if `d' */
drop `d'
}
sort `strata' `t'
by `strata' `t': keep if _n==1
end
program define MarkPt /* t strata s -> ttl s2 */
local t "`1'"
local strata "`2'"
local s "`3'"
local ttl "`5'"
local s2 "`6'"
tempvar tval mark marksum ls
summarize `t'
gen float `tval' = _result(5) + (_result(6)-_result(5))*2/3
gen byte `mark' = cond(`t'<`tval', 1, 0)
by `strata': replace `mark'=0 if `mark'[_n+1]==1
by `strata': gen byte `marksum' = sum(`mark')
by `strata': replace `mark'=1 if _n==_N & `marksum'==0
drop `tval' `marksum'
summarize `s'
local eps = max( (_result(6)-_result(5))/20,0)
gen float `ls' = `s'
by `strata': replace `ls' = `ls'[_n-1] if `ls'>=.
gen float `s2' = `ls'+`eps' if `mark'
replace `s2' = `ls'[_n-1]+`eps' if `mark' & `strata'==`strata'[_n-1]
summarize `s2'
replace `s2' = max(`s2'-8*`eps',0) if `s2'==_result(5)
replace `s2' = `s2'+`eps' if `s2'==_result(6)
capture confirm string variable `strata'
if _rc {
gen str20 `ttl' = "`strata' " + trim(string(`strata')) if `mark'
local lab : value label `strata'
if "`lab'" != "" {
tempvar delab
decode `strata', gen(`delab')
replace `ttl' = `delab' if `mark'
}
}
else gen str20 `ttl' = trim(`strata') if `mark'
compress `ttl'
end
program define ByStAdj /* by strata adjustf */
local by "`1'"
local strata "`2'"
local adjustf "`3'"
if "`by'" != "" {
unabbrev `by'
local by "$S_1"
}
if "`strata'"!="" {
if "`adjustf'"=="" {
di in red /*
*/ "strata() requires adjustfor(); perhaps you mean by()"
exit 198
}
unabbrev `strata'
local strata "$S_1"
}
if "`adjustf'" != "" {
unabbrev `adjustf'
local adjustf "$S_1"
}
if !("`by'"=="" & "`strata'"=="") {
if "`by'"!="" & "`strata'"!="" { local sb "`by' `strata'" }
else if "`by'"!="" { local sb "`by'" }
else local sb "`strata'"
}
global S_1 "`by'"
global S_2 "`strata'"
global S_3 "`adjustf'"
global S_4 "`sb'"
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -