微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 SPSS 中执行多对多或至少外连接

如何解决如何在 SPSS 中执行多对多或至少外连接

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

  • 我有两个数据集,它们有一个 ID 号。两个数据集都没有唯一的 ID(在一个数据集中,应该有唯一的 ID,有一种重复的行)
  • 一个完美的世界中,我想保留这个重复的行并简单地执行多对多连接。但我接受了,我可能必须删除这个“坏”行(在数据集 A 中)并执行 1:many-join(将数据集 B 连接到包含唯一 ID 的数据集 A)。
  • 如果我运行连接(并接受似乎不可能运行 1:many,但只能运行 many:1-join),我会遇到问题,我会丢失 ID。如果我将数据集 A 连接到数据集 B,我将丢失所有不属于数据集 B 的案例。但我真的希望在完全连接或其他内容中同时拥有两个 ID。

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

示例:

数据集 A:

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

数据集 B:

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

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

ID VAL1 VAL2
1 A g
1 B g
2 D k
3 K 不适用
4 A
2 D x

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

ID VAL1 VAL2
1 A g
2 D k
3 K 不适用
4 A
5 不适用 c
5 不适用 d
5 不适用
2 D x

我得到了什么(最糟糕的解决方案):

ID VAL1 VAL2
1 A g
2 D k
4 A
5 不适用 c
5 不适用 d
5 不适用
2 D x

解决方法

从你的例子来看,你需要的是一个完整的多对多连接,基于数据集 A 中存在的 ID。你可以通过创建两个数据集的完整笛卡尔积来获得它,使用数据集 A 作为第一个\左数据集。
以下语法假定您已安装 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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。