2

我们正在使用在 R 中创建的数据在 Stata 中工作,这些数据已使用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);

是什么导致了这种行为?这个问题有什么解决办法吗?

4

1 回答 1

4

这将drop var.1在Stata中:

drop var?1

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

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

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

temp2 <- read_dta("test_df.dta")

返回数据帧。作为 的替代方案haven,我readstata13过去曾使用过该软件包而没有问题。

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

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

于 2016-09-21T11:41:39.817 回答