Я думаю, что самый простой способ создать эту переменную - использовать функцию mata
rdiscrete()
.
Предполагая 1000 наблюдений:
clear
set obs 1000
generate pets = .
mata: st_store(., "pets", rdiscrete(1000, 1, (0.24, 0.36, 0.16, 0.12, 0.1, 0.02)))
(Примечание: функция mata
st_store()
используется для изменения значений, хранящихся в переменной pets
)
Затем вы определяете и присваиваете value label
переменной pets
:
label define petslabel 1 "Cat" 2 "Dog" 3 "Fish" 4 "Hamster" 5 "Rabbit" 6 "Snake"
label values pets petslabel
tabulate pets
pets | Freq. Percent Cum.
------------+-----------------------------------
Cat | 241 24.10 24.10
Dog | 350 35.00 59.10
Fish | 165 16.50 75.60
Hamster | 111 11.10 86.70
Rabbit | 112 11.20 97.90
Snake | 21 2.10 100.00
------------+-----------------------------------
Total | 1,000 100.00
Тем не менее, как вы можете видеть, результаты являются приблизительными, так как функция
рисует случайные выборки, используя распределение discrete
. Таким образом, вам может понадобиться запустить
этот код несколько раз, чтобы получить числа, наиболее близкие к тому, что вы хотите.
Если вам нужны точные результаты, вам придется создавать категории вручную:
clear
set obs 1000
generate pets = 1 if _n <= 0.24 * 1000
replace pets = 2 if _n <= 0.60 * 1000 & _n > 0.24 * 1000
replace pets = 3 if _n <= 0.76 * 1000 & _n > 0.60 * 1000
replace pets = 4 if _n <= 0.88 * 1000 & _n > 0.76 * 1000
replace pets = 5 if _n <= 0.98 * 1000 & _n > 0.88 * 1000
replace pets = 6 if _n > 0.98 * 1000
label define petslabel 1 "Cat" 2 "Dog" 3 "Fish" 4 "Hamster" 5 "Rabbit" 6 "Snake"
label values pets petslabel
tabulate pets
pets | Freq. Percent Cum.
------------+-----------------------------------
Cat | 240 24.00 24.00
Dog | 360 36.00 60.00
Fish | 160 16.00 76.00
Hamster | 120 12.00 88.00
Rabbit | 100 10.00 98.00
Snake | 20 2.00 100.00
------------+-----------------------------------
Total | 1,000 100.00
EDIT:
Следуя коварному ответу @Nick Cox, вот как вы можете ввести случайность:
generate double random = runiform()
sort random pets
Тем не менее, обратите внимание, что это не так же, как выборка случайных выборок из определенного распределения.
Также рекомендуется сначала установить seed
, чтобы можно было повторить результаты.