Вопрос

Из данных образца ниже, я пытаюсь определить учетные записи (по идентификатору и SEQ), где происходит произошедшее значение status_date не менее 3 месяцев подряд.Я беспокоюсь с этим некоторое время, и я совсем не уверен, как решать это.

Данные образца:

ID     SEQ   STATUS_DATE
11111    1   01/01/2014
11111    1   02/10/2014
11111    1   03/15/2014
11111    1   05/01/2014
11111    2   01/30/2014
22222    1   06/20/2014
22222    1   07/15/2014
22222    1   07/16/2014
22222    1   08/01/2014
22222    2   02/01/2014
22222    2   09/10/2014
.

Что мне нужно вернуть:

ID      SEQ   STATUS_DATE
11111    1    01/01/2014
11111    1    02/10/2014
11111    1    03/15/2014
22222    1    06/20/2014
22222    1    07/15/2014
22222    1    07/16/2014
22222    1    08/01/2014
.

Любая помощь будет оценена.

Это было полезно?

Решение

Вот один метод:

data have;
input ID     SEQ   STATUS_DATE $12.;
datalines;
11111    1   01/01/2014
11111    1   02/10/2014
11111    1   03/15/2014
11111    1   05/01/2014
11111    2   01/30/2014
22222    1   06/20/2014
22222    1   07/15/2014
22222    1   07/16/2014
22222    1   08/01/2014
22222    2   02/01/2014
22222    2   09/10/2014
;
run;

data grouped (keep = id seq status_date group) groups (keep = group2);
    set have;
    sasdate = input(status_date, mmddyy12.);
    month = month(sasdate);
    year = year(sasdate);
    pdate = intnx('month', sasdate, -1);
    if lag(year) = year(sasdate) and lag(month) = month(sasdate) then group+0;
    else if lag(year) = year(pdate) and lag(month) = month(pdate) then count+1;
    else do;
        group+1;
        count = 0;
    end;
    if count = 0 and lag(count) > 1 then do;
        group2 = group-1;
        output groups;
    end;
    output grouped;
run;

data want (keep = id seq status_date);
    merge grouped groups (in=a rename=(group2=group));
    by group;
    if a;
run;
.

В основном я даю наблюдения в том же групповом номере, если они находятся в последовательных месяцах, то также создают данные, установленные с групповыми номерами групп с более чем 2 наблюдениями.Затем я объединяю эти два набора данных и только держать наблюдения, которые находятся во втором наборе данных, то есть с более чем 2 наблюдениями.

Другие советы

Как насчет следующего.Однако вы можете захотеть сортировать в месяц, если это то, что вы хотите.

data want;
    do _n_ = 1 by 1 until(last.id);
    set survey;
    by id;
    if _n_ <=3 then output;
    end;
run;
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top