我正在對200個村莊進行隨機抽樣調查。使用QGIS,我從原來的村莊中挑選了一個5-10公里的隨機點。然後,我從國家統計局獲得了200個「鄰居」村莊的村代碼以及另外10個鄰居村莊的緩衝區。所以我總樣本爲:Stata:組內的唯一排序點
200原村+ 210個鄰居村莊= 410個自然村,總
我們馬上就要開始了實地考察,我想給每個調查小組的地圖1個原村+最近的鄰居村莊。因爲我也在一些密集的城市地區進行調查,有時候一個鄰居村莊實際上離一個以上的原始村莊非常近。
我的問題是這樣的:如果我在QGIS中運行Distance Matrix
,將一個老村落與最近的鄰居村莊相匹配,我會在後者中得到重複。爲了解決這個問題,我將每個老村落與最近的鄰居村莊進行了匹配。我的主要想法/目標是挑選尚未挑選的最近鄰居。
我結束了一個.csv像這樣:
正如你可以看到,採摘五個最近的村莊,我得到重複 - 鄰國村79爲附近的顯示最多原來的村莊1,2,3,4。這很好,只要我可以指定鄰居村79至一個(且只有一個)原始村莊,然後剩下的唯一匹配。
然後,我想要做的就是將每個原始村莊與一個鄰居村莊進行唯一匹配。我嘗試了一堆東西,其中沒有一個能夠起作用:我的感覺是,我需要循環訪問原始村莊組,將一個變量(例如taken==1
)分配給其中一個鄰居村莊,然後 - 以某種方式 - 讓每個實例那taken==1
適用於所有例如說,鄰居村79.
下面是一些示例代碼,我在想什麼。注意:這與我鄰居的163個唯一匹配。
gen taken = 0
so ea distance
by ea: replace taken=1 if _n==1
keep if taken==1
codebook FID ea
這也行不通;它只是設置所有OBS taken
1:
foreach i in 5 4 3 2 1 {
by ea: replace taken=1 if _n==`i' & taken==0
}
我需要做什麼,我想,是循環在兩個_N
和_n
,也許使用if/else
。但我不知道如何把它放在一起。
(四角切圓,是有循環更好的辦法了在Stata減少值?在其他編程語言類似i--
?)
最好將數據格式化爲代碼而不是圖像。它有利於複製/粘貼操作。在Stata中,你可以使用'list,clean noobs'並在這裏複製。 –