R:使用 `haven` 将标签添加到 .dta 文件

R: add labels to .dta files using `haven`

我在我的项目中同时使用 Stata 和 R,我想在 R 中标记变量,以便 Stata 正确读取它们。

采用以下数据库,在 Stata 中正确标记了 12 个变量

* these are Stata commands
sysuse auto
save sysuseauto.dta

我可以将数据导入R

# import
library(haven)
library(data.table)
auto<-read_dta("sysuseauto.dta")

请注意,R 保留了 Stata 中指定的所有变量标签。 我想在 R

中创建一个新变量
# Creating a new variable
sapply(auto,class)
auto<-setDT(auto)[,n_cars_by_foreign:=.N,by=.(foreign)]

并标记它,这样当我在 Stata 中打开新数据时,它就会被正确标记。

但是,我无法标记变量以便 Stata 读取它。 我尝试了以下

attr(auto, "haven_labelled") <- c(n_cars_by_foreign = "Number of cars by foreign")
write_dta(auto, "sysuseauto2.dta")
# and 
attr(auto, "var.labels") <- c(n_cars_by_foreign = "Number of cars by foreign")
write_dta(auto, "sysuseauto3.dta")

但是,不仅标签没有出现使用 View(data) 的变量名,而且当我将 sysuseauto2.dtasysuseauto3.dta 导入 Stata 时,新变量也没有正确标记.

有谁知道如何解决这个问题?

非常感谢您的帮助

你们非常亲密。下面的代码适用于 Stata 16.1 和 R 4.0.3 以及 data.table_1.13.4haven_2.3.1.

唯一的区别是您将标签分配给变量的方式。代替 attr(auto, "haven_labelled") <- c(n_cars_by_foreign = "You New Label") 应该是 attr(auto$n_cars_by_foreign, "label") <- "You New Label"

library(haven)
library(data.table)
# Get data from Stata (16.1)
auto<-read_dta("sysuseauto.dta")
# Gerenating new variable
auto <- setDT(auto)[,n_cars_by_foreign:=.N,by=.(foreign)]
# Extract the value label of "n_cars_by_foreign" (which is NULL)
attr(auto$n_cars_by_foreign, "label")
## NULL

# Adding the label value
attr(auto$n_cars_by_foreign, "label") <- "Number of cars by foreign"
#Check that value label variable is in place 
attr(auto$n_cars_by_foreign, "label")
## [1] "Number of cars by foreign"

## Save the data
write_dta(auto, "sysuseauto2.dta")