如何在 SPSS 中执行多对多或(至少)外部联接

How to perform a many-to-many or (at least) a outer-join in SPSS

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

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

示例:

数据集 A:

ID VAL1
1 A
1 B
2 D
3 K
4 A

数据集 B:

ID VAL2
1 g
2 k
4 a
5 c
5 d
5 a
2 x

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

ID VAL1 VAL2
1 A g
1 B g
2 D k
3 K NA
4 A a
2 D x

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

ID VAL1 VAL2
1 A g
2 D k
3 K NA
4 A a
5 NA c
5 NA d
5 NA a
2 D x

我得到的结果(最差的解决方案):

ID VAL1 VAL2
1 A g
2 D k
4 A a
5 NA c
5 NA d
5 NA a
2 D x

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

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

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.