我在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找到 a C实现 . 但KISS有几种变体,似乎还有一点工作要做一个Stata风格的种子,并产生统一的数字(Stata博客建议我们采用32位int生成的二进制扩展并返回0.binary_expansion ) .
有没有人已经编写过C / C代码来复制从Stata的uniform()返回的数字?
编辑:使用Stata的"set seed"计算的KISS种子似乎依赖于一个秘密函数 . 引用= http://hsphsun3.harvard.edu/cgi-bin/lwgate/STATALIST/archives/statalist.1210/date/article-1132.html
1 回答
我最终发现可以通过plugin从Stata中调用C / C代码 .
特别是可以在Stata中使用C 11的Mersenne Twister RNG .
代码(cpprandom.cpp)和演示(cpprandom.do)在我的github account上 . 您需要Stata plugin website(当然还有现代C编译器)中的文件stplugin.c和stplugin.h .