Как распечатать последнее наблюдение набора данных 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;