【问题标题】:Stata - How to Generate Random IntegersStata - 如何生成随机整数
【发布时间】:2014-06-10 18:00:38
【问题描述】:

我正在学习 Stata,想知道如何生成随机整数(无需替换)。如果我总共有 10 行,我希望每一行都有一个从 1 到 10 的唯一整数分配给它。在 R 中,可以简单地做:

sample(1:10, 10)

但在 Stata 中似乎更难做到。从this Stata page,我看到了:

generate ui = floor((b-a+1)*runiform() + a)

如果我替换 a=1 和 b=10,我会得到接近我想要的结果,但它会通过替换进行采样。

弄清楚这部分之后,我将如何处理以下问题:我的数据成对出现。例如,在 10 个观测值中,有 5 组,每组 2。每组 2 有一个唯一标识符。我将如何以随机顺序排列组(而不是观察)?数据看起来像这样:

obs   group  mem     value
1     A      x       9345
2     A      y       129
3     B      x       251
4     B      y       373
5     C      x       788
6     C      y       631
7     D      x       239
8     D      y       481
9     E      x       224
10    E      y       585  

obs 是观察号。 group 是观察(行)所属的组。 mem 是组中的成员标识符。每个组有一个x 和一个y

【问题讨论】:

标签: random integer stata


【解决方案1】:

第一个问题:

你可以只是洗牌观察标识符。

set obs 10
gen y = _n 
gen rnd = runiform()
sort rnd 

或者在马塔中

jumble(1::10)

第二个问题:几种方法。这是一个。

gen rnd = runiform() 
bysort group (rnd): replace rnd = rnd[1] 
sort rnd 

一般评论:为了重现性,请预先设置随机数种子。

set seed 2803 

或其他。

【讨论】:

  • 第二个问题的解决方案中,为什么我们需要在bysort语句中包含(rnd)。我们可以把它排除在外吗?
  • 是的;那将是另一种方法。
猜你喜欢
  • 2020-08-06
  • 1970-01-01
  • 2018-05-15
  • 2018-10-09
  • 2014-08-22
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多