* * Read in the bladder data set * drop the one useless subject who has no follow-up time * ; data temp; infile 'data.bladder' missover; retain id 0; input rx futime number size r1-r4; if (futime =0) then delete; id = id +1; * Anderson-Gill style data; data temp2; set temp; drop futime r1-r4; time1 =0; enum =0; if (r1 ne .) then do; time2 = r1; status= 1; enum = 1; output; time1 = r1; end; if (r2 ne .) then do; time2 = r2; status= 1; enum = 2; output; time1 = r2; end; if (r3 ne .) then do; time2 = r3; status= 1; enum = 3; output; time1 = r3; end; if (r4 ne .) then do; time2 = r4; status= 1; enum = 4; output; time1 = r4; end; if (futime > time1) then do; time2 = futime; status= 0; enum = enum +1; output; end; data bladder1; set temp2; rx1 = rx * (enum=1); *some special indicator variables for later; rx2 = rx * (enum=2); rx3 = rx * (enum=3); rx4 = rx * (enum=4); * * data set for a Wei, Lin, and Weissfeld type anal : * # obs = #subjects * 4 * ; data temp3; set bladder1; by id; drop temp time1 time2; futime = time2; if (enum <5) then output; if (last.id =1) then do; temp = enum +1; do enum = temp to 4; status =0; output; end; end; data bladder2; set temp3; rx1 = rx * (enum=1); *some special indicator variables for later; rx2 = rx * (enum=2); rx3 = rx * (enum=3); rx4 = rx * (enum=4); proc print; var id time1 time2 status size number enum; * * The data set without "extra" observations *; data bladder3; set bladder1; if (enum <5); * * the "doubled" data set of my simple example * first recurrence bladder data, twice * ; data double; set bladder1; drop time1 time2; if (enum =1); futime = time2; output; enum=2; output;