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

Giv*_*oZo 2 statistics sas

我试图找到一种仅打印SAS数据集的前10个和后10个观测值的方法。有办法吗?

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

谢谢。

use*_*489 5

获得前10个很容易:

/*First 10 obs*/
proc print data = ia.usage(obs = 10); run;
Run Code Online (Sandbox Code Playgroud)

获取最后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;
Run Code Online (Sandbox Code Playgroud)

如果您希望两者都在同一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;
Run Code Online (Sandbox Code Playgroud)

即使对于大型数据集,上述方法也应该非常快,但是它假定您的初始数据集不是视图,因为它依赖于知道数据集中的行数(nob)。如果有视图,则需要通读整个数据集以找出行数,然后再次读取,丢弃除前10行和后10行以外的所有内容。这将慢得多。例如

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;
Run Code Online (Sandbox Code Playgroud)