2016-04-25 51 views
0

我進行了電話調查,這裏是我的數據集的原型:如何覆蓋重複觀測

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(不成功)。

我想保留意見的每個var1var2 == 1,但保留對每個var1var2 == 2的意見,如果沒有其他情況下var2 == 1

我已經試過

duplicates drop var1 if var2 == 2, force 

,但我沒有得到期望的輸出

回答

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檢查有關數據集的假設。

+0

如果我在var2中的值爲2或者其他任何數字,那麼這個命令幾乎與我所期望的相反。 – Temitope

+0

如果您認爲代碼無法解決您的問題或新問題,請編輯您的問題以顯示數據和代碼示例的難度。 –