4

我正在分析 PISA 2015 中的学生水平数据。数据可在此处以 SPSS 格式获得

我可以使用 Haven 包中的 read_sav 函数将数据加载到 R 中。我需要能够编辑 R 中的数据,然后以 SPSS 格式保存/导出数据,其中包含在 SPSS 下载中的原始值标签完好无损。我使用的代码是:

library(haven)
student<-read_sav("CY6_MS_CMB_STU_QQQ.sav",user_na = T)
student2<-data.frame(student)
#some edits to data
write_sav(student2,"testdata1.sav")

当我的同事(在 SPSS 中工作)尝试打开“testdata1.sav”时,值标签丢失。我已经阅读了 Haven 文档,但似乎找不到解决方案。我也在外部包中尝试了 read/write.spss,但在数据集中加载时出现问题。

我正在使用 R 版本 3.4.0 和最新版本的 Haven。

有谁知道是否有解决方案?我会非常感谢你的帮助。如果您需要任何其他信息来回答这个问题,请告诉我。

4

2 回答 2

1
library(foreign)
df <- read.spss("spss_file.sav", to.data.frame = TRUE)

这可能不是您正在寻找的,因为它使用标签作为数据。因此,如果您有一个 SPSS 文件,其中“男性”为 0,“女性”为 1,那么您将拥有一个值均为男性和女性的 df。它让你更进一步,但也许不是整个解决方案。我正在解决同样的问题,并会让你知道我还发现了什么。

于 2018-10-17T17:01:31.117 回答
1
library ("sjlabelled")
student <- sjlabelled::read_spss("CY6_MS_CMB_STU_QQQ.sav")
student2 <-student
write_spss(student2,"testdata1.sav")

我没有尝试并希望它有效。sjlabelled 包非常适合使用非 ascii 字符作为德语变音符号。

但请记住,R 将标签保存为属性。在进行一些数据转换(例如子集数据)时,这些属性会丢失。当在 R 中丢失时,它们当然不会出现在 SPSS 中。sjlabelled::copy_labels 函数在这些情况下很有帮助:

student2 <- copy_labels(student2, student) #after data transformations and before export to spss
于 2019-07-30T15:15:41.020 回答