如何获得多次回复的顺序?

时间:2015-05-28 17:15:52

标签: stata data-manipulation

我正在研究一个包含多个回复问题的调查数据集。对于响应顺序,数据没有很好地清理,这取决于受访者选择多个选项的顺序。所以它是一个所谓的“多对多”#34;多重响应(我从这个主题的N.J. Cox and U. Kohler's tutorial借用了这个术语)。还有以下几个补充问题(如特定事件发生的年份),它们共享第一个问题的顺序。基本数据结构就像

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

我可以使用the tutorial cited中提供的代码来检测某个值是否出现在q1_*中,并在这种情况下将新假设置为1。但是,如何保留我遇到某个值的顺序,并在我对循环中q2_*的分析中使用它?

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

更新

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

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

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

如果这是我的全部愿望,那么eventhappens就足够了。

但是,我还需要保留特定值3出现的顺序,如第一次观察的2,以便于分析以下问题。所以对于第一个id,1999年是特定事件发生的一年,而不是1998年。那我该怎么办?

更新 为我以前不清楚的描述道歉。真实数据就像(我没有权限在Stata浏览窗口中发布真实数据的图片)

anymatch()

ce101_s_ *是一个变量列表,它们代表受访者选择的关于问题ce101的选项,他们的命令是受访者做出选择的顺序。某个值(在真实数据中是带有值标签的中文字符)代表某一事件已经发生,例如1代表一个村庄建立自己的医院,13代表一个村庄有移动信号等。以id_1为例,该村建立一所医院(以1为代表)于1999年建立初级学校(以2表示)在1998年等等,事实上,列出的所有事件实际上都发生在id_1村,但对于id_2,只发生了2和13事件。对我来说困难的是保留每个村庄发生的某个事件的命令,取13(例如移动信号),它发生在2005年的id_1村,因为在回答问题ce101时,interviwee在第13顺序选择它,并且ce102_s_​​13的值但是对于id_2,受访者在第二个订单中选择它,并且ce102中的相应值是2007.所以如果想要创建一个假人来表示如果家庭在某个村庄居住在某个村庄之前,我需要订单ce102_s_​​ *          

1 个答案:

答案 0 :(得分:0)

我不是特别清楚你想要什么,但我怀疑单词的答案是reshape。此结构可以使您更容易交叉关联响应。

. 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 |
     +--------------------------------------+