在Stata中生成排序的伪随机数

机器算法验证 状态 随机生成
2022-04-19 18:45:34

今天我打开了两个 STATA 窗口并在两个窗口中运行了以下命令:

set obs 100
gen x = rnormal()
sort x

(不同之处在于我在第二个窗口中生成了一个名为 y 的变量)。总结:我让 STATA 给我 100 个取自标准正态分布的伪随机数,然后我对其进行排序。令我惊讶的是,x 和 y 向量的数量是相同的!我在家里做了这个,然后在工作中,我的印象是所有这些向量都是一样的。对我来说,这种奇怪的行为有什么解释吗?

如果这是 STATA 中的问题,R 是否有更好的伪随机数生成程序?

一个侧面问题。我遇到了这个“问题”,因为我试图在 Stata 中生成两个伪随机列(例如 x 和 y),然后分别排序。但是我知道用于排序的两个命令(sort 和 gsort)对整个数据库进行排序,而不是单独的列。您是否知道允许我在保持其他列固定的同时对列进行排序的 Stata 命令?

1个回答

set_seed各州的帮助

这些函数产生的序列由种子决定,种子只是一个数字,每次启动 Stata 时都设置为 123456789。

Stata 的哲学强调可重复性,所以这种一致性并不奇怪。当然,您可以自己设置种子。有关更多信息,请参阅帮助页面。

将列与所有其他列分开排序的一种方法是保留数据,仅保留要排序的列,对其进行排序,将结果保存在临时文件中,恢复数据并合并临时文件:

gen y = rnormal()
preserve
keep y
sort y
tempfile out
save `out'
restore
merge 1:1 _n using `out', nogen