如何打印SAS数据集的最后一次观察结果?

如何打印SAS数据集的最后一次观察结果?,sas,Sas,我有一个包含1000个观测值的数据集。我只想把最后的观察结果打印出来。使用以下命令: proc print data=apple(firstobs = 1000 obs = 1000); run; 我能得到最后的观察结果。但我必须事先知道我的数据集有1000个观测值。我如何在不知道的情况下做到这一点?有很多方法可以做到这一点。这里有两个: proc sql noprint; select n(var1) into :nobs from apple; quit; proc print d

我有一个包含1000个观测值的数据集。我只想把最后的观察结果打印出来。使用以下命令:

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

我能得到最后的观察结果。但我必须事先知道我的数据集有1000个观测值。我如何在不知道的情况下做到这一点?

有很多方法可以做到这一点。这里有两个:

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;

有很多方法可以找到观察的数量;下面的宏就是一个例子

%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;

我认为
SET
MERGE
MODIFY
UPDATE
语句的
end
选项非常有用

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;

嗨,特雷弗,这里回答了“如何获得数据集中的观测值数量”的问题:任何正在学习SAS基础测试并最终来到这里的人都要小心——不要上当——这里没有LASTOBS选项!)