Метки, примененные в R, не сохраняются при записи в виде файла Stata

#r #label #stata #expss

Вопрос:

Я добавил метки переменных (и значений для некоторых) в R, используя функцию apply_labels из ‘expss’. Когда я хочу сохранить данные с помощью «write.dta» и открыть их в Stata (или повторно открыть недавно сохраненные данные в R), метки не отображаются.

Я подозреваю, что это как-то связано с этой строкой в документации write.dta:

Если атрибут «var.labels» содержит вектор символов со строковой меткой для каждой переменной, то это записывается как метки переменных. В противном случае имена переменных повторяются в виде меток переменных.

Потому что это именно то, что происходит (имена переменных повторяются как метки переменных). При проверке attr(df$variable, "label") перед попыткой записи данных с помощью write.dta появляются метки.

Я получаю предупреждающее сообщение:

«В write.dta […] сокращенные имена переменных».

Не уверен, имеет ли это отношение к проблеме.

Воспроизводимый пример кода, используемого для добавления переменной, меток и записи данных:

 library(expss) library(dplyr) library(foreign)  df lt;- data.frame(country = rep(c("NL", "DE", "FR", "AT"), 2),  year = rep(c(2012,2014), 4),  LS_medianpovgap60_disp_wa = c(0.448257605781815, 0.468249874784546, 0.473270740126805, 0.483814288478694, 0.486781335455043, 0.49246341926957, 0.51121872756711, 0.556027028656306))  df lt;- apply_labels(df,  country = "Country",  year = "Year",  LS_medianpovgap60_disp_wa = "Median shortfall from the poverty thresholds using 60% of the median income, disposable income only households with working age (LIS and SILC average)")  write.dta(df, "df_labelled.dta")  

Комментарии:

1. Не могли бы вы предоставить нам воспроизводимый пример кода, используемого для добавления переменной, меток и записи данных?

Ответ №1:

Для версии Stata gt; 7 gt; write.dta пытается сократить метку переменной, если атрибуты метки длиннее 31 символа.

Вы можете получить лучший результат, используя haven пакет для написания и чтения вашего кода.

 haven::write_dta(df, "df_labelled.dta") temp lt;- haven::read_dta("df_labelled.dta") temp  

Редактировать В комментариях ниже указывается, что Stata накладывает ограничение на длину переменной метки (80 символов). Таким образом, все обходные пути на основе R будут подчиняться этому ограничению.

Комментарии:

1. Спасибо. Использование haven для записи данных работает (лучше). При записи данных с использованием иностранных сокращений имя переменной автоматически сокращается, но метки не сохраняются. Запись данных с помощью haven приводит к ошибке при слишком длинных именах переменных, но после исправления их вручную данные сохраняются, при этом имена меток сокращаются на 80 символов.

2. К вашему сведению, 80 символов-это ограничение, налагаемое Stata. См help label .: «переменная метки прикрепляет метку (до 80 символов) к переменной. Если метка не указана, любая существующая метка переменной удаляется».