2014-10-30 78 views
0

邊緣或圓弧名單簇我有一個Stata的數據集,表示用戶之間的連接,看起來像這樣:從在Stata

src_user linked_user 
1   2 
2   3     
3   5 
1   4 
6   7    

我希望得到的東西是這樣的:

user cluster 
1  1 
2  1 
3  1 
4  1  
5  1 
6  2 
7  2 

其中isid user的計算結果爲TRUE,並且我已將所有用戶分組爲不相交的羣集。我曾嘗試將此視爲reshape問題,但沒有取得多大成功。據我所知,用戶編寫的SNA命令似乎沒有一個能夠實現這一點。

除了循環,我渴望避免使用Stata的最有效方法是什麼?

+0

以防萬一你沒有看到它,這似乎是連接組件的概念。例如,http://en.m.wikipedia.org/wiki/Connected_component_(graph_theory) – 2014-10-30 02:45:17

+0

後續的類似性質的問題收到了一些指導,請參閱http://stackoverflow.com/questions/30944575/find-social-網絡組件 - 在-STATA – 2015-06-21 19:50:12

回答

2

如果你將reshape的數據轉換成長表格,你可以使用group_id(來自SSC)來得到你想要的。

clear 
input user1 user2 
1   2 
2   3     
3   5 
1   4 
6   7 
end 

gen id = _n 
reshape long user, i(id) j(n) 

clonevar cluster = id 
list, sepby(cluster) 

group_id cluster, match(user) 

bysort cluster user (id): keep if _n == 1 
list, sepby(cluster)