Stata:将非重复行计为重复行

Stata: Counts non-duplicate rows as duplicates

考虑以下代码来检测重复项,从 faq 开始:

. quietly by date id:  gen dup = cond(_N==1,0,_n)
. browse date id dup

这是输出:

date            id    dup
360             1003    0
360             1005    0
360             1017    1
360             1017    2
360             1019    1
360             1019    2
360             1019    3
360             1023    1
360             1023    2
360             1023    3

我不明白为什么第三行 (360, 1017, 1) 是重复的 (dup==1)...它是 ID 为 1017 的第一行。我错过了什么?

我正在使用 Stata 12。

你逻辑混乱了。

对于每个组,由带有 by 前缀的变量确定,如果有多个观察值,则计数从 1 开始(参见 help _n)。变量 dup 表示您所指的各个组的最后一次观察(观察 4)表示有两个相同的观察:

360             1017    1
360             1017    2

当且仅当不存在重复项时,观察结果才用 0 标记。例如观察2:

360             1005    0

检查最小修改代码的结果:

quietly bysort date id:  gen dup2 = cond(_N==1,0,_N)
list, sepby(date id)

这可能会对您的原始公式有所帮助。

你得到了你想要的。如果值的组合是唯一的(仅出现一次),则 _N 为 1,返回值为 0。

否则每个组的 _N 为 2 或更多,重复(相同)的观察值被分配值 1、2(依此类推,视情况而定)。

在这里和其他地方,重复的(相同的)观察在指定的变量上被识别(这里 id date)。