SAS - шаг данных с использованием сохранения?

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

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 для этого, но я не совсем уверен, как это написать. Любая помощь будет оценена...

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;

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

данные хотят;
  установить есть;
  по действию seq;

  сохранить пред.;

  prevdt = конец;

  если first.seq, то выводить;
  еще делать;
    если start > sum(prevdt,1), то выводить;
    prevdt = конец;
  конец;

  падение преддв;
бежать;
Другие вопросы по тегам