从宏观变量随机开奖号码(Random lottery numbers from macro to v

2019-10-31 11:04发布

我有一个宏观以下开奖号码:

global lottery 6 9 4 32 98

如何可以模拟与可变50观察,其中随机地从存储在宏数获得的各观察?

下面的代码产生一个错误:

set obs 50
global lottery 6 9 4 32 98

g lot=$lottery
invalid '9' 
r(198);

Answer 1:

这里有两个类似的方法:

clear 
set obs 50 
set seed 2803 
local lottery 6 9 4 32 98

* method 1 
generate x1 = ceil(5 * runiform())

tabulate x1 

generate y1 = . 
forvalues j = 1/5 { 
    replace y1 = real(word("`lottery'", `j')) if x1 == `j'
}

* method2 

set seed 2803 
generate x2 = runiform()
generate y2 = cond(x2 <= 0.2, 6, cond(x2 <= 0.4, 9, cond(x2 <= 0.6, 4, cond(x2 <= 0.8, 32, 98))))

tab1 y? 

我假设你想相等的概率 ,这是不明确。 设置种子的原则是重复性的关键。 正如@Pearly斯宾塞的回答,利用local宏被广泛认为是(多)更好的风格。

拼出来:在这个答案的概率是相等的,但频率会从样品到样品波动。 在@珠光的答案频率因为50是5的倍数,且随机性仅在他们到达的顺序是明显的保证平等的。 此答案是像投掷与五个面50倍的模具; @珠光的回答就像是从50卡5种不同类型甲板绘图。



Answer 2:

如果你想为频率相等5价值观,创建变量持有数目如下:

clear
set obs 50

local lottery 6 9 4 32 98
egen lot = fill(`lottery' `lottery')

list lot in 1 / 10

     +-----+
     | lot |
     |-----|
  1. |   6 |
  2. |   9 |
  3. |   4 |
  4. |  32 |
  5. |  98 |
     |-----|
  6. |   6 |
  7. |   9 |
  8. |   4 |
  9. |  32 |
 10. |  98 |
     +-----+

然后,您排序的随机变量洗牌它们:

generate random = runiform() 
sort random

list lot in 1 / 10

     +-----+
     | lot |
     |-----|
  1. |   9 |
  2. |   6 |
  3. |   9 |
  4. |   4 |
  5. |   9 |
     |-----|
  6. |   6 |
  7. |  32 |
  8. |   6 |
  9. |  98 |
 10. |   6 |
     +-----+

请注意,这里我使用本地宏只有大约10个观测显示。



文章来源: Random lottery numbers from macro to variable
标签: stata