# st: Solved: stcox and tvc. Translation of SAS program

 From "Claus Dethlefsen / Aalborg Sygehus" To Subject st: Solved: stcox and tvc. Translation of SAS program Date Tue, 14 Jun 2005 18:42:40 +0200

```Dear list

Thanks to Benoît Laplante, I was pointed towards the manual on "stsplit" and I am now able to reproduce the output from SAS in my Stata program. In case others are interested, here is my solution

/* Attempt 4 */

gen id=_n
stset year, failure(hd==1) id(id)
stsplit time, at(1,2)
gen i1=0
replace i1=1 if (time==0&case==0)
gen i2=0
replace i2=1 if (time==1&case==0)
gen i3=0
replace i3=1 if (time==2&case==0)

stcox i1 i2 i3 age1 age2 gender c1 c2

I am quite sure, that this could be done more elegantly, but I'm still learning.

Best,
Claus

________________________________
Claus Dethlefsen, Msc, PhD

Klinisk Epidemiologisk Afdeling
Aalborg Sygehus Nord
9000 Aalborg

Tlf:   9932 1086
9932 1094 (direkte)
Fax:   9932 1088
email: aas.claus.dethlefsen@nja.dk <mailto:aas.claus.dethlefsen@nja.dk>

________________________________

Fra: owner-statalist@hsphsun2.harvard.edu på vegne af Claus Dethlefsen / Aalborg Sygehus
Sendt: ma 13-06-2005 13:50
Til: statalist@hsphsun2.harvard.edu
Emne: st: stcox and tvc. Translation of SAS program

Dear list

I have difficulties translating a SAS program into Stata. I am fairly
new to Stata, and also to survival analysis, but hope that I can get
some help from the list.

The situation from survival analysis. Events are registred in the
binary variable hd, and time-to-event in the continuous variable
year. The variables age1, age2, gender, c1 and c2 are binary
variables. The variable case is also binary.

This is the SAS program:

proc phreg data = test2;
model year*hd(0) = i1 i2 i3 age1 age2 gender c1 c2/risklimits ;
if year<1 and case=0 then i1=1;else i1=0;
if 1<=year<=2 and case=0 then i2=1;else i2=0;
if year>2 and case=0 then i3=1;else i3=0;
ods output parameterestimates = oddsm;
run;

As I interpret this, the baseline hazard rates are different in the
three intervals defined by i1 i2 and i3, adjusted for the remaining
covariates.

These are my Stata attempts:

/* Common to the code below */
gen i1=0
replace i1=1 if (year<1&case==0)
gen i2=0
replace i2=1 if (year>=1&year<=2&case==0)
gen i3=0
replace i3=1 if (year>2&case==0)

/* Attempt 1 */
stset year, failure(hd==1)  /* note that SAS has the opposite hd==0 */
stcox  i1 i2 i3 age1 age2 gender c1 c2

This does not work, since the SAS code implies different baseline
hazards in the three periods defined by inter1-3.

/* Attempt 2 */
stset year, failure(hd==1)
stcox  i1 i2 i3 age1 age2 gender c1 c2, tvc(i1 i2 i3)

or

stcox  age1 age2 gender c1 c2, tvc(i1 i2 i3)

I am not certain whether my use of tvc() is correct (and equivalent to
the SAS approach). At least, the estimates are very different.

/* Attempt 3 */

gen id=_n
stset year, failure(hd==1) id(id)
stcox i1 i2 i3 age1 age2 gender c1 c2

or

stcox i1 i2 i3 age1 age2 gender c1 c2, tvc(i1 i2 i3)

None of the attempts produce estimates anywhere near the output from
SAS. I am probably missing some options or have misunderstood their
use. I would appreciate help to get on.

I am using the latest Stata 9, updated to the most recent version.

Best,
Claus
_______________________________

Claus Dethlefsen, Msc, PhD
Klinisk Epidemiologisk Afdeling

Aalborg Sygehus Nord
9000 Aalborg

Tlf:   9932 1086
9932 1094 (direkte)
Fax:   9932 1088
email: aas.claus.dethlefsen@nja.dk

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

```

<<winmail.dat>>