SAS Proc SQL如何仅对大表的N行执行过程

标签 sas proc-sql

我需要在一个非常大的表的一小部分(例如 100 行)上执行一个过程,只是为了测试语法和输出。我已经运行以下代码一段时间并且它仍在运行。我想知道它是否在做其他事情。或者说正确的做法是什么?

Proc sql  inobs = 100;
select 
   Var1, 
   sum(Var2) as VarSum
from BigTable
Group by
   Var1;
Quit;

最佳答案

您所做的很好(将从任何表中获取的最大记录数限制为 100),但还有一些替代方案。要完全避免任何执行,请使用 noexec 选项:

proc sql noexec;
    select * from sashelp.class;
quit;

要限制特定数据集的 obs,您可以使用数据集 obs 选项,例如

proc sql;
    select * from sashelp.class(obs = 5);
quit;

要更好地了解 SAS 在索引使用和查询规划方面在幕后所做的事情,请使用 _method 和 _tree 选项(也可以选择与上面的 inobs 结合使用):

proc sql _method _tree inobs = 5;
    create table test as select * from sashelp.class
    group by sex
    having age = max(age);
quit;

这些会产生非常详细的输出,这超出了本答案的范围,无法完全解释,但如果您愿意,您可以轻松搜索更多详细信息。

有关在 SAS 中调试 SQL 的更多详细信息,请参阅

http://support.sas.com/documentation/cdl/en/sqlproc/62086/HTML/default/viewer.htm#a001360938.htm

关于SAS Proc SQL如何仅对大表的N行执行过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878007/

相关文章:

sas - 优化SAS中的proc sql语句

sas - SAS Proc SQL 中的列表聚合和组串联

SAS 替换所有列中的字符

sas - 如何为 “stacked”数据集中的每个唯一观测值找到变量的最大值

sas - 如何在不使用原始名称的情况下重命名变量?

sas - 测试 SAS 宏中的空参数

sas - 如何计算SAS Proc Sql中两个变量的串联/交叉的不同?

sas - 基于其他几个列创建半累积列。 SAS

sas - 按特定条件替换 SAS 中的缺失值

sas - SAS 宏引用如何与格式文字交互?