SAS - 如何从数据集中获取最后'n'个观测值?

时间:2013-04-23 13:52:07

标签: sas dataset

如何仅使用原始数据集中的最后n个观察值从另一个数据集创建SAS数据集。当你知道n的值时,这很容易。如果我不知道'n'怎么能这样做?

4 个答案:

答案 0 :(得分:8)

这假设你有一个宏变量,说明你想要多少观察。 NOBS会告诉您当前没有阅读整个数据集的数据集中的观察数量。

%let obswant=5;
data want;
set sashelp.class nobs=obscount;
if _n_ gt (obscount-&obswant.);
run;

答案 1 :(得分:4)

使用Joe的宏变量示例来指定您想要的观察数量,这是另一个答案:

%let obswant = 10;
data want;
   do _i_=nobs-(&obswant-1) to nobs;
      set have point=_i_ nobs=nobs;
      output;
      end;
   stop;  /* Needed to stop data step */
run;

这应该会更好,因为它只会读取您想要的特定观察结果。

答案 2 :(得分:2)

如果数据集很大,您可能不想读取整个数据集。相反,您可以尝试首先读取数据集中观察总数的构造。所以如果你想得到最后的观察结果:

data t;
  input x;
datalines;
1
2
3
4
;

%let dsid=%sysfunc(open(t));
%let num=%sysfunc(attrn(&dsid,nlobs));
%let rc=%sysfunc(close(&dsid));
%let number = 2;

data tt;
set t (firstobs =  %eval(&num.-&number.+1));
run;

答案 3 :(得分:1)

为了多样化,这是另一种方法(不一定是更好的方法)

%let obswant=5;

proc sql noprint;
select nlobs-&obswant.+1 into :obscalc
from dictionary.tables
where libname='SASHELP' and upcase(memname)='CLASS';
quit;

data want;
set sashelp.class (firstobs=&obscalc.);
run;