sas 如何查找第n个观测量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sas 如何查找第n个观测量相关的知识,希望对你有一定的参考价值。

参考技术A 比如找到第2,4,6个观测值

data need;
do _n_ = 2, 4, 6;
set sashelp.class point=_n_;
output;
end;
stop;
run;本回答被提问者和网友采纳

SAS - 如何从数据集中获取最后的“n”个观察结果?

【中文标题】SAS - 如何从数据集中获取最后的“n”个观察结果?【英文标题】:SAS - How to get last 'n' observations from a dataset? 【发布时间】:2013-04-16 18:33:21 【问题描述】:

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

【问题讨论】:

你不知道'n'是什么意思?您将如何找出“n”的值 - 它是数据集变量、宏变量还是参数? 【参考方案1】:

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

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;

【讨论】:

【参考方案2】:

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

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

【讨论】:

注意:使用 select..into 时要指定格式,否则该值的格式为 BEST8.,当您选择一个 >= 100,000,000 的值时会导致奇怪的错误(它的格式为指数表示法,导致四舍五入)。【参考方案3】:

使用 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;

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

【讨论】:

我很好奇“这应该表现得更好”的条件。我怀疑是其中的一些;随机访问不如顺序访问快,所以那里有一些损失。如果我有时间可以测试一下。我怀疑如果您正在使用大多数观察结果,那么按顺序执行会更快,但如果它是一个大型数据集并且您想要少量观察结果,那么随机 = 访问会更快。让我希望 SAS 能够以相反的顺序打开数据集,而无需先对其进行排序。 @Joe 想象一个有 100 万个 obs 的数据集,你想要“最后一个”10 个。使用这种技术,只执行 10 个“输入”操作。仅使用 NOBS 值需要 100 万次“输入”操作。根据数据集的“宽度”程度,这种差异可能非常显着。 是的,我当然看到这可能会更快。我很好奇它在哪一点上更快/更慢(即,数据集的大小,被提取的数据百分比 - 1MM 中的 10 个当然会更快,但是 1MM 中的 500k 呢?)【参考方案4】:

这假设您有一个宏变量,表示您想要多少个观察值。 NOBS 会告诉您当前数据集中的观察次数,而无需阅读全部内容。

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

【讨论】:

以上是关于sas 如何查找第n个观测量的主要内容,如果未能解决你的问题,请参考以下文章

如果 _N_ = 1 条件返回 true,即使在 SAS 中设置的数据集为空(零观测值)

是否可以导入包含超过 1,000,000 个观测值的 xpt 文件?

如何在SAS中对不同公共变量的观测值进行求和

SAS:提取数据集观测,宏参数

SAS 操作数据集的观测

SAS笔记 利用数组重构SAS数据集