基本上,这是SAS数据步骤和SQL处理它们各自的联接/合并方式不同的结果。
SQL为每种可能的键组合创建一个单独的记录。这是笛卡尔乘积(在关键级别)。
但是,SAS数据步骤的合并过程非常不同。
MERGE实际上只是的一种特殊情况
SET。它仍然迭代地处理行,一次一次-
它永远不会返回,并且一次PDV中的任何数据集都不会有多于一行的行。因此,它无法在其正常过程中创建笛卡尔乘积-
这将需要随机访问,而SAS数据步骤通常无法进行这种访问。
它能做什么:
For each unique BY value Take the next record from the left side dataset, if one exists with that BY value Take the next record from the right side dataset, if one exists with that BY value Output a rowContinue until both datasets are exhausted for that BY value
使用BY值可在任一侧(或同时在两侧)每个值产生唯一记录,它实际上与SQL相同。但是,如果BY值在两边都产生重复,那么您将得到:并排合并,如果一个在另一个之前用完,则来自较短数据集的最后一行的值(对于值)或多或少地抄下来。(它们实际上是保留的,因此如果您用更改覆盖它们,它们将不会在较长数据集中的新记录上重置)。
因此,如果像示例中那样
left有3条记录,并且
right有4条键值记录
a,那么您将从以下记录中获取数据(假设之后不要更改数据):
left right1 12 23 33 4



