Для вашего примера данных, которые не имеют идентификатора или групповой переменной, все должно быть довольно просто. Вместо того, чтобы думать о перемещении вперед и назад в файле, просто создайте новые переменные, которые содержат предыдущее (LAG_TYPE
) и следующее (LEAD_TYPE
) значение для TYPE
. Затем ваше требование сохранить наблюдения до того, как наблюдения с TYPE = 1 переведены на хранение наблюдений, где LEAD_TYPE = 1.
Давайте преобразуем ваши образцы данных в набор данных.
data have ;
input datetime :$15. type ;
cards;
ddmmyy:10:30:00 0
ddmmyy:10:31:00 0
ddmmyy:10:32:00 1
ddmmyy:10:33:00 0
ddmmyy:10:34:00 1
ddmmyy:10:35:00 0
;
Вместо того, чтобы фактически вести требуемые наблюдения, я создам новую переменную KEEP, которая будет верна для записей, которые соответствуют вашим критериям.
data want ;
recno+1;
set have end=eof;
lag_type=lag(type);
if not eof then set have(firstobs=2 keep=type rename=(type=lead_type));
else lead_type=.;
keep= (type=1 or lag_type=1 or lead_type=1) ;
run;
Вот результат.
recno datetime type lag_type lead_type keep
1 ddmmyy:10:30:00 0 . 0 0
2 ddmmyy:10:31:00 0 0 1 1
3 ddmmyy:10:32:00 1 0 0 1
4 ddmmyy:10:33:00 0 1 1 1
5 ddmmyy:10:34:00 1 0 0 1
6 ddmmyy:10:35:00 0 1 . 1