全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
4786 8
2020-08-04
悬赏 200 个论坛币 已解决
我现在有5000个酒店的地理坐标,现在想要计算每一家酒店附近邻居的数目。假设id为1的酒店500米内有3个酒店,id为1 的这一行后面就显示为3。
下图是我的数据截图示例。
我有个大体的思路,要嵌套一个for循环。但是不知道具体该怎么做,求大神帮忙
foreach i in id{

gen neighbor(`i')=0
foreach i in id{
geodist lat lon lat(`i') lon(`i'), gen(distance)
replace neighbor(`i')=neighbor(`i')+1 if distance<0.310685596119
}
}

微信图片_20200804110329.png

最佳答案

DΘstinyじò 查看完整内容

试一下以下代码。关于globdist和geodist的说明,二者在算法上有略微差异,globdist的地球半球默认是自动,使用数据中平均纬度的地球半径,geodist默认是6371km,当然二者分别使用选项worldradius、 radius可做统一。半径统一的基础上还是有些许不同,geodist还需加入 sphere选项,二者计算结果就会相同。具体的细微差异,可以自行选择。 选择globdist命令是因为它可以定一个基准位置,然后一次计算基准位置与变量中其他位置的距离 ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-8-4 11:14:28
试一下以下代码。
复制代码
关于globdist和geodist的说明,二者在算法上有略微差异,globdist的地球半球默认是自动,使用数据中平均纬度的地球半径,geodist默认是6371km,当然二者分别使用选项worldradius、 radius可做统一。
复制代码
半径统一的基础上还是有些许不同,geodist还需加入 sphere选项,二者计算结果就会相同。具体的细微差异,可以自行选择。
选择globdist命令是因为它可以定一个基准位置,然后一次计算基准位置与变量中其他位置的距离,用循环来构造距离矩阵数据。geodis可计算二点间的距离,多对情况下,需要手动构造出相应成对的位置再进行计算。
具体可以help globdist了解。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-8-6 21:51:45
DΘstinyじò 发表于 2020-8-5 16:04
试一下以下代码。
关于globdist和geodist的说明,二者在算法上有略微差异,globdist的地球半球默认是自动, ...
您好,感谢您的回答。我还有个问题,想请教一下,我更新了下数据,目前实际酒店数目是30000多个,我跑数据的时候报错了
qui tab hotelid
too many values
r(134);
我看了下这个问题。
Search of official help files, FAQs, Examples, SJs, and STBs

[P]     error . . . . . . . . . . . . . . . . . . . . . . . .  Return code 134
        too many values
        1) You attempted to encode a string variable that takes on
        more than 65,536 unique values.  2) You attempted to tabulate
        a variable or pair of variables that take on too many values.
        If you specified two variables, try interchanging them.
        3) You issued a graph command using the by option.  The
        by-variable takes on too many different values to construct
        a readable chart.

(end of search)
我看这个问题显示60000以下都可以,为什么3万不行啊。
我想请教一下,这个问题如何解决
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-8-6 23:00:43
DΘstinyじò 发表于 2020-8-4 11:14
试一下以下代码。
关于globdist和geodist的说明,二者在算法上有略微差异,globdist的地球半球默认是自动, ...
你好,我的酒店数目扩展到了30000个,报错了
. qui tab hotelid
too many values
r(134);
我看这个错误的描述,说是60000内就可以,为什么3万就不行了呢?
请问怎么解决合适呢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-8-7 12:44:30
aixueguanli 发表于 2020-8-6 23:00
你好,我的酒店数目扩展到了30000个,报错了
. qui tab hotelid
too many values
我修改了回答,第一段命令的4、5行。就是你的hotelid标识要唯一就可以了,这一步就是要知道一下酒店个数。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-8-7 22:22:21
DΘstinyじò 发表于 2020-8-7 12:44
我修改了回答,第一段命令的4、5行。就是你的hotelid标识要唯一就可以了,这一步就是要知道一下酒店个数。 ...
您好,今天我跑了这个代码,发现有23个酒店返回的neighbor是-1,这个结果我很反常。麻烦帮忙再确认一下。
另外,希望你在能在这个代码中,加入两行,计算一下每个酒店所有邻居的平均得分。我每个酒店都有rating,您做一个累加,再除一下总的neighbor数即可。
另外,麻烦你在回答本条后,申请一下奖励,我还想再感谢一下您。
真的太麻烦您了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群