#stata
#stata
Вопрос:
В исходном наборе данных выбора фиксируются лица ( id
), совершающие покупки ( choice
) среди всех возможных вариантов продукта ( assortchoice
это код продукта). Каждый человек всегда сталкивается с одним и тем же набором продуктов на выбор; в результате значение choice
всегда равно 0 или 1 («был выбран продукт или нет?»).
clear
input
id assortchoice choice sumchoice
2 12 1 2
2 13 0 2
2 14 0 2
2 15 0 2
2 16 0 2
2 17 0 2
2 18 0 2
2 19 0 2
2 20 0 2
2 21 0 2
2 22 0 2
2 23 1 2
3 12 1 1
3 13 0 1
3 14 0 1
3 15 0 1
3 16 0 1
3 17 0 1
3 18 0 1
3 19 0 1
3 20 0 1
3 21 0 1
3 22 0 1
3 23 0 1
4 12 1 3
4 13 0 3
4 14 1 3
4 15 1 3
4 16 0 3
4 17 0 3
4 18 0 3
4 19 0 3
4 20 0 3
4 21 0 3
4 22 0 3
4 23 0 3
end
Я создал следующий код, чтобы понять, сколько вариантов было сделано каждым человеком:
egen sumchoice=total(choice), by(id)
В этом примере человек 3 (id = 3) выбрал только один продукт (поскольку sumchoice = 1), но человек 2 сделал два выбора (sumchoice = 2). Наконец, человек 4 сделал три выбора (sumchoice=3).
Поскольку это данные выбора, мне нужно преобразовать все экземпляры множественных вариантов в наборы отдельных вариантов.
Что я имею в виду под этим: если человек совершил две покупки, мне нужно дублировать набор выбора для этого человека дважды; для человека, который совершил 3 покупки, мне нужно повторить набор выбора три раза, поэтому окончательная структура выглядит как приведенный ниже набор данных.
clear
input
id transaction assortchoice choice
2 1 12 1
2 1 13 0
2 1 14 0
2 1 15 0
2 1 16 0
2 1 17 0
2 1 18 0
2 1 19 0
2 1 20 0
2 1 21 0
2 1 22 0
2 1 23 0
2 2 12 0
2 2 13 0
2 2 14 0
2 2 15 0
2 2 16 0
2 2 17 0
2 2 18 0
2 2 19 0
2 2 20 0
2 2 21 0
2 2 22 0
2 2 23 1
3 1 12 1
3 1 13 0
3 1 14 0
3 1 15 0
3 1 16 0
3 1 17 0
3 1 18 0
3 1 19 0
3 1 20 0
3 1 21 0
3 1 22 0
3 1 23 0
4 1 12 1
4 1 13 0
4 1 14 0
4 1 15 0
4 1 16 0
4 1 17 0
4 1 18 0
4 1 19 0
4 1 20 0
4 1 21 0
4 1 22 0
4 1 23 0
4 2 12 0
4 2 13 0
4 2 14 1
4 2 15 0
4 2 16 0
4 2 17 0
4 2 18 0
4 2 19 0
4 2 20 0
4 2 21 0
4 2 22 0
4 2 23 0
4 3 12 0
4 3 13 0
4 3 14 0
4 3 15 1
4 3 16 0
4 3 17 0
4 3 18 0
4 3 19 0
4 3 20 0
4 3 21 0
4 3 22 0
4 3 23 0
end
*** обновление:
transaction
указывает, какой это порядок транзакций:
bysort id assortchoice (choice): gen transaction=_n
Следовательно, выбор = 1 должен появляться только один раз для каждой транзакции.
Ответ №1:
Ответ не совсем «использовать expand
«, поскольку есть нюанс, что вам не нужны точные копии.
expand sumchoice
bysort id assortchoice (choice) : replace choice = 0 if _n != _N amp; choice == 1
list if id == 2 , sepby(assortchoice)
-----------------------------------
| id assort~e choice sumcho~e |
|-----------------------------------|
1. | 2 12 0 2 |
2. | 2 12 1 2 |
|-----------------------------------|
3. | 2 13 0 2 |
4. | 2 13 0 2 |
|-----------------------------------|
5. | 2 14 0 2 |
6. | 2 14 0 2 |
|-----------------------------------|
7. | 2 15 0 2 |
8. | 2 15 0 2 |
|-----------------------------------|
9. | 2 16 0 2 |
10. | 2 16 0 2 |
|-----------------------------------|
11. | 2 17 0 2 |
12. | 2 17 0 2 |
|-----------------------------------|
13. | 2 18 0 2 |
14. | 2 18 0 2 |
|-----------------------------------|
15. | 2 19 0 2 |
16. | 2 19 0 2 |
|-----------------------------------|
17. | 2 20 0 2 |
18. | 2 20 0 2 |
|-----------------------------------|
19. | 2 21 0 2 |
20. | 2 21 0 2 |
|-----------------------------------|
21. | 2 22 0 2 |
22. | 2 22 0 2 |
|-----------------------------------|
23. | 2 23 0 2 |
24. | 2 23 1 2 |
-----------------------------------
Комментарии:
1. Большое вам спасибо. Это работает хорошо. Можно ли также создать переменную как «транзакцию», которая указывает порядок транзакций? (Я не могу запустить регрессию без этой части информации.)
2. Что в ваших данных дает эту информацию?
3. Я бы сказал
sumchoice
(тот, который я сгенерировал, чтобы узнать, сколько транзакций было совершено человеком)4. Это не обязательно должен быть порядок. Это просто должен быть показатель номера транзакции.
5. Извините, я не понимаю. У вас уже есть
sumchoice
.choice == 1
указывает на ваш выбор. Ноchoice == 1
точно такой же, какchoice
.