Sas where语句和where数据集选项哪个更快

Sas where语句和where数据集选项哪个更快,sas,Sas,问题很简单,哪一个更快 考虑到我们在set语句中使用两个数据集的data step,并且这些数据集中的变量相同 从我听到和读到的情况来看,如果我们使用相同的条件,比如date=“10jan2014”d,那么使用上述语句或两个数据集中的以下数据集选项,结果将完全相同(其中=(date=“10jan2014”d))。因为where是在任何东西到达PDV之前执行的 是这样吗 为了更好地理解这个问题,我创建了以下代码: 假设我们有这两个数据集 data people1; format birth dat

问题很简单,哪一个更快

考虑到我们在set语句中使用两个数据集的data step,并且这些数据集中的变量相同

从我听到和读到的情况来看,如果我们使用相同的条件,比如date=“10jan2014”d,那么使用上述语句或两个数据集中的以下数据集选项,结果将完全相同(其中=(date=“10jan2014”d))。因为where是在任何东西到达PDV之前执行的

是这样吗

为了更好地理解这个问题,我创建了以下代码:

假设我们有这两个数据集

data people1;
format birth date9.;
input name $ birth :date9.;
datalines;
John 18jan1980
Mary 20feb1980
;
run;

data people2;
format birth date9.;
input name $ birth :date9.;
datalines;
Peter 18mar1980
Judas 18jan1980
;
run;
我想用这两个数据集创建一个新的数据集,但只针对出生日期等于1980年1月18日的人。 现在我可以使用where语句或where数据集选项

使用where(数据集选项):

使用where语句:

data everybody2;
set people1
    people2;
where birth="18jan1980"d;
run;
新的数据集现在具有完全相同的输出。但是哪一个更快呢


谢谢。

它们在性能上是相同的。是的,where将只允许将匹配结果加载到PDV

根据文件():

WHERE语句在将观察结果引入数据库之前选择它们 程序数据向量,使它成为一个更高效的编程 技术

上面的引文讨论的是
where
vs
if
语句,但它确实确认了
where
子句不会将数据带入PDV

编辑:多亏了Joe的链接,我将提供一个更好的文档摘录():

可以在数据步骤和SAS过程中使用WHERE表达式, 以及在窗口环境中,SCL程序和作为数据集 选项表达式在观察之前测试条件的地方 被读入PDV。如果条件为真,则观察结果为 读入PDV并进行处理。如果条件为false,则 观察结果不会读入PDV,处理将继续进行 下一个观察结果。这可以在以下情况下节省大量资金: 观察值包含许多变量或非常长的字符变量 (最多32K字节)

作为参考

我实际上检查了cpu时间和I/O使用率的差异

Keep/Drop 
数据步骤中的语句使用set语句,而不是set语句

结果是,如果不使用set语句,CPU时间和I/o使用量比使用set语句的情况要少,特别是在I/o使用量少1/2的情况下

由于在set选项和data step中都出现keep/drop语句,因此在I/O等于上述观察值的情况下,CPU时间进一步缩短


考虑到keep/drop语句也是编译时语句,这可能会有所帮助。

where语句和
where
数据集选项之间的区别在于它们如何生效:前者影响所有没有
where
数据集选项的输入数据集,后者只影响作为选项的数据集(并覆盖
where
语句)


有关更多信息以及概念,请参阅和的文档。特别是,后者在性能方面没有区分两种
,其中
表达式;它只指定了它们如何生效的差异

不知道为什么它会被否决。对我来说,这似乎是一个有价值且可以回答的问题。很可能是因为它出现在新帖子或其他队列中,而不理解SAS的人不理解这个问题。我已经看到了很多。现在,我建议通过两个代码块内示例和一个示例输入数据集来改进这篇文章,精确地显示您所问的它们是否相等。这样就可以了。非常感谢。再想一想,我对PDV部分不是100%肯定。我可能需要进一步研究一下。我昨天读了这篇文章,试图证实这一点,我明白了,但当我被告知我错了,我怀疑自己,我想也许我完全错了。再次感谢。我会在得到代表后立即对此进行投票。
其中
肯定不会带来失败的观察结果。显然,它必须对观察结果进行某种程度的解读,除非有一个
索引(在这种情况下,它可以完全跳过观察!),但它永远不会将其纳入PDV中。@RobertPenridge-看看这个概念(在我的回答中也有链接)-特别是“If vs Where”-关于PDV非常明确,使用几乎完全相同的语言。他询问的是
where
dataset选项与
where
语句,而不是数据步骤中的位置。谢谢,我想我在理解问题时总是有问题。没关系,如果你不确定,可以在评论中提问。太棒了,乔!再次感谢。
Keep/Drop