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

问题描述

我在我的项目中同时使用 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时,新变量没有正确标记。

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

非常感谢您的帮助

解决方法

你们很亲近。下面的代码适用于带有 R 4.0.3data.table_1.13.4 的 Stata 16.1 和 haven_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")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...