2015-04-17 40 views
1

說我有這樣的數據:如何看組內的所有值都是唯一的/識別那些沒有

group value 
1  fox 
1  fox 
1  fox 
2  dog 
2  cat 
3  frog 
3  frog 
4  dog 
4  dog 

我希望能夠分辨的value所有值都相同在group之內。看到這另一種方式是,如果我可以創建一個包含組內的value所有唯一值類似以下的新變量:

group value all_values 
1  fox fox 
1  fox fox 
1  fox fox 
2  dog dog cat 
2  cat dog cat 
3  frog frog 
3  frog frog 
4  dog dog 
4  dog dog 

正如我們看到的,除了組2所有的組都只有一個value不同的條目。

一種方式我認爲類似的事情(但不是很好)可以做的是做到以下幾點:

bys group: egen tag = tag(value) 
bys group: egen sum = sum(tag) 

,然後根據的sum的價值,我可以判斷是否有超過一個條目。

但是,egen標籤不適用於bysort。有沒有其他有效的方式來獲取我需要的信息?

回答

2

有幾種方法可以做到這一點。其一是:

clear 
set more off 

input /// 
group str5 value 
1  fox 
1  fox 
1  fox 
2  dog 
2  cat 
3  frog 
3  frog 
4  dog 
4  dog 
end 

*----- 

bysort group (value) : gen onevalue = value[1] == value[_N] 

list, sepby(group) 

假設你有missings,但想忽略他們(不drop他們);那麼下面的工作:

clear 
set more off 

input /// 
group str5 value 
1  fox 
1  fox 
1  fox 
2  dog 
2  cat 
3  frog 
3  frog 
4  dog 
4  dog 
5  ox 
5  ox 
5  
6  cow 
6  goat 
6  
end 

*----- 

encode value, gen(value2) 

bysort group (value2) : replace value2 = value2[_n-1] if missing(value2) 
by group: gen onevalue = value2[1] == value2[_N] 

list, sepby(group) 

也是這個FAQ見,其中有技術,類似於原來的策略。

+2

http://www.stata.com/support/faqs/data-management/listing-observations-in-group/直接基於相同的想法。 –

相關問題