哪个更快,哪里声明或哪里有数据集选项

Ram*_*amB 5 sas

问题非常简单,哪一个更快?

考虑到我们在set语句中使用带有两个数据集的数据步骤,并且数据集中包含相同的变量.

从我听过和读过的内容来看,如果我们使用相同的条件对它们进行子集,比如说date ="10jan2014"d,那么使用上面的语句或两个数据集中的以下数据集选项(其中=(date)结果将完全相同= "10jan2014" d)).因为在任何事物进入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;
Run Code Online (Sandbox Code Playgroud)

我想用这两个创建一个新数据集,但仅适用于出生日期等于18jan1980的人.现在我可以使用where语句或where数据集选项.

使用where(数据集选项):

data everybody1;
set people1 (where=(birth="18jan1980"d))
    people2 (where=(birth="18jan1980"d));
run;
Run Code Online (Sandbox Code Playgroud)

使用where语句:

data everybody2;
set people1
    people2;
where birth="18jan1980"d;
run;
Run Code Online (Sandbox Code Playgroud)

现在,新数据集具有完全相同的输出.但是哪一个更快?

谢谢.

Rob*_*dge 3

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

根据文档(http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000202951.htm):

WHERE 语句在将观察结果带入程序数据向量之前选择观察结果,使其成为一种更高效的编程技术。

上面的引用谈论的是wherevsif语句,但它确实确认了where子句不会将数据带入 PDV。

编辑:感谢 Joe 的链接,我将提供文档中更好的摘录(http://support.sas.com/documentation/cdl/en/lrcon/67885/HTML/default/viewer.htm# p04fy20d8il3nfn1ssywe4f25k27.htm):

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