加载前几个数据集的观察而不读取整个数据集(Stata 13.1)?

时间:2015-04-28 13:40:40

标签: stata

(Stata / MP 13.1)

我正在使用一组大量数据集,这些数据集需要很长时间才能加载。我目前正在循环遍历所有数据集以便每次加载它们。

是否可以告诉Stata加载每个数据集的前5个观察值(或者通常是每个使用命令中的第一个n数据集)而不必实际加载整个数据集?否则,如果我要加载整个数据集然后只保留前5个观察结果,则该过程需要很长时间。

以下是我已经尝试过的两种解决方法

  1. use in 1/5 using mydata:我认为这比仅加载数据然后将所需的观察结果保存在不同的行中更有效,但我认为它仍会读取整个数据集。
  2. 首先加载所有数据集,然后将所有数据集的副本保存为前5个观察结果,然后只使用副本:这很麻烦,因为我有很多不同的文件;我更倾向于直接阅读前5个观察结果而无需借助此方法而无需阅读整个数据集。

2 个答案:

答案 0 :(得分:3)

我会说使用in是在Stata中做这件事的自然方式,但测试显示 你是对的:考虑到数据集的大小,它确实没有“大”差异。一个例子是(有148,000,000个观测值)

sysuse auto, clear
expand 2000000

tempfile bigfile
save "`bigfile'", replace

clear
timer on 1
use "`bigfile'"
timer off 1

clear
timer on 2
use "`bigfile'" in 1/5
timer off 2

timer list
timer clear

导致

. timer list
   1:      6.44 /        1 =       6.4400
   2:      4.85 /        1 =       4.8480

我发现令人惊讶,因为in在其他情况下似乎非常有效。 我会联系Stata Tech支持(和/或搜索,包括www.statalist.com),只是为了问为什么in不是更快 (独立于你找到其他策略来处理这个问题)。

当然值得使用;但对于许多应用来说还不够快。

就工作流而言,您的第二个选择可能是最好的选择。在创建较小数据集时让计算机保持运行(使用 for 循环),并在完成后返回常规编码/调试。这实际上取决于你正在做什么,所以它可能有效。

答案 1 :(得分:1)

实际上,我找到了解决方案。如果你运行

use mybigdata if runiform() <= 0.0001

Stata将随机抽取0.0001的数据集而不读取整个数据集。

谢谢!

文森特

编辑:2015年4月28日(美国东部时间下午1:58) 我很抱歉。事实证明,上面实际上是解决了原始问题。似乎在我的系统上使用速度的变化很大

use mybigdata if runiform() <= 0.0001

每次我跑的时候。当我发布以上是一个解决方案时,我认为当我运行代码时,它恰好是一个更快的实例。但是,正如我现在反复运行

use mybigdata if runiform() <= 0.0001

VS。

use in 1/5 using mydata

我实际上是找到了

use in 1/5 using mydata

平均更快。

一般来说,我的问题是如何读取Stata数据集的一部分,而不必为了计算目的而读取整个数据集,尤其是当数据集非常大时。

编辑:2015年4月28日(美国东部时间下午2:50) 总共,我有20个数据集,每个数据集的观察量在5到1,500万之间。我只需要保留8个变量(每个数据集中有58-65个变量)。以下是前四个&#34;描述,短&#34;的输出。语句。

2004 action1

Contains data from 2004action1.dta
  obs:    15,039,576                          
 vars:            64                          30 Oct 2014 17:09
size: 2,827,440,288                          
Sorted by: 

2004 action2578

Contains data from 2004action2578.dta
  obs:    13,449,087                          
 vars:            59                          30 Oct 2014 17:16
size: 2,098,057,572                          
Sorted by:  

2005 action1

Contains data from 2005action1.dta
  obs:    15,638,296                          
 vars:            65                          30 Oct 2014 16:47
size: 3,143,297,496                          
Sorted by:  

2005 action2578

Contains data from 2005action2578.dta
  obs:    14,951,428                          
 vars:            59                          30 Oct 2014 17:03
size: 2,362,325,624                          
Sorted by:   

谢谢!

文森特