SAS — шаг данных с использованием Retain?

У меня есть следующие данные...

acct    seq    start            end
1111     A     01/01/2014       01/31/2014
1111     A     02/01/2014       02/28/2014

Мне нужно исключить записи, в которых учетная запись имеет дату начала, которая на 1 день позже даты окончания. Таким образом, приведенная выше запись будет исключена, поскольку она имеет дату окончания 31.01.2014 для первого наблюдения и дату начала 01.02.2014 для следующего наблюдения.

Я думаю, что мне нужно использовать Retain для этого, но я не совсем уверен, как это написать. Любая помощь будет оценена...


person user2941280    schedule 14.05.2014    source источник
comment
Вы хотите исключить все записи, в которых acct = 1111, или только отдельные записи, в которых дата начала и дата окончания отстоят друг от друга на 1 день?   -  person Zfunk    schedule 14.05.2014


Ответы (2)


Решение Proc SQL... при условии, что вы используете даты SAS...

proc sql;
    create table excludes as
    select distinct acct
    from data as one
    left join data as two
    on one.acct=two.acct and one.end=two.start-1
    where two.start is not null;

    create table filtered as
    select *
    from data
    where acct not in
    (
        select *
        from excludes
    );
quit;
person John Chrysostom    schedule 14.05.2014

Решение Datastep, предполагая, что ваши данные сгруппированы по acct и seq (и ваши даты являются датами SAS)

data want ;
  set have ;
  by acct seq ;

  retain prevdt . ;

  prevdt = end ;

  if first.seq then output ;
  else do ;
    if start > sum(prevdt,1) then output ;
    prevdt = end ;
  end ;

  drop prevdt ;
run ;
person Chris J    schedule 14.05.2014
comment
Я не думаю, что это достигает цели ОП. Похоже, он хочет удалить ВСЕ записи для учетной записи, когда у учетной записи есть дата начала на один день позже даты окончания. По крайней мере, это моя интерпретация того, что мне нужно исключить записи, в которых учетная запись имеет дату начала, которая на 1 день позже даты окончания... - person John Chrysostom; 14.05.2014
comment
Конечно, OP необходимо более четко указать, какие записи необходимо сохранить/удалить. Пошаговое решение может быть предоставлено для всех трех сценариев (удалить предыдущий, удалить следующий, удалить все). - person Chris J; 15.05.2014