在SPSS中转置数据

时间:2018-01-23 00:46:22

标签: transpose 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。 (作为旁注,我没有其他变量可供使用)。

我是否必须删除重复的案例,还是有其他方法可以实现此目的?我不愿意删除重复项,因为我不知道哪些案例可能很重要(没有其他信息,将重复项标识为主要/最后一项是任意的)。该数据文件也有数百万个案例。

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

任何可以传递的帮助都将非常感谢!

1 个答案:

答案 0 :(得分:1)

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

*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="_".