Stata 选择数据集中的多项选择

Stata 选择数据集中的多项选择,stata,Stata,原始数据包含有关consumerid和cars的信息 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 由于这是一个购买数据,因此需要对数据集进行

原始数据包含有关
consumerid
cars
的信息

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手册第97页“示例4:每个案例的多项选择”):

我已经生成了几个代码(如下所示),几乎可以到达我需要的地方,但是我很难生成单个购买值=每个consumerid carnumber组合1(即,由于扩展,购买值是重复的)


您可以使用
重塑
获得每辆车的consumerid/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 |
     +----------------------------------------------+

这是一个很棒的代码,我刚刚重新创建了它。谢谢你,沃特。
. 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 |
     +----------------------------------------------+