我们在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);
是什么导致了这种行为?这个问题有什么解决方案吗?
发布于 2016-09-21 11:41:40
这将在Stata中执行drop var.1
:
drop var?1
在这里(和在Excel中一样),?
用作单个字符的通配符。(等同于.
的正则表达式)
不幸的是,这也将drop var_1
,如果它存在的话。
在使用haven
编写.dta文件时,我不确定是否有缺失值。我能够在Stata 14.1和haven
0.2.0中复制这个结果。但是,使用来自haven
的read_dta
函数,
temp2 <- read_dta("test_df.dta")
返回data.frame。作为haven
的替代方案,我过去使用过readstata13
包,没有出现任何问题。
library(readstata13)
save.dta13(test_df, "testdf.dta")
虽然这段代码有相同的变量名问题,但它提供了一个.dta文件,该文件在读入Stata14.1时包含正确的值。save.dta13
有一个convert.underscore参数,用于删除Stata变量名称中的无效字符。我验证了在这个0.8.5版本的readstata13
示例中,它可以正常工作,但在包括0.8.2版本在内的一些早期版本中有一个bug。
https://stackoverflow.com/questions/39614359
复制相似问题