如何在SAS中打印前10个和后10个观察值?

时间:2017-09-17 14:07:24

标签: sas statistics

我试图找到一种方法来打印我的SAS数据集的前10个和后10个观察值。有没有办法可以做到这一点?

我试过proc print data = ia.usage; where Obs < 10 & Obs > 80;run; 但该命令仍打印出所有90个观测值。关于如何轻松做到这一点的任何想法?

感谢。

2 个答案:

答案 0 :(得分:4)

获得前10名很容易:

/*First 10 obs*/
proc print data = ia.usage(obs = 10); run;

获得最后10个有点困难,但这可以使用视图来完成:

/*Last 10 obs*/
data last10 /view = last10;
  startobs = nobs - 9;
  set ia.usage nobs = nobs firstobs = startobs;
  drop startobs;
run;
proc print data = last10; run;

如果你想在同一个proc中打印两个视图,你可以创建两个视图并将它们组合到另一个视图中,然后打印它:

data first10 /view = first10;
  set ia.usage(obs = 10);
run;

data first10_last10 /view = first10_last10;
  set first10 last10;
run;

proc print data = first10_last10; run;

上述方法应该非常快,即使对于大型数据集也是如此,但它假设您的初始数据集不是视图,因为它依赖于知道数据集中的行数(nobs)。如果你有一个视图,那么你将需要读取整个数据集以找出行数,然后再次读取它,丢弃除第一行和最后10行之外的所有内容。这会慢得多。 E.g。

data first10_last10 /view = first10_last10;
  do nobs = 1 by 1 until(eof);
    set ia.usage(drop = _all_) end = eof; /*We only want the row count, so drop all vars on this pass to save a bit of time*/
  end;
  do _n_ = 1 to nobs;
    set ia.usage;
    if _n_ <= 10 or _n_ >= nobs - 9 then output;
  end;
run;

proc print data = first10_last10;

答案 1 :(得分:0)

这可以使用单一视图来实现:

data want/view=want;
  set ia.usage nobs=__nobs;
  if _n_ le 10 or _n_ gt __nobs-10;
run;

proc print data=want;
run;