*! PERSON-YEAR / GROUP FAILURE CALCULATOR *! Joseph Hilbe, STB 1/22/92 * * pyears , i() g() s() * **** variables in SAS years only **** program define pyears version 3.0 local varlist "req ex min(3)" local options "`options' Interval(integer 5) Group(integer 4) Start(integer 30) List Dead" parse "`*'" parse "`varlist'", parse(" ") qui { cap drop grp* cap drop ingrp* cap drop pyr* cap drop num* tempvar sasdob bsas esas gen `sasdob'=`1' gen `bsas' =`2' gen `esas' =`3' local inter=`interval' local group=`group' local start=`start' local restart=`start' tempvar todrop egen int `todrop'=rmiss(`varlist') drop if `todrop' drop `todrop' replace `bsas' = `sasdob'+(365.25 * `start') if `bsas'< (`sasdob'+(365.25*`start')) #delimit ; replace `esas' = (`sasdob'+(365.25*`start'+(`inter'*`group'*365.25))) if `esas' > (`sasdob'+(365.25*`start'+(`inter'*`group'*365.25))); #delimit cr local i=1 while `i'<=`group' { gen grp`i'b=`sasdob'+(365.25*`start') gen grp`i'e=`sasdob'+(365.25*(`start'+`inter'))-1 gen num`i'=1 if `esas' >= grp`i'b & `esas'<= grp`i'e gen numa`i'=1 if `bsas'>= grp`i'b & `bsas'<= grp`i'e local i=`i'+1 local start=`start'+`inter' } gen ingrp1=(`esas'-`bsas')*.00273785 if `bsas'grp1e local i=2 local j=1 while `i'< `group' { #delimit ; gen ingrp`i'=(365.25*5)*.00273785 if ingrp`j'~=. & `esas'>grp`j'e & `bsas'>grp1b & `bsas'grp`i'b replace ingrp`i'=(`esas'-`bsas')*.00273785 if `bsas'>grp`i'b & `esas'<=grp`i'e local i=`i'+1 local j=`j'+1 } local i=`group' #delimit ; gen ingrp`i'=(`esas'-grp`i'b)*.00273785 if `bsas'grp`i'b local i=1 while `i'<=`group' { egen pyr`i'=sum(ingrp`i') egen numd`i'=sum(num`i') if `4'==1 egen nums`i'=sum(num`i') egen numb`i'=sum(numa`i') local i=`i'+1 } } if "`list'"!="" { di _n(1) di in gr " Listing of Casewise Person-years" di " --------------------------------" l ingrp* } if "`dead'"=="" { di _n(2) di in gr " Person-years Totals per Age Division" di " ------------------------------------" local i=1 local range=`inter'-1 local rnge =`restart'+`range' while `i'<=`group' { di in gr " Grp `restart' - `rnge' => " in ye %12.4f pyr`i' local i=`i'+1 local restart=`restart'+`inter' local rnge = `restart'+`range' } } if "`dead'"!="" { di _n(2) di in gr " Person-years: Totals Enter End Failures " di " -------------------------------------------------------------" local i=1 local range=`inter'-1 local rnge =`restart'+`range' while `i'<=`group' { #delimit ; di in gr " Grp `restart' - `rnge' => " in ye _col(20) %12.4f pyr`i' _col(41) numb`i' _col(50) nums`i' _col(59) numd`i'; #delimit cr local i=`i'+1 local restart=`restart'+`inter' local rnge = `restart'+`range' } } cap drop grp* cap drop ingrp* cap drop pyr* cap drop num* end