Stata中对应R sample函数的实现及生成3-50随机数的方法
Stata生成指定范围随机数的两种方法(对应R的实现)
作为有R基础的Stata新手,你遇到的这个问题其实很典型——毕竟Stata是面向数据集的操作逻辑,和R的向量式编程思路有点不一样。我来帮你对应R里的两种方法,给出Stata的实现方式:
方法1:对应R的 floor(runif(5, min=3, max=50))
R里这个方法生成的是3到49之间的整数(因为runif的max=50会生成小于50的数,floor后最大为49)。在Stata里,我们可以用runiform()函数(生成0到1的均匀随机数)缩放范围后取整:
// 先清空现有数据集,设置5个观测值(对应要生成的5个随机数) clear set obs 5 // 生成3到49之间的整数随机数 gen rand_num = floor(3 + (50 - 3)*runiform()) // 查看结果 list rand_num
解释一下:(50-3)是范围跨度,乘以runiform()得到0到47的小数,加3后是3到50之间的小数,floor()向下取整就得到和R第一个方法完全对应的整数范围。
方法2:对应R的 sample(3:50, 5, replace=TRUE)
这个方法是从3到50的整数里有放回随机抽取5个,Stata里有两种实现方式:
如果你用Stata 14及以上版本
可以直接用runint()函数,它能直接生成指定区间的整数随机数:
clear set obs 5 gen rand_num = runint(3, 50) list rand_num
如果你用旧版Stata(没有runint())
可以用以下代码实现相同效果:
clear set obs 5 // 3到50共48个整数,用runiform()*48生成0到48的小数,floor后加3得到3到50的整数 gen rand_num = floor(runiform()*(50 - 3 + 1)) + 3 list rand_num
这里要注意的是,Stata的操作都是基于数据集的行,所以必须先通过set obs 5创建5个观测行,才能生成5个随机数——这和R里直接生成向量的逻辑不太一样,也是新手容易踩的小坑~
内容的提问来源于stack exchange,提问作者psoares
相关产品推荐
相关产品推荐

