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
);
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