繁体   English   中英

只读取R中Stata .DTA文件的一部分

[英]Reading in only part of a Stata .DTA file in R

如果在某处有一个简单的答案,我会提前道歉。 这似乎是那样的事情,但我似乎无法通过搜索SO或谷歌搜索在帮助文件中找到它。

我现在正在使用几个GB的数据集。 它足以适应我有权访问的其中一个集群节点的内存,但需要花费相当多的时间来加载。 对于使用此数据的许多调试/编程活动,我不需要加载整个文件,只需要在前几千个观察点上有一个数据集来测试代码。 我当然可以读取整个文件和子集,但我想知道是否有办法告诉read.dta()只读取前N行? 这当然要快得多。

我也可以使用像.csv这样的正确格式,然后使用read.csv()的nrows参数,但后来我在Stata数据集中丢失了因子标签(并且必须从别人的数据库中重新创建相当多的GB数据)代码正在为这个项目提供支持。因此,首选.dta文件的直接解决方案。

塔塔的二进制文件被写入一行一行地,所以你可以改变R_LoadStataData在功能上stataread.c限制读取的行数。但是,如果你是因为他们在书面不需要值标签这只会工作文件的结尾,并要求您读取整个文件 - 这不会节省任何时间。

这将是一个困难的,因为do_readStata下的do_readStata函数是编译代码,只能接收整个文件。 我相信一般二进制文件很难逐行读取,而.dta是二进制格式。 此外,R的本机二进制格式不允许在读入时从数据集中选择多行。

在我看来,您可以更好地从Stata中创建一组测试文件(例如,Stata代码sample 1000, count将为您提供来自已加载数据集的1000个观测值的样本),并使用它们。 如果您无法访问Stata,项目中的其他人应该能够为您执行此操作。

跟进Joris Meys:对于这种事情,我使用“测试”数据集和“真实”数据集,每个数据集都在不同的文件夹中。 我在.do文件的顶部(使用下面的if / then语句)保留一个宏,以(1)获取数据样本,(2)将输入/输出指向包含其中一个或另一个的右侧文件夹。 我可能会为每个项目做不同的事情,但是这样的事情:

数据创建.do文件

blah blah blah 
save                  using data/myfile.dta
save if uniform()<.05 using test_data/myfile.dta   // or bsample, then save for panel data

分析.do文件

local test = "test_"   
// when you're ready to run the file with all the data, use the following 
// local test = ""

use `test'data/myfile.dta
blah blah blah 
outreg2 ... using `test'output/mytable.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM