Time-dependent variables and SAS PHREG

There are several ways to include time-dependent variables in a call to SAS' Proc PHREG: Programming statements within PHREG or data steps combined with PHREG counting process format, i.e. in the model statement we use the syntax

model (t_in,t_out)*censored(0) = X1 ... Xn;

instead of

model t*censored(0) = X1 ... Xn;

Click the title to download the following SAS macro I have written. If you find an error please report it, otherwise you are free to use it. Another macro that can be used for the purpose of splitting a data set according to time-dependent variables is the Lexis macro developed by Bendix Carstensen %LEXIS


/*Macro for splitting data according to 0-1 time dependent variables*/

%macro split_time(
filein, /*Data set file containing td_date among other variables*/
id, /*Patient id - needed since we sort wrt. id and datein - could be removed */
td_var, /*Created 0-1 time-dependent variable*/
td_date, /*Date for update of timedependent variable*/
datein, /*Entry date*/
dateout, /*Exit date*/
cenvar, /*Censored 0 yes 1 no*/
fileout, /*Output file*/
labeltext /*td_var label - plain text - no quotes!*/
);


proc sort data=&filein out=temp; by id &datein; run;

data temp1;
set temp;
if (&dateout GT &td_date) then do;
&td_var=1;
&datein=max(&td_date,&datein);
end;
else delete;
run;

data temp3;
set temp;
if (&dateout LE &td_date) then &td_var=0;
else delete;
run;

data temp2;
set temp;
if (&dateout GT &td_date GT &datein) then do;
&dateout=&td_date;
&cenvar=0;
&td_var=0;
end;
else delete;
run;


data temp;
set temp1 temp2 temp3;
label &td_var="&labeltext";
run;

proc sort data=temp out=&fileout;
by &id &datein;
run;

%mend split_time;


/*Example of its use - three dates included on the input file are used*/
%inc 'Z:\split_time.sas';

proc sort data=lv.litval;
by id dateDep dateCon datePsy;
run;

%split_time(
lv.litval,
id,
conDep,
dateDep,
dateFirstPurchase,
eventTimeHosp,
censoredHosp,
outDataDep,
Concomitant use of antidepressants
);

%split_time(
outDataDep,
id,
conCon,
dateCon,
dateFirstPurchase,
eventTimeHosp,
censoredHosp,
outDataCon,
Concomitant use of anticonvulsants
);

%split_time(
outDataCon,
id,
conPsy,
datePsy,
dateFirstPurchase,
eventTimeHosp,
censoredHosp,
lv.litvalHosp,
Concomitant use of antipsychotics
);

Comments

Popular Posts