如何使用 SPSS 命令执行左外连接?
SPSS 命令(例如,MERGE FILES)可以用于在 2 个 SPSS 数据集之间执行左外连接吗?假设连接字段在两个数据集中都不是唯一的。
例子: 让左侧 Dataset1 包含 2 个字段 - ClassNbr 和 Fact1 - 以及这 4 条记录。 。 。
1 A
1 D
2 A
3 B
让 Dataset2 包含 2 个字段 - ClassNbr 和 Fact2 - 以及这 3 条记录。 。 。
1 XX
1 XY
3 ZZ
我想加入 ClassNbr 上的 Dataset1 和 Dataset2。所需的结果是 6 条记录的数据集,如下所示:
1 A XX
1 A XY
1 D XX
1 D XY
2 A (NULL)
3 B ZZ
我更喜欢使用 SPSS 命令的解决方案(而不是 SQL/Python/等)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
据我所知,您不能直接执行此操作。解决此问题的一种可能方法是将数据从长格式“重塑”为宽格式(使用
casestovars
),进行合并,然后将数据重塑回长格式(使用varstocases< /代码>)。下面是一个使用示例(如果代码需要任何说明,请询问)。
这会创建一些您不想要的情况,在这里我刚刚定义了一组命令来识别这些情况并将它们删除(我确信这可以改进以提高效率)。
我确信可以使其更加健壮(可能制作一些自定义 python 函数)。但希望这可以帮助您入门。
As far as I'm aware you can not do this directly. One potential way to do the workaround is to "reshape" the data from long format to wide format (using
casestovars
), do the merge, and then reshape back into long format (usingvarstocases
). Below is a use example (if any clarification is needed on the code just ask).This creates some cases that you do not want, here I have just defined a set of commands to identify those cases and take them out (I'm sure this could be improved to be more efficient).
I'm sure it would be possible to make this more robust (probably making some custom python functions). But hopefully this helps get you started.
如果您安装“STATS CARTPROD”扩展包,则可以执行此操作。通过此扩展,您可以创建笛卡尔积作为创建外连接的中间步骤。
从 SPSS 22 开始,您可以直接从程序菜单“额外”->“扩展包”->“安装并下载扩展包”下载。您还可以从此处手动下载并安装它: https://www.ibm.com/developerworks/community/files/app?lang=en#/file/d0afcd4e-6d5d-4779-84ef-2b68bc81b861
请注意,您必须安装“Python Essentials for SPSS”才能使其正常工作。
我在使用“STATS CARTPROD”扩展时在变量名中使用大写字母时遇到了问题。同样重要的是,“classnbr”在两个数据集中具有不同的变量名称。
现在包括 data2 中没有匹配的情况。
然而,当使用非常大的数据集时,您可能会遇到一些麻烦。在这种情况下,笛卡尔积将是巨大的。
为了稍微减轻这种影响,您可以在生成笛卡尔积之前,从数据集中删除与相应其他数据集没有相应匹配的所有案例。
这是如何做到的:
You can do this if you install the "STATS CARTPROD" extension bundle. With this extension you can create a cartesian product as an intermediate step to create an outer join.
Since SPSS 22 you can download it directly from the progam menu Extra->Extension Bundles->Install and Download extension bundles. You can also download and install it manualy from here: https://www.ibm.com/developerworks/community/files/app?lang=en#/file/d0afcd4e-6d5d-4779-84ef-2b68bc81b861
Note that you must have installed "Python Essentials for SPSS" in order to get it work.
I ran into problems when using capital letters in variable names while using the "STATS CARTPROD" extension. It is also important that "classnbr" has different variable names in both datasets.
Now include the cases which have no match in data2.
However you might get into some trouble when using very big data sets. In that case the cartesian product will be huge.
To alleviate this effect a bit, you can drop all the cases from the data sets wich don't have a corresponding match on the respective other data set, before producing the cartesian product.
This is, how it can be done: