如何在Stata中按组将连续观察合并在一起?

如何在Stata中按组将连续观察合并在一起?,stata,Stata,我有一个医生和病人之间访谈的数据集。有一个可变的数字;扬声器,指示医生(MD)或患者(P)是否在讲话;包含演讲者所说内容的Speech和按时间顺序对数据集排序的Row Row QuestionNumber Speaker Speech 1 1 MD Permission to record? 2 1 P Yes 3 1

我有一个医生和病人之间访谈的数据集。有一个可变的数字;扬声器,指示医生(MD)或患者(P)是否在讲话;包含演讲者所说内容的Speech和按时间顺序对数据集排序的Row

Row    QuestionNumber    Speaker    Speech
 1     1                 MD         Permission to record?
 2     1                 P          Yes
 3     1                 MD         Great
 4     2                 MD         I'd like to ask you-
 5     2                 MD         What was that?
 6     2                 P          Excuse me (blows nose)
对于每个问题编号,我希望每个其他观察(行)都是同一个发言者。但是,正如您在问题(2)中看到的,MD连续发言(第4行和第5行)。我想把这些观察中的演讲结合起来,也就是说,当同一个演讲者在同一个问题编号内连续发言时,将文本结合起来

我希望最终的数据集如下所示:

Row    QuestionNumber    Speaker    SpeechNEW
 1     1                 MD         Permission to record?
 2     1                 P          Yes
 3     1                 MD         Great
 4     2                 MD         I'd like to ask you- What was that?
 5     2                 P          Excuse me (blows nose)

我似乎无法在网上找到现有的解决方案。任何建议都将不胜感激——谢谢

这非常有效——谢谢!我不理解的代码的一部分是
sum(Speaker!=Speaker[\u n-1])
。这是如何工作的-
sum
在这里做什么?这是一个程序员论坛-,您似乎没有阅读相关程序的文档。这不是一个好策略
help sum()
告诉您
sum()
的作用,即生成累积或运行的总和。每次演讲者发生变化时,到目前为止,您在总和上加1。这包括第一次观察,因为
扬声器[0]
被评估为缺失,因此与
扬声器[1]
不同。第4节将进一步讨论基本相同的问题。否则,true或false语句在true时的值为1,在false时的值为0
sum()
将1和0相加,自然,1增加了总和,0没有区别。更多关于true和false的信息,请访问,感谢您的澄清和其他资源。我不是一个程序员,但我真的在努力学习,并不总是知道在网上哪里可以找到相关信息。我不知道你能把
sum
与真假陈述配对——再次感谢。
clear 
input Row    QuestionNumber    str2 Speaker    str42 Speech
 1     1                 MD         "Permission to record?"
 2     1                 P          "Yes"
 3     1                 MD         "Great"
 4     2                 MD         "I'd like to ask you-"
 5     2                 MD         "What was that?"
 6     2                 P          "Excuse me (blows nose)"
 end 

 bysort Question (Row) : generate Comment = sum(Speaker != Speaker[_n-1]) 
 bysort Question Comment (Row) : replace Speech = Speech[_n-1] + " " + Speech if _n > 1 
 by Question Comment : keep if _n == _N 

 list, sepby(Question) 

     +--------------------------------------------------------------------------+
     | Row   Questi~r   Speaker                                Speech   Comment |
     |--------------------------------------------------------------------------|
  1. |   1          1        MD                 Permission to record?         1 |
  2. |   2          1         P                                   Yes         2 |
  3. |   3          1        MD                                 Great         3 |
     |--------------------------------------------------------------------------|
  4. |   5          2        MD   I'd like to ask you- What was that?         1 |
  5. |   6          2         P                Excuse me (blows nose)         2 |
     +--------------------------------------------------------------------------+