📄 sts.ado
字号:
if "`na'"!="" {
local ttl "Nelson-Aalen"
local blnk " "
}
else if "`failure'"!="" {
local ttl "Failure"
local blnk " "
local attl " Adjusted Failure Function"
}
else {
local ttl "Survivor"
local attl "Adjusted Survivor Function"
}
if "`at'"!="" {
Reat _t `at'
if "`s(at)'"!="" {
local at "`s(at)'"
}
if "`adjustf'"=="" {
Listat "`sb'" "`grp'" _t `n' _d `cens' `ent' /*
*/ `s' `se' `lb' `ub' "`at'" `"`=strsubdp("`level'")'"' /*
*/ "`ttl'"
}
else Listata "`sb'" "`grp'" _t `s' "`at'" /*
*/ "`ttl'" "`blnk'" "`adjustf'"
exit
}
if "`adjustf'"=="" {
if "`enter'"!="" {
local ettl "Enter"
local liste 1
}
else {
qui drop if _t==0
local ettl " "
local liste 0
local net "Net"
}
local cil `=string(`level')'
local cil `=length("`cil'")'
if `cil' == 2 {
local spaces " "
}
else if `cil' == 4 {
local spaces " "
}
else {
local spaces " "
}
if "`wt'"!="pweight" {
if "`na'"=="" {
di in gr _n _col(12) "Beg." _col(26) "`net'" /*
*/ _col(41) "`ttl'" _col(55) "Std." _n /*
*/ " Time Total Fail Lost `ettl'" /*
*/ _col(41) /*
*/ `"Function Error`spaces'[`=strsubdp("`level'")'% Conf. Int.]"'
local dupcnt 79
}
else {
di in gr _n _col(12) "Beg." _col(26) "`net'" /*
*/ _col(39) "`ttl'" _col(55) "Std." _n /*
*/ " Time Total Fail Lost `ettl'" /*
*/ _col(41) /*
*/ `"Cum. Haz. Error`spaces'[`=strsubdp("`level'")'% Conf. Int.]"'
local dupcnt 79
}
}
else {
di in gr _n _col(12) "Beg." _col(26) "`net'" /*
*/ _col(39) "`ttl'" _n /*
*/ " Time Total Fail Lost `ettl'" /*
*/ _col(41) "Function"
local dupcnt 48
}
}
else {
di in gr _n " Adjusted" /*
*/ _n " Time `blnk'`ttl' Function"
local dupcnt 27
}
di in smcl in gr "{hline `dupcnt'}"
local i 1
while `i' <= _N {
if "`sb'" != "" {
if `grp'[`i'] != `grp'[`i'-1] {
sts_sh `grp' "`grp'[`i']" "`sb'"
di in gr "$S_3"
}
}
if "`adjustf'"=="" {
di in gr %6.0g _t[`i'] " " in ye /*
*/ %8.0g `n'[`i'] " " /*
*/ %6.0g (_d[`i']) " " /*
*/ %6.0g `cens'[`i'] " " _c
if `liste' {
di in ye %6.0g `ent'[`i'] _c
}
else di _skip(6) _c
di in ye " " /*
*/ %11.4f `s'[`i'] " " _c
if "`wt'"!="pweight" {
di in ye /*
*/ %9.4f `se'[`i'] /* standard error */ " " /*
*/ %10.4f `lb'[`i'] /* lower cb */ " " /*
*/ %9.4f `ub'[`i'] /* upper cb */
}
else di
}
else {
di in gr %6.0g _t[`i'] " " in ye /*
*/ %11.4f `s'[`i']
}
local i = `i'+1
}
di in smcl in gr "{hline `dupcnt'}"
if "`adjustf'" != "" {
di in gr "`ttl' function adjusted for `adjustf'"
}
end
program define GetVal /* grpvar g# var maxlen */
args grp g v maxlen
tempvar obs newv
quietly {
gen long `obs' = _n if `grp'==`g'
summ `obs', mean
local j = r(min)
local typ : type `v'
local val = `v'[`j']
global S_2
if substr("`typ'",1,3)!="str" {
local lbl : value label `v'
if "`lbl'" != "" {
local val : label `lbl' `val'
}
else {
global S_2 "`v'="
local val=string(`val')
}
}
global S_1 = substr(trim("`val'"),1,`maxlen')
}
end
program define sts_sh /* grp g# <byvars> */
args grp g by
tokenize "`by'"
global S_3
while "`1'" != "" {
GetVal `grp' `g' `1' 20
global S_3 "$S_3$S_2$S_1 "
* di in gr "$S_2$S_1 " _c
mac shift
}
* di
end
program define Reat /* t <processed at-list> */, sclass
sret clear
if "`2'"!="reat" {
exit
}
quietly {
local t "`1'"
local n = `3'
local n = cond(`n'-2<1, 1, `n'-2)
qui summ _t if _t!=0
local tmin = r(min)
local tmax = r(max)
local dt = (`tmax' -`tmin')/`n'
if `dt'>=1 {
local dt = int(`dt')
}
local v = int(`tmin')
/* s(at) contains nothing right now */
while `v' < `tmax' {
sret local at "`s(at)' `v'"
local v = `v' + `dt'
}
sret local at "`s(at)' `v'"
}
end
program define Procat /* at-list */, sclass
sret clear
local i : word count `0'
if `i'==1 {
capture confirm integer numb `0'
if _rc == 0 {
capture assert `0' >= 1
}
if _rc {
di in red `"at(`0') invalid"'
exit 198
}
sret local at "reat `0'"
}
else sret local at `"`0'"'
end
program define Listata
args by grp t s at ttl blnk adjustf
if "`by'"!="" {
local byp "by `by':"
}
di in gr _n " Adjusted"
di in smcl in gr /*
*/ " Time `blnk'`ttl' Function" _n "{hline 29}"
if "`grp'"=="" {
tempvar grp
qui gen byte `grp' = 1
local ngrp 1
}
else {
qui summ `grp'
local ngrp = r(max)
}
tokenize "`at'"
tempvar obs
local g 1
while `g' <= `ngrp' {
/* set i0, i1: bounds of group */
qui gen long `obs' = _n if `grp'==`g'
qui summ `obs'
local i0 = r(min)
local i1 = r(max)
drop `obs'
if "`by'" != "" {
sts_sh `grp' `g' "`by'"
di in gr "$S_3"
}
local j 1
while "``j''" != "" {
qui gen long `obs' = _n if _t>``j'' in `i0'/`i1'
qui summ `obs'
local i = cond(r(min)>=.,`i1',r(min)-1)
drop `obs'
if `i'<`i0' {
di in gr %8.0g ``j'' " " in ye /*
*/ %11.4f 1
}
else if `i'==`i1' & ``j''>_t[`i1'] {
di in gr %8.0g ``j'' " " in ye /*
*/ %11.4f .
}
else {
di in gr %8.0g ``j'' " " in ye /*
*/ %11.4f `s'[`i']
}
local j=`j'+1
}
local g=`g'+1
}
di in smcl in gr "{hline 29}" _n /*
*/ "`ttl' function adjusted for `adjustf'"
end
program define Listat
args by grp t n d cens ent s se lb ub at level ttl
/* ttl is "Survival" "Failure" "Nelson-Aalen" */
if "`by'"!="" {
local byp "by `by':"
}
quietly {
`byp' replace _d=sum(_d)
`byp' replace `cens'=sum(`cens')
`byp' replace `ent' = sum(`ent')
}
if "`ttl'"=="Nelson-Aalen" {
local pos 39
local func "Cum. Haz."
}
else {
local pos 41
local func "Function "
}
di in smcl in gr _n _col(15) "Beg." /*
*/ _col(`pos') "`ttl'" _col(55) "Std." _n /*
*/ " Time Total Fail" /*
*/ _col(41) `"`func' Error [`=strsubdp("`level'")'% Conf. Int.]"' _n /*
*/ "{hline 79}"
if "`grp'"=="" {
tempvar grp
qui gen byte `grp' = 1
local ngrp 1
}
else {
qui summ `grp'
local ngrp = r(max)
}
tokenize "`at'"
tempvar obs
local g 1
while `g' <= `ngrp' {
/* set i0, i1: bounds of group */
qui gen long `obs' = _n if `grp'==`g'
qui summ `obs'
local i0 = r(min)
local i1 = r(max)
drop `obs'
if "`by'" != "" {
sts_sh `grp' `g' "`by'"
di in gr "$S_3"
}
local lfail 0
local j 1
while "``j''" != "" {
qui gen long `obs' = _n if _t>``j'' in `i0'/`i1'
qui summ `obs'
local i = cond(r(min)>=.,`i1',r(min)-1)
drop `obs'
if `i'<`i0' {
di in gr %8.0g ``j'' " " in ye /*
*/ /*
*/ %8.0g 0 " " /*
*/ %8.0g 0 " " /*
*/ _skip(8) /*
*/ %11.4f 1 " " /*
*/ %9.4f . " " /*
*/ %10.4f . " " /*
*/ %9.4f .
}
else if `i'==`i1' & ``j''>_t[`i1'] {
local ifail = _d[`i'] - `lfail'
local lfail = _d[`i']
di in gr %8.0g ``j'' " " in ye /*
*/ /*
*/ %8.0g `n'[`i'] " " /*
*/ %8.0g `ifail' " " /*
*/ _skip(8) /*
*/ %11.4f . " " /*
*/ %9.4f . " " /*
*/ %10.4f . " " /*
*/ %9.4f .
}
else {
local ifail = _d[`i'] - `lfail'
local lfail = _d[`i']
di in gr %8.0g ``j'' " " in ye /*
*/ /*
*/ %8.0g `n'[`i'] " " /*
*/ %8.0g `ifail' " " /*
*/ _skip(8) /*
*/ %11.4f `s'[`i'] " " /*
*/ %9.4f `se'[`i'] " " /*
*/ %10.4f `lb'[`i'] " " /*
*/ %9.4f `ub'[`i']
}
local j=`j'+1
}
local g=`g'+1
}
di in smcl in gr "{hline 79}"
#delimit ;
di in gr
"Note: `ttl' function is calculated over full data and evaluated at" _n
" indicated times; it is not calculated from aggregates shown at left.";
#delimit cr
end
program define Licomp
args mark by grp t s at failure adjustf
/* failure contains "failure", "aalen" or "" */
qui summ `grp'
local ngrp = r(max)
local ng 1
while `ng' <= `ngrp' {
local nglast=min(`ng'+5,`ngrp')
Licompu "`mark'" "`by'" "`grp'" _t `s' "`at'" `ng' `nglast' /*
*/ "`failure'" "`adjustf'"
local ng=`ng'+6
}
if "`adjustf'"!="" {
if "`failure'"=="" {
local ttl "Survivor"
}
else local ttl "Failure"
di in gr "`ttl' function adjusted for `adjustf'"
}
end
program define Licompu
args IGNORE by grp t s at g0 g1 failure adjustf
/* failure contains "failure", "aalen" or "" */
di
if "`failure'"=="" {
local ttl "Survivor"
}
else if "`failure'"=="aalen" {
local ttl "Nelson-Aalen"
}
else local ttl "Failure"
if "`adjustf'" != "" {
local ttl `"Adjusted `ttl'"'
}
if "`failure'"=="aalen" {
local ttl `"`ttl' Cum. Haz."'
}
else local ttl `"`ttl' Function"'
local tl = length(`"`ttl'"')
local wid = (`g1'-`g0'+1)*11-5
local ldash = int((`wid' - `tl')/2)
local rdash = `wid' - `tl' - `ldash'
if `ldash'>0 & `rdash'>0 {
di in smcl in gr /*
*/ _col(18) "{hline `ldash'}`ttl'{hline `rdash'}"
}
else {
local skip = max(17 + `wid' - `tl', 0)
di in gr _skip(`skip') "`ttl'"
}
tokenize `"`by'"'
while "`1'" != "" {
di in gr "`1'" _col(13) _c
local g `g0'
while `g' <= `g1' {
GetVal `grp' `g' `1' 9
local skip = 11 - length("$S_1")
di in gr _skip(`skip') "$S_1" _c
* di in gr "12" %9.0g 1 _c
local g = `g'+1
}
di
mac shift
}
local ndash = 12+(`g1'-`g0'+1)*11
di in smcl in gr "{hline `ndash'}"
tempvar obs
tokenize `"`at'"'
local j 1
local thead "time"
while "``j''" != "" {
di in gr "`thead'" %8.0g ``j'' _c
local thead " "
local g `g0'
while `g'<=`g1' {
qui gen long `obs' = _n if `grp'==`g'
qui summ `obs'
local i0 = r(min)
local i1 = r(max)
drop `obs'
qui gen long `obs' = _n if _t>``j'' in `i0'/`i1'
qui summ `obs'
local i = cond(r(min)>=.,`i1',r(min)-1)
drop `obs'
if `i'<`i0' {
local res 1
}
else if `i'==`i1' & _t[`i']!=``j'' {
local res .
}
else local res = `s'[`i']
di in ye %11.4f `res' _c
local g=`g'+1
}
di
local j=`j'+1
}
di in smcl in gr "{hline `ndash'}"
end
program define ChkYScale4Log, sclass
syntax [, YLOg LOG * ]
sreturn clear
if "`ylog'`log'" != "" {
sreturn local log log
}
sreturn local options `"`s(log)' `options'"'
end
program define Graph
syntax [if] [in] [, ///
ADjustfor(varlist) ///
NA ///
CENsored(string) ///
CNA ///
Hazard ///
Enter ///
Failure ///
Gwood ///
Level(integer $S_level) ///
LOST ///
noORIgin ///
SEParate ///
noSHow ///
STrata(varlist) ///
TMIn(real -1) ///
TMAx(real -1) ///
TRim(integer 32) ///
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -