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