Skip to main content

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 from this blog

HackRF on Windows 8

This technical note is based on an extract from thread. I have made several changes and added recommendations. I have experienced lot of latency using GnuRadio and HackRF on Pentoo Linux, so I wanted to try out GnuRadio on Windows.



HackRF One is a transceiver, so besides SDR capabilities, it can also transmit signals, inkluding sweeping a given range, uniform and Gaussian signals. Pentoo Linux provides the most direct access to HackRF and toolboxes. Install Pentoo Linux on a separate drive, then you can use osmocom_siggen from a terminal to transmit signals such as near-field GSM bursts, which will only be detectable within a meter.









Installation of MGWin and cmake: Download and install the following packages:
- MinGW Setup (Go to the Installer directory and download setup file)
- CMake (I am using CMake 3.2.2 and I installed it in C:\CMake, this path is important in the commands we must send in the MinGW shell)
Download and extract the packages respectively in the path C:\MinGW\msys\…

Example: Beeswarm plot in R

library(foreign)

data <- read.dta("C:/Users/hellmund/Documents/MyStataDataFile.dta")

names(data)

install.packages('beeswarm')

library(beeswarm)

levels(data$group)

png(file="C:/Users/hellmund/Documents/il6.png", bg="transparent")

beeswarm(data$il6~data$group,data=data, method=c("swarm"),pch=16,pwcol=data$Gender,xlab='',ylab='il6',ylim=c(0,20))

legend('topright',legend=levels(data$Gender),title='Gender',pch=16,col=2:1)

boxplot(data$il6~data$group, data=data, add = T, names = c("","",""), col="#0000ff22")

dev.off()

Example: Business cards typeset with LaTeX

So you enjoy the quality of a professional typesetting system? You got Avery labels, a working MikTeX and the ticket package installed...
You might find some assistance from a half criminal paranoid zealot system administrator, willing to guide you through a dinosaur kingdom of TeX ... but that kind of assistance might also just leave you with nothing.

It was easy to get the layout of the labels with the option zw32010, but how about page margins? I tried to set things straight with the layouts package (\usepackage{layouts}\currentpage \pagedesign), but then there was still some unwanted white space and margins...

To make things less complicated I decided to make a single card. The solution is a hack because it needs customization (with voffset and hoffset as you see n the TeX code below) but the adjustment is more straightforward, especially if you use the boxed option with ticket.

The card was converted to png with Ghostscript and I could easily print the business cards with Averys …