【问题标题】:Find missing instances of a sequence查找序列的缺失实例
【发布时间】:2022-01-06 08:36:27
【问题描述】:

如何在 Stata 中找到序列的缺失实例?

input seq
1
2
4
5
6
7
9
10
end

例如序列 1 到 10 中缺少 3 和 8。 如何找到它们?

我的尝试

list seq if !inrange(seq, 1,10)

但是,这不起作用。

【问题讨论】:

    标签: statistics sequence analytics stata


    【解决方案1】:

    Stata 使用 missing 来表示数据中带有缺失值代码的值。

    这里的问题是识别数据集中可能已经(应该是?)但使用不同的词不存在的值。

    这里有两种方法可以解决您的问题:

    clear 
    input seq
    1
    2
    4
    5
    6
    7
    9
    10
    end
    
    numlist "1/10" 
    local expected `r(numlist)'
    levelsof seq, local(observed)
    local absent : list expected - observed  
    
    di "`absent'"
    
    forval j = 1/10 {
        quietly count if seq == `j'
        if r(N) == 0 local ABSENT `ABSENT' `j'
    }
    
    di "`ABSENT'"
    

    【讨论】:

    • 赞成答案,但反对硬编码最大值和最小值以防数据发生变化。所以我会先 sum seq 然后 numlist "`r(min)'/`r(max)'"forval j = `r(min)'/`r(max)' { 取决于使用的方法
    • 我不反对。我回答了给出的问题。如果他们的真正问题不同,OP 有义务调整解决方案,或者如果解决方案不够深入,则提出更好或不同的问题。可能有一整篇关于如何识别数据集中可能存在/应该存在但不存在的内容的论文。它可以包括整数序列、分类变量、变量的交叉组合等等。
    • 当然,但我认为讨论和改进已经很好的答案并让社区从中学习是 SO 中最好的部分之一。评论和编辑功能的存在是有原因的。在我的工作中,由于基于当前数据状态的硬编码,我看到了许多错误,所以我的观点是,无论 OP 是否要求,所有好的 SO 答案都应该考虑到这一点。
    • 当然,但请随时发布另一个答案或编辑此答案。
    • 我将尼克的建议提交给merge,并附上完整的序列;它的扩展性比循环好得多,并且不受 numlist 那样的限制
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 2020-05-26
    相关资源
    最近更新 更多