【问题标题】:Reading stata files with large variables in stata and R在 stata 和 R 中读取具有大变量的 stata 文件
【发布时间】:2013-01-18 13:49:41
【问题描述】:

我正在尝试读取具有超过 5000 个变量的 stataR 中大小为 320 MB 的 stata 文件。我首先使用stata 读取文件,但它可以读取的最大变量是5000。所以,我不能使用stata 读取stata 文件。我的问题是:

  1. 有没有办法使用stata 读取stata 文件,首先要求只保留变量(我知道变量),这样变量的数量就少于5000?

  2. 有没有办法让我在R 中读取这个stata 文件?我使用的是 32 位(Vista),R 给了我错误。 "Error: cannot allocate vector of size 21k.Kb".

我使用以下 R 代码读取文件:

  #The stata file is in the webpage: http://www.federalreserve.gov/econresdata/scf/scf_2010survey.htm#STATADAT
#1. set mem 400m
set maxvar 4000
use p10i6.dta, clear
keep x8166 x8167 x8168 x8163 x8164 x2422 x2506 x2606 x2623 x604 x614 x623 x716 x507  x513 x526 x1706 x1705 x1806 x1805 x1906 x1905 x2002 x2012 x1409 x1509 x1609 x1415 x1515 x1615 x1417 x1517 x1617 x1619 x1621 x3124 x3224 x3324 x3129 x3229 x3329 x3335 x3408 x3412 x3416 x3420 x3424 x3428 x4020 x4024 x4028 x4018 x4022 x4026 x4030 x4022 x4026 x4030 x4018 x3507 x3511 x3515 x3519 x3523 x3527 x3506 x3510 x3514 x3518 x3522 x3526 x3529 x3804 x3807 x3810 x3813 x3816 x3818 x3930 x3721 x3821 x3823 x3825 x3827 x3829 x3822 x3824 x3826 x3828 x3830 
save p10i6.dta, clear     


#2. 
        library (foreign)
        year<-2010
        yr <- substr( year , 3 , 4 )
        p10i6.dta<-read.dta(paste0( "p" , yr , "i6.dta" ))
        saveRDS(p10i6.dta,file=paste0( "p" , yr , "i6.rda" ))
        p10i6.rda<-readRDS(paste0( "p" , yr , "i6.rda" ))

【问题讨论】:

  • 请提供一个可重现的例子、数据和代码来读取文件。
  • 您可以使用跳过选项。 stata.com/support/faqs/data-management/…
  • @PaulHiemstra:我已经用代码更新了问题。
  • 尝试use x8166 x8167 ... using p10i6, clear 然后save new_file
  • @AnthonyDamico:infile 用于 ASCII。我需要有关 stata 文件的帮助。

标签: r memory stata


【解决方案1】:

要将数据读入 R,可能有一种方法可以使用 memiscStata.file 函数。无需读取所有变量,而是使用子集选择您需要的变量。例如:

require(memisc)

?Stata.file
d1 <- subset(
        Stata.file(paste0( "p" , yr , "i6.dta" )),
        select=c(x8166, x2606, x2623, x604)
    )

【讨论】:

    【解决方案2】:

    我想你有一个 StataIC 或旧版本的 Stata。当前的 Stata/SE 和 Stata/MP 可以读取多达 32.000 多个变量。因此,第一个合乎逻辑的步骤是将您的 Stata 升级到可以处理更大数据集的版本。如果问题不是由可用内存不足引起的,那就是......为此,Stata 的错误消息会有所帮助。

    正如 Richard Herron 在 cmets 中所说的,您应该能够使用以下方法读取数据子集:

    use X8166 X8167 ... using p10i6, clear
    

    请记住,Stata 区分大小写。根据您链接到的网站,这些变量称为X... 而不是x...

    如果您想使用 foreign 包将数据加载到 R 中,请确保将 R 的可用内存设置为 R 上可能的最大值。在 Vista 上,这将是大约 3.5Gb:

    memory.limit(3500)
    

    如果这没有帮助,您的数据集将会太大,您可以使用来自 Stata 或 R 的任何 ASCII 方法来加载网站上提供的 ASCII 数据。

    【讨论】:

    • 谢谢。是的,我没有意识到 x 是上限。我的内存是 2GB。我想我需要移动到 64 位才能使用 R
    • 我猜你尤其需要换一台新电脑。对于大型数据集的体面工作,您确实需要一个 64 位系统和至少 6Gb 的 RAM。我目前使用 8Gb,这仍然限制了我对某些数据集的使用。当然,这取决于您需要它的频率,但正如 Uwe Liggies 所说:思考很痛苦,RAM 很便宜。
    • 在 R 中加载大型内容时要小心,很容易让软件最大化磁盘空间。我发现在 Stata 中加载大型数据集更容易、更安全。不过,R 可以很好地使用 SQL。
    猜你喜欢
    • 2014-07-16
    • 2016-06-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2019-02-10
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多