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.dta
和 sysuseauto3.dta
导入 Stata 时,新变量也没有正确标记.
有谁知道如何解决这个问题?
非常感谢您的帮助
你们非常亲密。下面的代码适用于 Stata 16.1 和 R 4.0.3
以及 data.table_1.13.4
和 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")
我在我的项目中同时使用 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.dta
和 sysuseauto3.dta
导入 Stata 时,新变量也没有正确标记.
有谁知道如何解决这个问题?
非常感谢您的帮助
你们非常亲密。下面的代码适用于 Stata 16.1 和 R 4.0.3
以及 data.table_1.13.4
和 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")