Шаг данных для сравнения значения даты со значением предыдущей строки

#sas

#sas

Вопрос:

Как я могу сравнить столбец даты с тем же значением, но в предыдущей строке?

У меня есть набор данных со следующими данными:

  Nr            Date               DocumentDate
 1              17APR2019          3APR2019       
 1              31MAY2019          6APR2019
 1              26APR2019         18APR2019
 2              22APR2019          5APR2019
 2               1MAY2019          6APR2019
 2              14APR2019          8APR2019
  

DocumentDate — это дата, когда строка вводится в набор данных.

Я хочу создать другой набор данных со следующей информацией. Этот набор данных отслеживает, как был изменен столбец «Дата».

  Order   DateBefore       NewDate           DocumentDate
 1          .              17APR2019        3APR2019
 1       17APR2019         31MAY2019        6APR2019
 1       31MAY2019         26APR2019       18APR2019
 2           .             22APR2019        5APR2019
 2       22APR2019          1MAY2019        6APR2019
 2        1MAY2019         14APR2019        8APR2019
  

Как выполнить эту задачу?

Ответ №1:

Вы можете сделать это легко с помощью LAG() функции.

Используйте групповую обработку, чтобы убедиться, что вы не используете дату из предыдущей группы при первом наблюдении новой группы.

 data want ;
  set have ;
  by NR ;
  datebefore=lag(date);
  if first.nr then datebefore=.;
  format datebefore date9.;
run;
  

Обязательно запускайте функцию LAG() при каждом наблюдении, поскольку она НЕ возвращает значение из предыдущего наблюдения, а вместо этого возвращает значение из предыдущего выполнения этого вызова функции LAG().