2015-10-02 42 views
2

考虑下面的代码,以检测是否有重复,从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)...它是第一行,编号为1017。我错过了什么?

我在Stata 12.

回答

2

你对这个逻辑感到困惑。

对于每个组,由by前缀使用的变量确定,如果有多个观察值,则计数从1开始(请参阅help _n)。为你指(观察4)的各组的最后观察的可变dup指出有两种观察结果是相同的:

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) 

,并可以帮助您与原配方。

1

你得到了你所要求的。如果值的组合是唯一的(仅出现一次),那么_N为1并且返回值为0.

否则_N对于每个组为2或更多,并且重复(相同)观察值被指定为值1,2(和酌情如此)。

在此处和其他地方,在指定的变量(此处为id date)上标识了重复的(相同的)观察结果。