【问题标题】:Keep data in memory when importing file Stata导入文件Stata时将数据保存在内存中
【发布时间】:2018-01-26 09:49:13
【问题描述】:

我正在尝试编写一个模拟程序。但是,由于我是 Stata 的新手,所以我一次又一次地慢慢完成每一步,以了解 Stata 的工作原理。一旦我对 Stata 有了更多了解,就会进行调整。

这个想法是创建一个向量/数字列表(一些特定的和其他随机的)并将该向量作为参数传递给mvrs 命令。然后我将运行一个模拟来找到具有较小 AIC 的结的模式。更多信息可以在 Spika 等人中找到。 BMC Cancer (2017) 论文。

感谢 StackOverflow 社区,我能够生成随机数(请参阅 question)。但是之后我在导入 Excel 文件时遇到了问题。 有没有办法保留创建的随机数并打开 Excel 文件?当我尝试运行代码时,我在尝试导入 Excel 文件后得到no; data in memory would be lost r(4);

这是我目前的代码:

* Create list of specified knots
local spec_knots 0.5 1 2 84.5

* Create random knots between 3 and 50
set obs 3
gen vals = floor(3 + 47 * runiform())
* Save levelsof vals and save to local to join specified and random knots
levelsof vals, local(values)

* Join specified and random knots to include in the mvrs command
local list_knots `spec_knots' `values'

import excel file, sheet("Analysis") firstrow

mvrs glm deaths age, family(poisson) exposure(population) all scale(1) alpha(1) knots(`list_knots')

我的计划是将上述代码包含在程序中,然后运行模拟。大致如下:

simulate aic=aic bic=bic dev=dev, reps(10) nodots: knots_location

在程序结束前使用scalar aic = e(aic)

感谢任何保存随机数和导入文件的指针。

【问题讨论】:

    标签: memory import stata


    【解决方案1】:

    如果您从导入 Excel 文件开始,那么稍后您可以从 Mata 中获取三个随机数,而无需创建任何新变量。或者你可以反过来做。

    import excel file, sheet("Analysis") firstrow
    
    * Create list of specified knots
    local spec_knots 0.5 1 2 84.5
    
    * Create random knots between 3 and 50
    mata : st_local("values", invtokens(strofreal(floor(3 :+ 47 * runiform(1,3)))))
    
    * Join specified and random knots to include in the mvrs command
    local list_knots `spec_knots' `values'
    
    mvrs glm deaths age, family(poisson) exposure(population) all scale(1) alpha(1) knots(`list_knots'
    

    或者,只要您知道您的文件至少有 3 个观察值,您的程序就可以启动

    import excel file, sheet("Analysis") firstrow
    
    * Create list of specified knots
    local spec_knots 0.5 1 2 84.5
    
    * Create random knots between 3 and 50
    gen vals = floor(3 + 47 * runiform()) in 1/3 
    levelsof vals, local(values)
    
    * Join specified and random knots to include in the mvrs command
    local list_knots `spec_knots' `values'
    

    您的随机数中有 2 个甚至 3 个重合的概率很小。

    【讨论】:

    • 谢谢!我也尝试过相反的方法,但无法set obs 3。我只是简单地看了mata 来创建矩阵。因此,如果我理解正确,strofrealfloor(3 :+ 47 * runiform(1,3)) 创建的值转换为三个字符串,invtokens 将三个字符串连接为 1 个字符串。是这样吗?
    • 不完全。 strofreal() 在这种情况下将数字向量转换为字符串向量;然后invtokens() 将字符串向量的元素组合成单个字符串标量。
    • 我看不到任何代码显示您使用set obs 3 的位置,但是(a)我没有建议(b)如果您已经在内存中进行了超过 3 个观察的数据,它将失败。这里的一条黄金法则是显示失败的代码,而不是谈论它。
    • 对不起。语言障碍。我的意思是在发布问题之前,我尝试在set obs 3 之前导入文件,这在我发布的代码中。您的代码工作正常。这只是一个评论,说明我遇到了问题 b。我没说你提到过。谢谢你的解释!
    猜你喜欢
    • 2021-02-14
    • 2013-07-15
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    相关资源
    最近更新 更多