SAS: как вывести последнее наблюдение в последовательности набора данных SAS

#sas

#sas

Вопрос:

Я хочу вывести последнее наблюдение в переменной, которая является целочисленной последовательностью в наборе данных sas.

У меня есть этот набор данных:

 data have;
input seq var;
datalines;
1 7 
2 6 
3 3 
1 1 
2 4
1 8
2 9
3 1
4 8
;
run;
  

Я хотел бы добиться следующего:

 seq var
3   3
2   4 
4   8
  

Я тщательно искал свой ответ в Интернете, но ничего не смог найти.

Ответ №1:

Вы можете использовать метод прогнозирования. Это один из многих способов его записи.

 data last;
   set have end=eof;
   if not eof then set have(firstobs=2 keep=seq rename=(seq=nseq));
   if nseq eq 1 or eof then output;
   drop nseq;
   run;
  

Ответ №2:

Просто чтобы показать плавность подхода к прогнозированию — вы можете сделать то же самое с lag , но для этого требуется почти в два раза больше строк кода:

 data want(drop=prev_:);
  set have end = eof;
  prev_seq = lag(seq);
  prev_var = lag(var);
  if seq < prev_seq then do;
    seq = prev_seq;
    var = prev_var;
  end;
  if eof or seq = prev_seq;
run;