You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:14:28