首页 文章

Stata:检查组内不同变量的相等性

提问于
浏览
-2

我有一个分组的数据集,我想检查以确保这些组不能进一步划分为不同的子组 . 组中的每个观察都有一个唯一的 ID 和另一个名为 match_ID 的变量,对于一个两个成员的组,它是该组中另一个观察的ID号 . 对于具有两个以上成员的组,每个匹配重复一次ID,因此三个成员组将列出所有三个ID两次:每次匹配一次 .

两人组的示例:

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 值 . 如果没有,则该组包含一个不同的子组 . 但这只适用于两个成员组(无论如何都不能包含子组),所以我认为需要有一个条件,即对于组内每个唯一的 IDIDmatch_ID 进行核对 . 但我不知道如何编码 .

1 回答

  • 0

    你的 xtset 代码对我不起作用 - 也许我错过了什么 . 无论如何,这里有一个(相当难看的)代码,它计算每个组中 IDmatch_ID 的每个组合的匹配数,并在计数不是一个时报告结果 .

    // 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中的行方式操作很慢 .

相关问题