*! version 1.0.0 11 apr 1997 STB-37 ssa9 program define st_rpool version 5.0 st_is local d : char _dta[st_d] if "`d'"=="" { di in red "st_rpool requires a failure variable be stset" exit 198 } local varlist "req new max(1)" local if "opt" local in "opt" local options "noPreserve Strata(string)" parse "`*'" drop `varlist' if "`strata'"!="" { unabbrev `strata' local strata "$S_1" } if "`preserv'" == "" { preserve local Done "restore, not" } quietly { if "`if'"!="" | "`in'"!="" { keep `if' `in' } if "`strata'"=="" { Expand `varlist' } else Expands `varlist' `strata' stset, clear mac drop S_FN S_FNDATE } `Done' end program define Expand /* newvar */ local event "`1'" local d : char _dta[st_d] local t : char _dta[st_t] local t0 : char _dta[st_t0] if "`t0'"=="" { local t0 0 } sort `t' `d' by `t': gen `event' = cond(_n==_N & `d'!=0,-1,.) sort `event' `t' count if `event' == -1 local nevent = _result(1) local nobs = _N local ev 1 while `ev' <= `nevent' { local nobs1 = _N + 1 expand 2 if `t0'<`t'[`ev'] & `t'>=`t'[`ev'] in 1/`nobs' replace `event' = `ev' in `nobs1'/l replace `d' = 0 if `t'>`t'[`ev'] in `nobs1'/l local ev = `ev' + 1 } drop if `event'==-1 | `event'==. end program define Expands /* newvar stratavars */ local event "`1'" local d : char _dta[st_d] local t : char _dta[st_t] local t0 : char _dta[st_t0] if "`t0'"=="" { local t0 0 } mac shift local by "`*'" local n : word count `by' if `n'>1 { tempvar s quietly { egen `s' = group(`by'), missing compress `s' } local by "`s'" } sort `by' `t' `d' by `by' `t': gen `event' = cond(_n==_N & `d'!=0,-1,.) sort `event' `by' `t' count if `event' == -1 local nevent = _result(1) local nobs = _N local ev 1 while `ev' <= `nevent' { local nobs1 = _N + 1 expand 2 if `t0'<`t'[`ev'] & `t'>=`t'[`ev'] & /* */ `by'==`by'[`ev'] in 1/`nobs' replace `event' = `ev' in `nobs1'/l replace `d' = 0 if `t'>`t'[`ev'] in `nobs1'/l local ev = `ev' + 1 } drop if `event'==-1 | `event'==. end