我试图找到一种仅打印SAS数据集的前10个和后10个观测值的方法。有办法吗?
我尝试过,proc print data = ia.usage; where Obs < 10 & Obs > 80;run;
但是该命令仍然会打印出所有90个观测值。关于如何轻松做到这一点的任何想法?
谢谢。
获得前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)