BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
jawla
Fluorite | Level 6

I have a dataset I'm doing survival analysis on using the COX PH model. I wanted to ask if there's a SAS code for generating the no. of tied events in a model, just like in the example blow in Red. I have searched extensively but haven't found anyway of generating using SAS code.

 

                                                                         Percent

              Stratum              RX       Total  Failed    Censored    Censored

                    1               0          21       9          12       57.14

                    2               1          21      21           0        0.00

              -------------------------------------------------------------------

                Total                          42      30          12       28.57

Tied events: For Rx=0, 3 patients

             For Rx=1, 16

Tied events for both Rx groups combined: 23

1 ACCEPTED SOLUTION

Accepted Solutions
FreelanceReinh
Jade | Level 19

Hello @jawla and welcome to the SAS Support Communities!

 

Please try this and check if it meets your expectations:

/* Create test data */

data have;
input Rx time censored;
cards;
0 2 0 
0 4 0
0 4 0
0 7 0
0 7 0
0 7 0
0 8 0
0 8 1
0 8 1
0 9 1
1 1 0
1 1 0
1 2 0
1 3 0
1 6 0
1 7 0
1 8 1
1 8 1
;

/* Define format for Rx groups */

proc format;
value rxf
.c = 'combined';
run;

/* Count tied events */

proc sql;
create table want as
select Rx format=rxf., sum(d) as ties label='Tied events' from
  (select Rx, time, count(time) as d from have
   where censored=0
   group by Rx, time
   having d>1)
group by Rx
union
select .c as Rx, sum(d) as ties from
  (select time, count(time) as d from have
   where censored=0
   group by time
   having d>1)
order by missing(Rx), Rx;
quit;

proc print data=want noobs label;
run;

Result:

             Tied
   Rx       events

       0       5
       1       2
combined      10

It is assumed that dataset HAVE has one observation per patient.

View solution in original post

1 REPLY 1
FreelanceReinh
Jade | Level 19

Hello @jawla and welcome to the SAS Support Communities!

 

Please try this and check if it meets your expectations:

/* Create test data */

data have;
input Rx time censored;
cards;
0 2 0 
0 4 0
0 4 0
0 7 0
0 7 0
0 7 0
0 8 0
0 8 1
0 8 1
0 9 1
1 1 0
1 1 0
1 2 0
1 3 0
1 6 0
1 7 0
1 8 1
1 8 1
;

/* Define format for Rx groups */

proc format;
value rxf
.c = 'combined';
run;

/* Count tied events */

proc sql;
create table want as
select Rx format=rxf., sum(d) as ties label='Tied events' from
  (select Rx, time, count(time) as d from have
   where censored=0
   group by Rx, time
   having d>1)
group by Rx
union
select .c as Rx, sum(d) as ties from
  (select time, count(time) as d from have
   where censored=0
   group by time
   having d>1)
order by missing(Rx), Rx;
quit;

proc print data=want noobs label;
run;

Result:

             Tied
   Rx       events

       0       5
       1       2
combined      10

It is assumed that dataset HAVE has one observation per patient.

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 16. Read more here about why you should contribute and what is in it for you!

Submit your idea!

What is ANOVA?

ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 1 reply
  • 380 views
  • 0 likes
  • 2 in conversation