Как распечатать последнее наблюдение набора данных SAS?

У меня есть набор данных с 1000 наблюдений. Я хочу распечатать только последнее наблюдение. Используя следующее:

proc print data=apple(firstobs = 1000 obs = 1000); 
run;

Я могу получить последнее наблюдение. Но я должен заранее знать, что мой набор данных содержит 1000 наблюдений. Как мне это сделать, не зная об этом?

4 ответа

Решение

Есть много способов сделать это. Вот два:

proc sql noprint;
 select n(var1) into :nobs
 from apple;
quit;

proc print data=apple(firstobs=&nobs); run;

Это просто считывает количество наблюдений в макропеременную, а затем использует это для указания первого наблюдения. (Обратите внимание, что var1 относится к переменной в ваших данных.)

Другой подход заключается в создании представления данных, которое будет хранить только последнее наблюдение, а затем вывести его:

data tmp / view=tmp;
 set apple nobs=nobs;
 if _n_=nobs;
run;

proc print data=tmp; run;

Я думаю, что end вариант для SET, MERGE, MODIFY, или же UPDATE Заявление очень полезно.

data x;
  do i = 1 to 1000;
    output;
  end;
run;

data x;
  set x end = _end;
  end = _end;
proc print data = x;
  where end;
run;

Есть два простых решения:

Решение 1:

data result;
    set apple end=end;
    if end then output;
run;
proc print data=result;
run;

Решение 2:

data result;
    set apple nobs=nobs;
    if _N_=nobs then output;
run;
proc print data=result;
run;

Есть много способов узнать количество наблюдений; Следующий макрос является одним из примеров.

%macro nobs (dsn);
   %let nobs=0;
   %let dsid = %sysfunc(open(&dsn));
   %if &dsid %then %let nobs = %sysfunc(attrn(&dsid,nobs));
   %let rc   = %sysfunc(close(&dsid));
   &nobs
%mend nobs;

%let n = %nobs(apple);

proc print data=apple (firstobs=&n obs=&n); run;
Другие вопросы по тегам