【问题标题】:Export variable label for SPSS with haven为带有避风港的 SPSS 导出变量标签
【发布时间】:2017-10-26 12:15:36
【问题描述】:

我想导出我在R 中工作的数据集,供我的同事在SPSS 中使用。当我导出数据集时,我想包含变量标签(即下面的列),我询问描述变量级别的值标签:

haven 中是否有允许我设置此变量标签的选项?

我搜索了文档,发现只有设置值标签的函数。我注意到havenReadStat 的包装器,它似乎支持变量标签。在ReadStat documentation 中的变量标签(Citizenship of respondent)可以在下面的块中看到:

{
    "type": "SPSS",
    "variables": [
        {
            "type": "NUMERIC",
            "name": "citizenship",
            "label": "Citizenship of respondent",
            "categories": [
                {
                    "code": 1,
                    "label": "Afghanistan"
                },
...

不幸的是,我对C++ 的理解不够成熟,无法理解haven 的工作原理,因此非常欢迎提出任何建议。

找到了一种解决方法,它涉及通过使用属性手动设置变量标签。考虑下面的示例,使用来自UK Data Service 的教学数据集:

# install.packages("tidyverse")
library("tidyverse")

tmp    = tempfile(fileext = ".zip")
tmpdir = tempdir()

download.file(
  "http://ws.ukdataservice.ac.uk/REST/Download/Download/DSO/7912spss_e5b795672124e5b409e4a53c1a06fb9e.zip",
  destfile = tmp
)
unzip(tmp, exdir = tmpdir)

tmpdir = paste0(tmpdir, "/UKDA-7912-spss/spss/spss19/")
file   = paste0(tmpdir, list.files(tmpdir))

dat = haven::read_sav(file)

str(dat)

# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 22428 obs. of  14 variables:
#  $ CASENEW : atomic  1 2 3 5 5 6 6 7 8 9 ...
#   ..- attr(*, "label")= chr "New random ID number"
#   ..- attr(*, "format.spss")= chr "F8.2"
#   ..- attr(*, "display_width")= int 10
# ...

因此,我可以使用以下方法更改变量标签:

attr(dat$CASENEW, "label") = "Foo"
attr(dat$CASENEW, "label")
# "Foo"

当我写入一个新的.sav 文件时,它确实按SPSS 中的预期打开。我的问题是,haven 中是否有本地方法可以做到这一点?

【问题讨论】:

    标签: r spss r-haven


    【解决方案1】:

    哈德利的回答:

    只需设置属性— Hadley Wickham (@hadleywickham) October 27, 2017


    所以你有它:规范的haven 答案只是设置属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2018-07-26
      • 1970-01-01
      • 2015-11-07
      • 2016-05-08
      相关资源
      最近更新 更多