Как получить последние два наблюдения из набора данных в SAS без использования sort или First. и последний. или сделать цикл - PullRequest
0 голосов
/ 29 марта 2020

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

data a;
set sashelp.cars nobs=_nobs_;/*create the temporary variable to store total no of obs*/
if _N_ ge _nobs_-1;/*Now compare the automatic variable _N_ to _nobs_*/
run;

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Шаг DATA - это неявный l oop с автоматической c индексной переменной _N_. Вы можете использовать этот факт для неявного вывода строк без явного DO l oop. Что касается @Tom, используется опция point=, поэтому нет необходимости читать весь набор данных для достижения последних двух строк.

Пример:

data want;
  if _N_ > min(2,_Z_) then stop;

  _P_ = _Z_ - min(2,_Z_) + _N_; 

  set sashelp.class point=_P_ nobs=_Z_;
run;
0 голосов
/ 29 марта 2020

Не уверен, что здесь есть вопрос.

Вы также можете использовать опцию POINT= в операторе SET. Вы должны явно завершить шаг данных, поскольку большинство шагов данных заканчиваются, когда они читают после конца входных данных, и этот шаг не может этого сделать.

data want;
  do p=max(1,nobs-1) to nobs;
    set have point=p nobs=nobs;
    output;
  end;
  stop;
run;
...