2014-09-10 55 views
-2

我有一個數據集分爲組,我想檢查以確保組不能進一步劃分爲不同的子組。組中的每個觀察值都有一個唯一的ID和另一個變量,稱爲match_ID,對於兩個成員組是組中另一個觀察的ID號。對於有兩個以上成員的組,每個比賽重複該ID一次,因此三人組將有三個ID列出兩次:每場比賽一次。一個兩人組的Stata:檢查組內不同變量間的平等

例子:

ID  match_ID group_ID 
1  2  55 
2  1  55 

一個三人小組的例子:

ID match_ID group_ID 
1  2  99 
1  3  99 
2  1  99 
2  3  99 
3  1  99 
3  2  99 

我的計劃是採取每個組中的第一ID,並確保它出現作爲該組所有其他成員的match_id值。如果沒有,那麼該組包含一個不同的子組。但這隻適用於兩個成員組(它們不能包含子組),所以我認爲需要有一個條件,即ID針對match_ID的組中的每個唯一ID進行檢查。但我不知道如何編碼。

+2

我不確定我是否理解你的問題。你說:「我想檢查一下,確保這些組別不能被進一步分成不同的子組」。這些反映在您提供的示例數據中的情況如何?這與您的問題標題有什麼關係?你試過了什麼代碼?我對你的要求很迷茫。 – 2014-09-10 19:27:29

+0

我基於匹配未列出的其他幾個變量創建了這些組。我現在試圖檢查我的分組算法是否正確,我認爲最簡單的方法是確保組的第一個ID匹配組的其餘部分的match_ID。如果沒有,那麼我在這個組裏有誤報,這些誤報會是他們自己的分組。我在SAS中進行了原始匹配,但是我收到了一個要求在STATA中完成這部分的請求,這是我剛剛開始使用的。 – 2014-09-10 19:57:58

+1

這個問題似乎是無關緊要的,因爲它沒有顯示任何編碼工作。 – Metrics 2014-09-10 20:04:34

回答

0

您的xtset代碼不適合我 - 也許我錯過了一些東西。無論如何,這是一個(相當醜陋的)代碼,用於計算每個組中IDmatch_ID的每個組合的匹配數量,並在計數不完全爲1時報告結果。

// a program to run matches with by-groups 
capture program drop match 
program match, byable(recall) 
marksample touse 
preserve 
qui drop if !`touse' 
loca n=_n 
loca N=_N 
forval i=`n'/`N' { 
    qui count if (ID[`i']==match_ID[_n] & match_ID[`i']==ID[_n] & `i'!=_n) 
    if (`r(N)'!=1) { 
      loca n=obs[`i'] 
      di "obs=`n' find `r(N)' matches" 
     } 
    } 
restore 
end 

// fake example 
clear 
input ID match_ID group_ID 
1 2 10 
1 3 10 
2 1 10 
2 3 10 
3 1 10 
3 2 10 
1 2 11 
1 3 11 
2 1 11 
2 3 11 
3 1 11 
1 1 12 
1 3 12 
2 1 12 
2 3 12 
3 1 12 
3 2 12 
end 

sort group_ID ID match_ID 
gen obs=_n // unique identifier 
list // no matches for obs=10, 12, and 14 
by group_ID: match 

這做工作,但也有一定的方法來改進這一代碼 - 我不得不求助於preserverestore,因爲我不能讓編入索引。我也想象一下,使用xtsetreshape可能會更快,因爲Stata中按行進行操作很慢。