使用memisc将stata .dta文件导入R

时间:2013-09-26 12:23:28

标签: r memory stata dta

我有一个700mb .dta Stata文件,包含2800万个观测值和14个列变量

当我尝试使用foreign's read.dta()函数导入R时,我的8GB计算机上的RAM耗尽(页面输出很快就会显示为GB)。

staph <- read.dta("Staph_1999_2010.dta")

我在周围寻找,听起来更有效的替代方法是使用memisc package中的Stata.file()函数。

我打电话的时候:

staph <- Stata.file("Staph_1999_2010.dta")

我得到了段错误:

*** caught segfault ***
address 0xd5d2b920, cause 'memory not mapped'

Traceback:
 1: .Call("dta_read_labels", bf, lbllen, padding)
 2: dta.read.labels(bf, len.lbl, 3)
 3: get.dictionary.dta(dta)
 4: Stata.file("Staph_1999_2010.dta")

我发现Stata.file()的文档难以理解。

(1)我正确使用Stata.file()吗?

(2)Stata.file()是否返回像read.dta()那样的数据帧?

(3)如果我正确使用Stata.file(),我该如何解决我得到的错误?

1 个答案:

答案 0 :(得分:0)

通过访问Stata,可以在Stata中将.dta导出为.csv。

use "file.dta"

export delimited using "file.csv", replace

然后使用read.csvdata.table::fread导入R。

其他想法:

  • 考虑使用Stata Stata的<{li>中的sample对一些数据进行采样
  • Stata compress尝试通过更改类型(而非中)进行无损压缩 确定它会为.csv和R节省很多。)
  • 如果可能的话,通过转换为整数任何日期或字符串ID来紧缩数据。
  • 在抽样或仅保留重要部分之前,使用云实例进行一次导入和初步清理
  • 获取更多内存......