我正在对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'并在这里复制。 –