计算4次或更多次访问是否在45天之内发生

Nay*_*Nay 1 sql loops sas

这是样本数据.如果他们在45天之内有4次或更多次就诊,我只需要保留一位患者.我已经转换了数据集并使用数组来找出一种方法,但我希望有一种更有效的方法.

Pat_ID  Date        Prov_ID
    A       05/12/2012  X1
    A       05/12/2012  X2
    B       11/12/2012  X1
    B       11/20/2012  X1
    B       01/12/2013  X1
    B       03/22/2013  X1
    C       04/25/2013  X1
    C       04/25/2013  X2
    C       04/27/2013  X1
    C       05/12/2013  X1
    C       05/22/2013  X2
    C       04/25/2012  X3
    ...
Run Code Online (Sandbox Code Playgroud)

我开始删除少于4个事件的观察.

任何想法,将不胜感激.

结果结果应该是在45天内仅具有4次或更多次访问的PAT_ID的数据集.

Tim*_*nds 5

这是一个基于SAS(而不是SQL)的解决方案,使用该lag功能.它只能读取一次数据,所以应该非常有效,特别是与自我式的解决方案相比.

首先按ID和访问日期对数据进行排序(如果还没有)

proc sort data=YourData; 
    by Pat_ID Date;
run;
Run Code Online (Sandbox Code Playgroud)

如果您追溯3条记录中的Pat_ID和日期,您可以测试它是否在45天内并且是同一患者.如果是这样 - 将其添加到列表中.

data list_of_membs(keep=PAT_ID);
    set YourData;
    retain last_Pat_ID;*The last PAT_ID that was added to the list;

    pat_id_3back = lag3(Pat_ID); *PAT_ID from 3 records back;
    date_3back = lag3(date);

    If  pat_id = pat_id_3back 
        AND (date - date_3back) < 45 
        AND (PAT_ID != last_Pat_ID) THEN DO;
            output;
            last_PAT_ID = PAT_ID;
    END;
run;
Run Code Online (Sandbox Code Playgroud)