Stata 如何获取多个响应的顺序?

Stata 如何获取多个响应的顺序?,stata,data-manipulation,Stata,Data Manipulation,我正在研究一个调查数据集,其中包含一个有多个答案的问题。由于回答的顺序取决于受访者选择多个选项的顺序,因此数据没有得到很好的清理。这就是所谓的“多对多”多重反应(我借用了这个词)。下面还有几个补充问题(如某一事件发生的年份),它们与第一个问题的顺序相同。基本数据结构如下 q1_1 q1_2 q1_3 q2_1 q2_2 q2_3 1 3 . 1998 1999 . 2 . . 2000 . . 3 2

我正在研究一个调查数据集,其中包含一个有多个答案的问题。由于回答的顺序取决于受访者选择多个选项的顺序,因此数据没有得到很好的清理。这就是所谓的“多对多”多重反应(我借用了这个词)。下面还有几个补充问题(如某一事件发生的年份),它们与第一个问题的顺序相同。基本数据结构如下

 q1_1  q1_2  q1_3  q2_1  q2_2  q2_3
 1      3     .    1998  1999  .
 2      .     .    2000   .    .
 3      2     .    2001  1997  .
我可以使用中提供的代码来检测某个值是否出现在
q1.*
中,并在这种情况下将新的虚拟值设置为1。但是,我如何保持遇到特定值的顺序,并将其用于循环中有关
q2.*
的分析中呢

forvalues i = 1/3 { 
       egen Q1_`i' = anymatch(q1_*), val(`i')  
  }  
更新

当前的答案很精彩,但它给出了一般顺序,而不是特定值出现的特定顺序

我可能没有足够清楚地表达我的问题

我想要的是检测是否发生了某个事件(由特定值(如3)表示的多个响应选项)。如果确实发生了,则将新创建的虚拟对象(例如
eventoccurrents
)设置为1:因此在我的示例中,我们将第一个和第三个id的
eventoccurrents
设置为1

如果这是我的全部愿望,那么
anymatch()
就足够了

但是,我还需要保留特定值3出现的顺序,就像第一次观察时的2一样,以便于分析以下问题。因此,对于第一个id,1999年是特定事件发生的年份,而不是1998年。那我该怎么办? 更新 为我以前不清楚的描述道歉。真实数据如下(我无权在Stata browse窗口中发布真实数据的图片)

ce101_s_*是一个变量列表,它们代表受访者就ce101问题选择的选项,其顺序是受访者做出选择的顺序。某些值(在实际数据中是带有值标签的汉字)表示发生了某些事件,例如1代表一个村庄建自己的医院,13代表一个村庄有移动信号等等。以id_1为例,这个村庄在1999年建了一所医院(以1为代表),在1998年建了一所小学(以2为代表),等等,事实上,所有列出的事件实际上都发生在id_1村,但对于id_2,只有2和13事件发生。对我来说,困难在于保留每个村庄发生的某些事件的顺序,例如13(移动信号),它发生在2005年的id_1村,因为interviwee在回答问题ce101时选择它在第13顺序,而ce102_s_13的值是2005年。但对于id_2,受访者在第二个顺序中选择它,ce102中的对应值为2007。因此,如果a想创建一个虚拟对象来表示在该村庄发生特定事件之前家庭是否居住在特定村庄,我需要ce102中的顺序_*
.

我不是特别清楚你想要什么,但我怀疑一个词的答案是
重塑
。这种结构可能使您更容易交叉关联响应

. input id q1_1 q1_2 q1_3 q2_1 q2_2 q2_3

            id       q1_1       q1_2       q1_3       q2_1       q2_2       q2_3
  1. 1 1 3 . 1998 1999 .
  2. 2 2 . . 2000 . .
  3. 3 3 2 . 2001 1997 .
  4. end 

. reshape long q , i(id) j(Q) string 
(note: j = 1_1 1_2 1_3 2_1 2_2 2_3)

Data                               wide   ->   long
-----------------------------------------------------------------------------
Number of obs.                        3   ->      18
Number of variables                   7   ->       3
j variable (6 values)                     ->   Q
xij variables:
                     q1_1 q1_2 ... q2_3   ->   q
-----------------------------------------------------------------------------

. rename q answer 

. split Q, parse(_) destring 
variables born as string: 
Q1  Q2
Q1 has all characters numeric; replaced as byte
Q2 has all characters numeric; replaced as byte

. rename Q1 question 

. rename Q2 order 

. list, sepby(id) 

     +--------------------------------------+
     | id     Q   answer   question   order |
     |--------------------------------------|
  1. |  1   1_1        1          1       1 |
  2. |  1   1_2        3          1       2 |
  3. |  1   1_3        .          1       3 |
  4. |  1   2_1     1998          2       1 |
  5. |  1   2_2     1999          2       2 |
  6. |  1   2_3        .          2       3 |
     |--------------------------------------|
  7. |  2   1_1        2          1       1 |
  8. |  2   1_2        .          1       2 |
  9. |  2   1_3        .          1       3 |
 10. |  2   2_1     2000          2       1 |
 11. |  2   2_2        .          2       2 |
 12. |  2   2_3        .          2       3 |
     |--------------------------------------|
 13. |  3   1_1        3          1       1 |
 14. |  3   1_2        2          1       2 |
 15. |  3   1_3        .          1       3 |
 16. |  3   2_1     2001          2       1 |
 17. |  3   2_2     1997          2       2 |
 18. |  3   2_3        .          2       3 |
     +--------------------------------------+

我已经编辑了这个问题,但我还是不明白。很明显,英语不是你的第一语言,这是可以理解的。我想这意味着你需要给出一个数据和期望结果的工作示例。嗨,尼克,我更新了一些更详细的描述,希望这次更清楚,谢谢。对不起,我不清楚。你希望读者能解读一个冗长的口头描述。你也许应该和一个英语水平更好的本地人一起工作/
. input id q1_1 q1_2 q1_3 q2_1 q2_2 q2_3

            id       q1_1       q1_2       q1_3       q2_1       q2_2       q2_3
  1. 1 1 3 . 1998 1999 .
  2. 2 2 . . 2000 . .
  3. 3 3 2 . 2001 1997 .
  4. end 

. reshape long q , i(id) j(Q) string 
(note: j = 1_1 1_2 1_3 2_1 2_2 2_3)

Data                               wide   ->   long
-----------------------------------------------------------------------------
Number of obs.                        3   ->      18
Number of variables                   7   ->       3
j variable (6 values)                     ->   Q
xij variables:
                     q1_1 q1_2 ... q2_3   ->   q
-----------------------------------------------------------------------------

. rename q answer 

. split Q, parse(_) destring 
variables born as string: 
Q1  Q2
Q1 has all characters numeric; replaced as byte
Q2 has all characters numeric; replaced as byte

. rename Q1 question 

. rename Q2 order 

. list, sepby(id) 

     +--------------------------------------+
     | id     Q   answer   question   order |
     |--------------------------------------|
  1. |  1   1_1        1          1       1 |
  2. |  1   1_2        3          1       2 |
  3. |  1   1_3        .          1       3 |
  4. |  1   2_1     1998          2       1 |
  5. |  1   2_2     1999          2       2 |
  6. |  1   2_3        .          2       3 |
     |--------------------------------------|
  7. |  2   1_1        2          1       1 |
  8. |  2   1_2        .          1       2 |
  9. |  2   1_3        .          1       3 |
 10. |  2   2_1     2000          2       1 |
 11. |  2   2_2        .          2       2 |
 12. |  2   2_3        .          2       3 |
     |--------------------------------------|
 13. |  3   1_1        3          1       1 |
 14. |  3   1_2        2          1       2 |
 15. |  3   1_3        .          1       3 |
 16. |  3   2_1     2001          2       1 |
 17. |  3   2_2     1997          2       2 |
 18. |  3   2_3        .          2       3 |
     +--------------------------------------+