Под длинным форматом я думаю, что вы имеете в виду, что это «сложенный» набор данных с каждым человеком, имеющим несколько наблюдений (вместо одной строки на человека с несколькими столбцами).В вашей ситуации это, вероятно, правильный способ хранения данных.
Чтобы сделать это с помощью шагов с данными, я думаю, что вы на правильном пути с первым.и последний.
Я бы сделал это так:
proc sort data=accidents;
by id date;
run;
data accidents; set accidents;
by id accident; *this is important-it makes first. and last. available for use;
retain first last;
if first.date then first=date;
if last.date then last=date;
run;
Теперь у вас есть набор данных с идентификатором, датой, датой первого происшествия, датой последнего происшествия
Вы можете посчитать время между с помощью
data accidents; set accidents;
timebetween = last-first;
run;
Вы не можете сделать это напрямую на одном шаге данных, так как переменная «last» не будет точной, пока она не проанализирует последнюю строку, и поэтомуданные будут неверны ни для чего, кроме последнего наблюдения за аварией.