我有一个包含1000个观察值的数据集。我只想打印出最后一个观察结果。使用以下内容:
proc print data=apple(firstobs = 1000 obs = 1000);
run;
我可以得到最后一次观察。但我必须提前知道我的数据集有1000个观察值。如何在不知情的情况下这样做?
答案 0 :(得分:7)
有很多方法可以做到这一点。这是两个:
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;
答案 1 :(得分:3)
我认为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;
答案 2 :(得分:1)
有很多方法可以找到观察次数;以下宏是一个例子。
%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;
答案 3 :(得分:0)
有两个简单的解决方案:
解决方案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;