我们正在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);
造成这种行为的原因是什么?解决这个问题的方法是什么?
答案 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)中存在错误。