Сохранение файла Stata с R при сохранении меток - PullRequest
0 голосов
/ 06 марта 2019

Я обнаружил ошибку в пакете R haven, когда write_dta отбрасывает некоторые метки при чтении в Stata. Я подал ошибку в haven, но мне действительно нужно найти обходной путь, пока ошибка не будет исправлена. Ниже приводится объяснение.

Давайте определим помеченный double только с one tagged NA value.

library(haven)
#> Warning: package 'haven' was built under R version 3.4.4

tst <-
  labelled(
    c(
      1:5,
      tagged_na("d")
    ),
    c(
      "Agree Strongly" = 1,
      "Agree" = 2,
      "Neither agree nor disagree" = 3,
      "Disagree" = 4,
      "Disagree strongly" = 5,
      "No answer" = tagged_na("d")
    )
  )

tst
#> <Labelled double>
#> [1]     1     2     3     4     5 NA(d)
#> 
#> Labels:
#>  value                      label
#>      1             Agree Strongly
#>      2                      Agree
#>      3 Neither agree nor disagree
#>      4                   Disagree
#>      5          Disagree strongly
#>  NA(d)                  No answer

write_dta(data.frame(freehms = tst), "test.dta", version = 13)

Если я загружу это в Stata и наберу tab freehms, все метки будут правильными:

screen shot 2019-02-23 at 4 06 36 pm

Теперь, если я возьму приведенный выше код и добавлю еще одно теговое значение NA, то write_dta по какой-то причине отбросит последний ярлык:

library(haven)
#> Warning: package 'haven' was built under R version 3.4.4

tst <-
  labelled(c(1:5,
             tagged_na('d'),
             ## Only added this
             tagged_na('c')
          ),
        c('Agree Strongly' = 1,
          'Agree' = 2,
          'Neither agree nor disagree' = 3,
          'Disagree' = 4,
          'Disagree strongly' = 5,
          'No answer' = tagged_na('d'),
            ## And this
          'Dont know' = tagged_na('c')
          )
        )

tst
#> <Labelled double>
#> [1]     1     2     3     4     5 NA(d) NA(c)
#> 
#> Labels:
#>  value                      label
#>      1             Agree Strongly
#>      2                      Agree
#>      3 Neither agree nor disagree
#>      4                   Disagree
#>      5          Disagree strongly
#>  NA(d)                  No answer
#>  NA(c)                  Dont know

write_dta(data.frame(freehms = tst), "test.dta", version = 13)

screen shot 2019-02-23 at 4 08 29 pm

Я смотрел на функцию write.dta из foreign, но, похоже, она не поддерживает версии Stata после версии 11. Есть ли какая-то другая работа?

1 Ответ

0 голосов
/ 08 марта 2019

Попробуйте включить отсутствующую опцию, чтобы также визуализировать сводку отсутствующих значений, как показано

tab freehms, mi

...