在 SPSS 中转置数据

Transposing Data in SPSS

我有一个只有四个变量(列)的 SPSS 数据文件,我正在尝试对其进行转置。原始文件如下所示:

ItemID  StudentID  Score   Weight  
123     a1         1.0       1.0
123     a1         0.0       1.0
123     a2         1.0       1.0
124     a1         0.0       5.0
124     a2         1.0       5.0

我想要得到的是使用 StudentID 作为标识符变量,但也基于 ItemID 创建新变量。所以上面的数据将被转置为:

StudentID    score_123   weight_123   score_124   weight_124
a1           1.0         1.0          0.0         5.0   
a2           0.0         1.0          1.0         5.0

我试过的语法是:

SORT CASES BY StudentID ItemID. 
CASESTOVARS 
/ID=StudentID 
/INDEX=ItemID
/GROUPBY=INDEX 
/VIND ROOT=ind.

但这显然失败了,因为数据文件中有重复的措施; StudentID 和 ItemID 有时会重复。 (作为旁注,我没有其他变量可以使用)。

我是否必须删除重复的案例,或者有其他方法可以实现吗?我不愿意删除重复项,因为我不知道哪些情况可能很重要(没有其他信息,将重复项标识为 primary/last 是任意的)。数据文件也有数百万个案例。

我正在使用安装了 python 的 SPSS stats v. 24。我也可以访问 R,但从未使用过它。

如能提供任何帮助,我们将不胜感激!

您需要创建一个额外的变量来指示重复项,并将其添加到您的 casestovars 命令中的 ID= 列表中:

*this is just to recreate your example data.
data list free/StudentID (a4) ItemID  Score Weight (3f4)  .
begin data
a1  123 1   1
a1  123 0   1
a2  123 1   1
a1  124 0   5
a2  124 1   5
end data.

现在创建 DUP 变量,它将计算 (StudentID X ItemID) 组合的重复项。第一次出现的值为零。

sort cases by StudentID ItemID.
compute dup=0.
if $casenum>1 and  lag(StudentID)= StudentID and lag(ItemID)=ItemID dup=lag(dup)+1.

现在,将 DUP 添加到重组命令将使您到达想要的位置:

sort cases by StudentID dup ItemID.
CASESTOVARS /ID=StudentID dup /INDEX=ItemID /GROUPBY=INDEX/sep="_".