温馨提示:本文翻译自stackoverflow.com,查看原文请点击:stata - Create table for asclogit and nlogit
stata

stata - 为asclogit和nlogit创建表

发布于 2020-04-25 15:10:40

假设我有下表:

id | car      | sex    | income
-------------------------------
1  | European | Male   | 45000
2  | Japanese | Female | 48000
3  | American | Male   | 53000

我想在下面创建一个:

  | id | car      | choice | sex    | income
--------------------------------------------
1.| 1  | European | 1      | Male   | 45000
2.| 1  | American | 0      | Male   | 45000
3.| 1  | Japanese | 0      | Male   | 45000
  | ----------------------------------------
4.| 2  | European | 0      | Female | 48000
5.| 2  | American | 0      | Female | 48000
6.| 2  | Japanese | 1      | Female | 48000
  | ----------------------------------------
7.| 3  | European | 0      | Male   | 53000
8.| 3  | American | 1      | Male   | 53000
9.| 3  | Japanese | 0      | Male   | 53000

我想适合一个asclogit并且根据Stata手册中的示例1,此表格式似乎是必需的。但是,我还没有找到一种轻松创建此方法的方法。

查看更多

提问者
Espie Rather
被浏览
18
Pearly Spencer 2018-05-29 07:15

您可以使用以下cross命令生成所有可能的组合:

clear

input byte id str10 car str8 sex long income
1 "European" "Male"   45000
2 "Japanese" "Female" 48000
3 "American" "Male"   53000
end

generate choice = 0
save old, replace

keep id
save new, replace

use old
rename id =_0
cross using new

replace choice = 1 if id_0 == id
replace sex = cond(id == 2, "Female", "Male")
replace income = cond(id == 1, 45000, cond(id == 2, 48000, 53000))

请注意,cond()此处使用的功能等效于:

replace sex = "Male"   if id == 1
replace sex = "Female" if id == 2
replace sex = "Male"   if id == 3

replace income = 45000 if id == 1
replace income = 48000 if id == 2
replace income = 53000 if id == 3

上面的代码片段产生了所需的输出:

drop id_0
order id car choice sex income
sort id car

list, sepby(id)

     +------------------------------------------+
     | id        car   choice      sex   income |
     |------------------------------------------|
  1. |  1   American        0     Male    45000 |
  2. |  1   European        1     Male    45000 |
  3. |  1   Japanese        0     Male    45000 |
     |------------------------------------------|
  4. |  2   American        0   Female    48000 |
  5. |  2   European        0   Female    48000 |
  6. |  2   Japanese        1   Female    48000 |
     |------------------------------------------|
  7. |  3   American        1     Male    53000 |
  8. |  3   European        0     Male    53000 |
  9. |  3   Japanese        0     Male    53000 |
     +------------------------------------------+

欲了解更多信息,请键入help crosshelp cond()从塔塔的命令提示符。