我有一个宏观以下开奖号码:
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);
我有一个宏观以下开奖号码:
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);
这里有两个类似的方法:
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种不同类型甲板绘图。
如果你想为频率相等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个观测显示。