Я вышел простым способом, но будет ограничен фактическим размером данных.
data have;
input Time Group Event $ Value ;
datalines;
1 1 NA 0
2 1 NA 0
3 1 Begin 1.1
4 1 NA 1.2
5 1 NA 1.3
6 1 End 1.4
7 1 NA 0
1 2 NA 0
2 2 Begin 1.1
3 2 NA 1.2
4 2 End 1.3
5 2 NA 1.4
;
run;
proc sort data = have;
by group time;
run;
data have1;
set have;
count + 1;
by group;
if first.group then count = -100;
if event = 'Begin' then count = 0;
if event = 'End' then count = 100;
if count < 0 or count >100 then delete;
run;
Текущий код может быть применен к данным небольшого размера, если у вас есть менее 100 наблюдений между «Началом» и «Концом» и менее 100 наблюдений до «Начала». Вы можете настроить начальное значение счета в соответствии с истинным размером данных.