如何按类别构造数据以进行SAS中的重复事件分析

时间:2018-10-22 22:18:54

标签: sas

我想构建我的长数据集(许多记录到一个ID),以创建间隔以在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;

0 个答案:

没有答案