#stata
#stata
Вопрос:
Исходные данные содержат информацию о consumerid
и о cars
них purchased
.
clear
input consumerid car purchase
6 American 1
6 Japanese 0
6 European 0
7 American 0
7 Japanese 0
7 European 1
7 Korean 1
end
Поскольку это данные о покупке, набор данных необходимо расширять таким образом, чтобы каждый раз, когда потребитель совершает покупку, отображался полный набор автомобилей. Окончательный набор данных должен выглядеть следующим образом (скриншот взят из руководства Stata www.stata.com/manuals/cm.pdf на стр. 97 в разделе «Пример 4: несколько вариантов для каждого случая»):
Я сгенерировал несколько кодов (показанных ниже), чтобы почти добраться туда, куда мне нужно, но у меня возникли проблемы с генерацией одного значения purchase = 1 для каждой комбинации consumerid-carnumber (т. Е. Из-за расширения значения покупки дублируются).).
egen sumpurchase=total(purchase), by(id)
expand sumpurchase
bysort id car (purchase): gen carnumber=_n
Ответ №1:
Вы могли бы использовать reshape
для получения всех комбинаций идентификатора потребителя / автомобиля для каждого купленного автомобиля. В этом примере предполагается, что порядок сортировки в исходном наборе данных определяет, какой car является номером 1, номером 2 и т. Д.
* Example generated by -dataex-. To install: ssc install dataex
clear
input byte consumerid str8 car byte purchase
6 "American" 1
6 "Japanese" 0
6 "European" 0
7 "American" 0
7 "Japanese" 0
7 "European" 1
7 "Korean" 1
end
// Generate carnumber
bys consumerid: gen carnumber = cond(purchase != 0, sum(purchase), 0)
// To wide
reshape wide purchase, i(consumerid car) j(carnumber)
// Keep purchased cars only
drop purchase0
// Back to long
reshape long
// Drop if no cars purchased for consumerid/carnumber
bysort consumerid carnumber (purchase) : drop if missing(purchase[1])
// Replace missing with 0 for non-purchased cars
mvencode purchase, mv(0)
// Sort and see results
sort consumerid carnumber car
list, sepby(consumerid carnumber) abbr(14)
Результаты:
. list, sepby(consumerid carnumber) abbr(14)
----------------------------------------------
| consumerid car carnumber purchase |
|----------------------------------------------|
1. | 6 American 1 1 |
2. | 6 European 1 0 |
3. | 6 Japanese 1 0 |
|----------------------------------------------|
4. | 7 American 1 0 |
5. | 7 European 1 1 |
6. | 7 Japanese 1 0 |
7. | 7 Korean 1 0 |
|----------------------------------------------|
8. | 7 American 2 0 |
9. | 7 European 2 0 |
10. | 7 Japanese 2 0 |
11. | 7 Korean 2 1 |
----------------------------------------------
Комментарии:
1. Это фантастический код, я только что воссоздал его. Спасибо, Ваутер.