首页 > 解决方案 > 如何在 SPSS 中执行多对多或(至少)外连接

问题描述

通常我使用 [R] 进行数据分析,但现在我必须使用 SPSS。我原以为这样数据操作可能会变得更加困难,但是在我第一天之后,我有点投降了:D,我真的很感激一些帮助......我的问题如下:

你知道我的问题是否有(某种)简单的解决方案?

例子:

数据集 A:

ID VAL1
1 一个
1
2 D
3 ķ
4 一个

数据集 B:

ID VAL2
1 G
2 ķ
4 一个
5 C
5 d
5 一个
2 X

预期结果(最佳解决方案):

ID VAL1 VAL2
1 一个 G
1 G
2 D ķ
3 ķ 不适用
4 一个 一个
2 D X

预期结果(第二好的解决方案):

ID VAL1 VAL2
1 一个 G
2 D ķ
3 ķ 不适用
4 一个 一个
5 不适用 C
5 不适用 d
5 不适用 一个
2 D X

我得到什么(最坏的解决方案):

ID VAL1 VAL2
1 一个 G
2 D ķ
4 一个 一个
5 不适用 C
5 不适用 d
5 不适用 一个
2 D X

标签: many-to-manyspssouter-join

解决方案


从您的示例看来,您需要的是一个完整的多对多连接,基于数据集 A 中存在的 ID。您可以通过创建两个数据集的完整笛卡尔积来获得此结果,使用数据集 A 作为第一个 \left数据集。
以下语法假定您已安装 STATS CARTPROD 扩展命令。如果你不这样做,你可以在这里看到关于安装它的信息。

首先,我将重新创建您的示例以演示:

dataset close all.
data list list/id1  vl1  (2F3) .
begin data 
1   232
1   433
2   456
3   246
4   468
end data.
dataset name aaa.

data list list/id2  vl2  (2F3) .
begin data 
1   111
2   222
4   333
5   444
5   555
5   666
2   777
3   888
end data.
dataset name bbb.

现在实际的工作相当简单:

DATASET ACTIVATE aaa.
STATS CARTPROD VAR1=id1 vl1 INPUT2=bbb VAR2=id2 vl2
/SAVE OUTFILE="C:\somepath\yourcartesianproduct.sav".

* The new dataset now contains all possible combinations of rows in the two datasets.
* we will select only the relevant combinations, where the two ID's match.
select if id1=id2.
exe.

推荐阅读