如何覆盖重复的观察

时间:2016-04-25 05:32:58

标签: stata

我进行了电话调查,这是我数据集的原型:

var1    var2

6666    1
6666    2
7676    2
7676    1
8876    1
8876    2
89898   1
89898   2
9999    1
9999    2
5656    1
5656    2
2323    1
2323    2
9876    1
7654    1

var1是我调查中每个案例的唯一标识符(在本例中为电话号码)。

var2是调查的结果:1(成功),2(未成功)。

我希望保留每个var1 var2 == 1的观察结果,但保留var1 var2 == 2的观察结果,如果没有var2 == 1 duplicates drop var1 if var2 == 2, force }。

我试过了

{{1}}

但我没有得到所需的输出

1 个答案:

答案 0 :(得分:1)

这个问题标题错误:你不想覆盖任何东西。

您的语法无法正常工作,因为它不是您想要的。你问的是var1 if var2 == 2是否有重复,而且该命令对var2 == 1的观察没有任何关注。

您的示例不包含var2 == 2的观察结果,但var2 == 1没有相应的观察结果。我添加了一个这样的。

这是实现目标的一种方式。我顺便说明你所拥有的duplicates命令对这个例子没有任何作用;也不会期望做任何事情。

. clear 

. input  var1    var2

          var1       var2
  1.     6666        1
  2.     6666        2
  3.     7676        2
  4.     7676        1
  5.     8876        1
  6.     8876        2
  7.     89898       1
  8.     89898       2
  9.     9999        1
 10.     9999        2
 11.     5656        1
 12.     5656        2
 13.     2323        1
 14.     2323        2
 15.     9876        1
 16.     7654        1
 17.     42      2 
 18. end 

. duplicates list var1 if var2 == 2 

Duplicates in terms of var1

(0 observations are duplicates)

. bysort var1 (var2) : assert _N == 1 | _N == 2 

. by var1 : drop if _n == 2 & var2[2] == 2 
(7 observations deleted)

. list, sepby(var1) 

     +--------------+
     |  var1   var2 |
     |--------------|
  1. |    42      2 |
     |--------------|
  2. |  2323      1 |
     |--------------|
  3. |  5656      1 |
     |--------------|
  4. |  6666      1 |
     |--------------|
  5. |  7654      1 |
     |--------------|
  6. |  7676      1 |
     |--------------|
  7. |  8876      1 |
     |--------------|
  8. |  9876      1 |
     |--------------|
  9. |  9999      1 |
     |--------------|
 10. | 89898      1 |
     +--------------+

另一种方法是

. bysort var1 (var2) : keep if _n == 1 & var2[2] == 2 

实际上

. bysort var1 (var2): keep if _n == 1 
如果有var2 == 1

会保留观察结果,否则会保留var2 == 2的单身人士。

隐藏的假设似乎包含每个不同var1的最多两个观察结果。请注意使用assert来检查有关数据集的假设。