在不读取整个数据集的情况下加载数据集的前几个观测值(Stata 13.1)?

在不读取整个数据集的情况下加载数据集的前几个观测值(Stata 13.1)?,stata,Stata,(Stata/MP 13.1) 我正在处理一组需要很长时间才能加载的海量数据集。我目前正在遍历所有数据集,以便每次加载它们 是否可以只告诉Stata加载每个数据集的前5个观测值(或者通常是每个use命令中的第一个n数据集),而不实际加载整个数据集?否则,如果我加载整个数据集,然后只保留前5个观察值,这个过程需要非常长的时间 这里有两个我已经尝试过的解决方法 使用mydata在1/5中使用:我认为这比只加载数据然后将所需的观察结果保留在不同的行中更有效,但我认为它仍然可以读取整个数据集 首先加载所

(Stata/MP 13.1)

我正在处理一组需要很长时间才能加载的海量数据集。我目前正在遍历所有数据集,以便每次加载它们

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

这里有两个我已经尝试过的解决方法

  • 使用mydata在1/5中使用
    :我认为这比只加载数据然后将所需的观察结果保留在不同的行中更有效,但我认为它仍然可以读取整个数据集
  • 首先加载所有数据集,然后将所有数据集的副本保存为前5个观测值,然后使用副本:这很麻烦,因为我有很多不同的文件;我更喜欢直接读取前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