C(++)中的Stata随机数生成器

时间:2015-04-02 17:41:31

标签: stata

我正在用C ++重写(和并行化)一些Stata模拟。

出于测试目的,我想使用Stata的随机数字。

到目前为止,我的方法是在Stata中生成数字,将它们转储到CSV文件(100s MB),然后在我的C ++程序中读取它。这很慢而且不够优雅。

理想情况下,我想用C ++代码生成相同的制服。

我读过Stata使用KISS算法(引用http://blog.stata.com/tag/random-numbers/)。我在http://www0.cs.ucl.ac.uk/staff/d.jones/GoodPracticeRNG.pdf找到了一个 C实现。但KISS有几种变体,似乎还有一点工作要做一个Stata风格的种子,并产生统一的数字(Stata博客建议我们采用32位int生成的二进制扩展并返回0.binary_expansion )。

是否有人编写了C / C ++代码,可以复制从Stata 制服()返回的数字?

编辑:使用Stata"设置种子"计算KISS种子。似乎依赖于秘密功能。引用= http://hsphsun3.harvard.edu/cgi-bin/lwgate/STATALIST/archives/statalist.1210/date/article-1132.html

1 个答案:

答案 0 :(得分:1)

我最终发现可以通过plugin从Stata中调用C / C ++代码。

特别是可以在Stata中使用C ++ 11的Mersenne Twister RNG。

代码(cpprandom.cpp)和演示(cpprandom.do)在我的github account上。您需要来自Stata plugin website的文件stplugin.c和stplugin.h(当然还有现代的C ++编译器)。