Reading haven在Stata中创建了dta文件 - 如何处理变量名中的点?

时间:2016-09-21 10:45:08

标签: r stata r-haven dta

我们正在Stata中使用R创建的数据,这些数据已使用haven包导出。我们偶然发现了名称中带有点的变量的问题。要复制问题,可以使用一些最小的R代码:

library("haven")
var.1 <- c(1,2,3)
var_2 <- c(1,2,3)
test_df <- employ.data <- data.frame(var.1, var_2)
str(test_df)
write_dta(test_df, "D:/test_df.dta")

现在,在Stata,当我这样做时:

use "D:\test_df.dta"
d

第一个问题 - 我得到一个空的数据集。第二个问题 - 我们得到带有点的变量名 - 在Stata中应该是非法的。因此任何命令都直接使用变量名称,如

drop var.1

返回错误:

factor variables and time-series operators not allowed
r(101);

造成这种行为的原因是什么?解决这个问题的方法是什么?

1 个答案:

答案 0 :(得分:4)

这将是Stata中的drop var.1

drop var?1

此处(如在Excel中),?用作单个字符的通配符。 (正则表达式等同于.

不幸的是,如果它存在,也会drop var_1

使用haven编写.dta文件时,我不确定缺少的值。我能够在Stata 14.1和haven 0.2.0中复制此结果。 但是,使用read_dta中的haven函数,

temp2 <- read_dta("test_df.dta")

返回data.frame。作为haven的替代方案,我过去使用了readstata13包,没有任何问题。

library(readstata13)
save.dta13(test_df, "testdf.dta")

虽然此代码具有相同的变量名称问题,但它在读入Stata 14.1时提供了包含正确值的.dta文件。有一个save.dta13的convert.underscore参数,用于删除Stata变量名中的无效字符。我确认它在这个示例中适用于版本0.8.5的readstata13,但在某些早期版本(包括版本0.8.2)中存在错误。