Я хотел бы структурировать свой длинный набор данных (множество записей на один идентификатор), чтобы создать интервалы для выполнения модели пропорциональных рисков Кокса в SAS (анализ повторяющихся событий).У меня есть широкие и длинные случаи, рассчитанные как дни от даты рождения, а также даты посещения.Я хочу, чтобы последний верхний интервал представлял последний последующий период времени, будь то широкий / длинный случай или посещение.Если широких или длинных вхождений нет вообще, мы принимаем дату последнего посещения в качестве верхнего интервала.
Например, именно так выглядят мои фиктивные данные для общего количества вхождений.STATUS - моя переменная цензуры:
id Class DOB O_Date Visit_Date O_Time Visit_Time Time_Interval_O Episode_Sum Episode_Wide Episode_Long _freq_ Lower_O Upper_O Status
4 6/7/2011 . 7/15/2011 0 38 0 0 . . 1 0 38 0
108 Long 7/15/2011 8/30/2011 11/23/2011 46 131 0 1 1 1 73 0 46 1
108 Wide 7/15/2011 9/16/2011 11/23/2011 63 131 46 2 2 1 1 46 63 1
108 Wide 7/15/2011 11/23/2011 11/23/2011 131 131 63 3 3 1 1 63 131 1
108 Wide 7/15/2011 11/15/2012 11/23/2011 489 131 131 4 4 1 1 131 489 1
108 Wide 7/15/2011 12/27/2012 11/23/2011 531 131 489 5 5 1 2 489 531 1
409 Long 6/23/2011 10/2/2011 10/22/2012 101 487 0 1 0 1 1 0 101 1
409 Wide 6/23/2011 3/22/2012 10/22/2012 273 487 101 1 1 2 2 101 273 1
409 Wide 6/23/2011 3/22/2012 10/22/2012 273 487 . 2 1 2 . 273 487 0
545 Long 7/9/2011 5/24/2012 1/31/2012 320 206 0 1 1 1 9 0 320 1
Хитрость в том, что я хочу создать интервалы, когда происходит широкий и длинный интервал.Я уже создал интервалы для общего количества эпизодов, что выше.Там будет совпадение, потому что иногда широкие и длинные происходят в одну и ту же дату.Также обратите внимание, что может быть несколько дат посещения для каждого пациента.ID 545 - это случай, когда широкие и длинные значения происходят одновременно, а широкие и длинные интервалы будут одинаковыми.По сути, я хочу выделить интервалы из общего набора данных и разделить их на широкие и длинные интервалы.Я пытался сделать это, создавая отдельные наборы данных для каждого типа, но мои интервалы получаются неправильными, особенно для пациентов, у которых широкие и длинные интервалы в одну и ту же дату.
Из общего набора данных вхождений я хочу, чтобы версия длинных вхождений выглядела следующим образом:
id Class DOB O_Date Visit_Date O_Time Visit_Time Time_Interval_O Episode_Sum Episode_Wide Episode_Long _freq_ Lower_O_Long Upper_O_Long Status
4 6/7/2011 . 7/15/2011 0 38 0 0 . . 1 0 38 0
108 Long 7/15/2011 8/30/2011 11/23/2011 46 131 0 1 1 1 73 0 46 1
108 Wide 7/15/2011 9/16/2011 11/23/2011 63 131 46 2 2 1 1 46 531 0
409 Long 6/23/2011 10/2/2011 10/22/2012 101 487 0 1 0 1 1 0 101 1
409 Wide 6/23/2011 3/22/2012 10/22/2012 273 487 101 1 1 2 2 101 273 1
409 Wide 6/23/2011 3/22/2012 10/22/2012 273 487 . 2 1 2 . 273 487 0
545 Long 7/9/2011 5/24/2012 1/31/2012 320 206 0 1 1 1 9 0 320 1
Это частичный код, который я использовал для создания переменных в общем наборе данных.Переменная FREQ отсутствует, если строка была добавлена к окончательному набору данных.Это необходимо для того, чтобы интервал включал время последнего посещения верхнего времени.Как бы я достиг желаемой таблицы данных для длинных и широких отдельно?
data O1; set O1;
O_time = intck('DAY', dob, O_Date, 'D');
Visit_time = intck('DAY', _dob, Visit_date, 'D');
if Visit_time ne .;
/*Accounting for occurrences when born*/
if dob=O_date then O_time=1;
time_interval_O = lag(O_time);
run;
proc sort data=O1; by baby_id Episode_sum; run;
Data O2; set O1;
by baby_id;
if first.baby_id then time_interval_O=0;
lower_O = time_interval_O;
upper_O = O_time;
if Episode_sum =0 then upper_O = O_time;
if Episode_sum >0 then status=1; else status=0;
if upper_O >Visit_time then status=1;
run;
Data O3; set O2;
if _freq_=. and O_time < Visit_time then lower_O = O_time;
if _freq_=. and O_time < Visit_time then upper_O = Visit_time;
run;