data kaplan;
input time survival1;
cards;
4 .6
5 .55
6 .3
7 .1
9 0
;
run;
proc iml;
use kaplan;
read all var{TIME SURVIVAL1} into DM;
close;
SURVIVAL1 = DM[,2]; TIME = DM[,1];
n = nrow(DM);
segment = J(nrow(DM),1,1); *print segment;
SS=J(nrow(survival1),1,1);
do i = 1 to n ;
if 1=n then SS=0;
else if i< n-1 then SS=SURVIVAL1-SURVIVAL1[i+1];
end;
TT=J(nrow(time),1,1);
do i = 1 to n;
if 1=n then TT=0;
else if i < n-1 then TT=time[i+1]-time;
end;
create kaplann var{time survival1 SS TT };
append;
quit;
data kaplan_sum;
set kaplann;
sur_time=SS*TT;
drop time survival1;
run;
proc print data=kaplan_sum;
run;
This output is wrong, there is supposed to be just 4 observations. The 4th and fifth observation for SS is wrong.
SS= (.6-.55)+(.55-.3)+(.3-.1)+(.1-0)
TT= (5-4)+(6-5)+((7-6)+(9-7))
This is wrong.
i SS TT TT*SS
1 | 0.05 | 1 | 0.05 |
---|---|---|---|
2 | 0.25 | 1 | 0.25 |
3 | 0.20 | 1 | 0.20 |
4 | 1.00 | 1 | 1.00 |
5 | 1.00 | 1 | 1.00 |
This is how the correct output is supposed to look like;
SS= (.6-.55)+(.55-.3)+(.3-.1)+(.1-0)
TT= (5-4)+(6-5)+((7-6)+(9-7))
i SS TT SS*TT
1 | 0.05 | 1 | 0.05 |
2 | 0.25 | 1 | 0.25 |
3 | 0.20 | 1 | 0.20 |
4 | 0.1 | 2 | 0.2 |
proc iml;
use kaplan;
read all var{TIME SURVIVAL1} into DM;
close;
SURVIVAL1 = DM[,2]; TIME = DM[,1];
n = nrow(DM);
segment = J(nrow(DM),1,1); *print segment;
SS=J(nrow(survival1),1,1);
do i = 1 to n ;
if i=n then SS=0;
else if i< n-1 then SS=SURVIVAL1-SURVIVAL1[i+1];
end;
TT=J(nrow(time),1,1);
do i = 1 to n;
if i=n then TT=0;
else if i < n-1 then TT=time[i+1]-time;
end;
create kaplann var{time survival1 SS TT };
append;
quit;
data kaplan_sum;
set kaplann;
sur_time=SS*TT;
drop time survival1;
run;
proc print data=kaplan_sum;
run;
ANSWER
proc iml;
use kaplan;
read all var{TIME SURVIVAL1} into DM;
close;
SURVIVAL1 = DM[,2]; TIME = DM[,1];
n = nrow(DM);
segment = J(nrow(DM),1,1); *print segment;
SS=J(nrow(survival1),1,1);
do i = 1 to n ;
if i=n then SS=0;
else if i< n-1 then SS=SURVIVAL1-SURVIVAL1[i+1];
end;
TT=J(nrow(time),1,1);
do i = 1 to n;
if i=n then TT=0;
else if i < n-1 then TT=time[i+1]-time;
end;
create kaplann var{time survival1 SS TT };
append;
quit;
data kaplan_sum;
set kaplann;
sur_time=SS*TT;
drop time survival1;
run;
proc print data=kaplan_sum;
run;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.