在不读取整个数据集的情况下加载数据集的前几个观测值(Stata 13.1)?
(Stata/MP 13.1) 我正在处理一组需要很长时间才能加载的海量数据集。我目前正在遍历所有数据集,以便每次加载它们 是否可以只告诉Stata加载每个数据集的前5个观测值(或者通常是每个use命令中的第一个在不读取整个数据集的情况下加载数据集的前几个观测值(Stata 13.1)?,stata,Stata,(Stata/MP 13.1) 我正在处理一组需要很长时间才能加载的海量数据集。我目前正在遍历所有数据集,以便每次加载它们 是否可以只告诉Stata加载每个数据集的前5个观测值(或者通常是每个use命令中的第一个n数据集),而不实际加载整个数据集?否则,如果我加载整个数据集,然后只保留前5个观察值,这个过程需要非常长的时间 这里有两个我已经尝试过的解决方法 使用mydata在1/5中使用:我认为这比只加载数据然后将所需的观察结果保留在不同的行中更有效,但我认为它仍然可以读取整个数据集 首先加载所
n
数据集),而不实际加载整个数据集?否则,如果我加载整个数据集,然后只保留前5个观察值,这个过程需要非常长的时间
这里有两个我已经尝试过的解决方法
使用mydata在1/5中使用
:我认为这比只加载数据然后将所需的观察结果保留在不同的行中更有效,但我认为它仍然可以读取整个数据集我想说在中使用
是在Stata中实现这一点的自然方式,但测试表明
你是对的:考虑到数据集的大小,它实际上没有什么“大”区别。例如(有148000000次观察)
导致
. timer list
1: 6.44 / 1 = 6.4400
2: 4.85 / 1 = 4.8480
我发现这很令人惊讶,因为在
中的在其他上下文中似乎真的很有效。
我会联系Stata技术支持(和/或四处搜索,包括www.statalist.com),只是想问一下为什么
中的没有更快
(独立于您找到处理此问题的其他策略)
当然,它值得使用;但对于许多应用程序来说,速度不够快
就工作流程而言,您的第二个选择可能是最好的。在创建较小的数据集时,让计算机保持运行(使用for循环),并在完成后返回常规编码/调试。这实际上取决于你在做什么,所以它可能有效或无效。我想说在
中使用是在Stata中实现这一点的自然方式,但测试表明
你是对的:考虑到数据集的大小,它实际上没有什么“大”区别。例如(有148000000次观察)
导致
. timer list
1: 6.44 / 1 = 6.4400
2: 4.85 / 1 = 4.8480
我发现这很令人惊讶,因为在
中的在其他上下文中似乎真的很有效。
我会联系Stata技术支持(和/或四处搜索,包括www.statalist.com),只是想问一下为什么
中的没有更快
(独立于您找到处理此问题的其他策略)
当然,它值得使用;但对于许多应用程序来说,速度不够快
就工作流程而言,您的第二个选择可能是最好的。在创建较小的数据集时,让计算机保持运行(使用for循环),并在完成后返回常规编码/调试。这实际上取决于你在做什么,所以它可能有效或无效。事实上,我找到了解决方案。如果你跑
use mybigdata if runiform() <= 0.0001
我真的发现了
use in 1/5 using mydata
平均而言,速度更快
一般来说,我的问题只是如何读入Stata数据集的一部分,而不必为了计算目的读入整个数据集,特别是当数据集非常大时
编辑:2015年4月28日(美国东部时间下午2:50)
我总共有20个数据集,每个数据集的观测值在500万到1500万之间。我只需要保留8个变量(每个数据集中有58-65个变量)。下面是前四条“描述,简短”语句的输出
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:
谢谢
文森特实际上,我找到了解决办法。如果你跑
use mybigdata if runiform() <= 0.0001
我真的发现了
use in 1/5 using mydata
平均而言,速度更快
一般来说,我的问题只是如何读入Stata数据集的一部分,而不必为了计算目的读入整个数据集,特别是当数据集非常大时
编辑:2015年4月28日(美国东部时间下午2:50)
我总共有20个数据集,每个数据集的观测值在500万到1500万之间。我只需要保留8个变量(每个数据集中有58-65个变量)。下面是前四条“描述,简短”语句的输出
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:
谢谢
文森特你找到了一个解决方案是件好事,但坦率地说,我不明白为什么会这样。我相信您的代码行会为每个观察值计算一个随机数,然后将其与0.0001
进行比较,并相应地合并观察值。因此,这包括检查每个观测值,即整个数据集。事实上,在我的机器上进行的测试表明,这比
中的花费的时间多一倍。第二点是,你最初的问题没有提到你想要一个随机样本;您可能需要编辑它。第三点是你得到了一个可变数量的观察结果。第四点,使用set seed
重新编程。谢谢你的帮助。事实上,我刚刚编辑了我的答案以回应你的帖子,我意识到我实际上并没有找到解决办法。详情请参阅我的编辑;不过,我非常感谢你的提示和建议!没问题。只是好奇:您的原始数据集有多少观测值和变量?你应该在原来的帖子中展示descripe,short
的输出。您需要保留所有变量吗?你在处理多少文件?当然,我已经在上面的最新编辑中回答了你的问题。你找到了一个解决方案是件好事,但坦率地说,我不明白为什么会这样。我相信您的代码行会为每个观察值计算一个随机数,然后将其与0.0001
进行比较,并相应地合并观察值。因此,这包括检查每个观测值,即整个数据集。事实上,在我的机器上进行的测试表明,这比
中的花费的时间多一倍。第二点是t