全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
2017-9-18 20:13:47
jinlong1835 发表于 2017-9-18 18:39
我现在的问题有以下几个:第一,geodist计算的结果是什么呀?这个距离的单位是什么?为什么我自己用原始的 ...
结果计算的是两地之间的距离,单位应该是公里。跟三角函数计算肯定有差距,估计这个是曲线的距离,因为地球是圆形的,但是差距应该不会太大。
二维码

扫码加我 拉你入群

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

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

2017-9-18 20:15:28
jinlong1835 发表于 2017-9-18 18:39
我现在的问题有以下几个:第一,geodist计算的结果是什么呀?这个距离的单位是什么?为什么我自己用原始的 ...
* generate simulated data;

clear
set seed 1234
set obs 10
gen id1 = _n
gen double lat1 = 37 + (41 - 37) * uniform()
gen double lon1 = -109 + (109 - 102) * uniform()

* pairwise combination
preserve
rename (id1 lat1 lon1) (id2 lat2 lon2)
save geo_data, replace
restore

cross using geo_data

* 10*10 distance matrix
geodist lat1 lon1 lat2 lon2, generate(v)
keep id1 id2 v
reshape wide v, i(id1) j(id2)
使用deem编的程序,就可以得出同一组数据任何两地之间的距离,得出的是一个矩阵。
二维码

扫码加我 拉你入群

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

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

2017-9-18 20:23:31
08zjliu 发表于 2017-9-18 20:15
* generate simulated data;

clear
您太牛了,学习了,厉害厉害,多谢您的帮助,受益匪浅。
二维码

扫码加我 拉你入群

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

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

2017-9-18 20:44:42
jinlong1835 发表于 2017-9-18 20:23
您太牛了,学习了,厉害厉害,多谢您的帮助,受益匪浅。
我也是跟人家学的,deem挺厉害的,帮了很多忙。非常感谢他!
二维码

扫码加我 拉你入群

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

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

2017-9-18 22:43:55
deem 发表于 2017-9-17 23:31
最后的结果一般不需要算出来任意两点的距离,你要想清楚自己最终要的是什么
您好,您能帮忙写一个循环程序吗,我学了半天,没有搞定。非常感谢。
geodist lat1 lon1  var1 var2, generate(a1)
geodist lat1 lon1  var3 var4, generate(a2)
geodist lat1 lon1  var5 var6, generate(a3
geodist lat1 lon1  var7 var8, generate(a4)
geodist lat1 lon1  var9 var10, generate(a5)
geodist lat1 lon1  var11 var12, generate(a6)
geodist lat1 lon1  var13 var14, generate(a7)
geodist lat1 lon1  var15 var16, generate(a8)
geodist lat1 lon1  var17 var18, generate(a9)
geodist lat1 lon1  var19 var20, generate(a10)
geodist lat1 lon1   ……    ……   ,    ……
二维码

扫码加我 拉你入群

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

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

2017-11-11 09:28:44
08zjliu 发表于 2017-9-18 22:43
您好,您能帮忙写一个循环程序吗,我学了半天,没有搞定。非常感谢。
geodist lat1 lon1  var1 var2, ge ...
findit  globdist
ssc install globdist   or net install globdist

use c:\chm\数据.dta,clear  //导入数据
rename 纬度  lat               //变量重新命名
rename 经度 lon              //变量重新命名
forvalues k = 1(1)31 {              //31代表城市的数量
     local i = regionc[`k']             //regionc代表城市名称
     local lat_n = lat[`k']            //lat_n代表第n个城市的纬度的位置,local表局部暂元
     local lon_n = lon[`k']           //lon_n代表第n个城市的经度的位置,local表局部暂元
globdist kmTo`i', lat0(`lat_n') lon0(`lon_n')  // 第n个城市到第i个城市的距离
}
二维码

扫码加我 拉你入群

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

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

2017-11-11 10:57:55
deem 发表于 2017-8-28 09:34
经过测试,可行,厉害,学习了很多,感谢!
二维码

扫码加我 拉你入群

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

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

2019-12-26 20:42:23
请问为什么会显示纬度范围不对,要求在-90,90之间,可是我的数据明明已经在了呀
附件列表
1.jpg

原图尺寸 18.27 KB

1.jpg

二维码

扫码加我 拉你入群

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

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

2020-1-28 16:27:46
15521078268 发表于 2019-12-26 20:42
请问为什么会显示纬度范围不对,要求在-90,90之间,可是我的数据明明已经在了呀
你的问题解决了吗,我也出现了这个报错
二维码

扫码加我 拉你入群

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

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

2020-3-13 10:48:55
15521078268 发表于 2019-12-26 20:42
请问为什么会显示纬度范围不对,要求在-90,90之间,可是我的数据明明已经在了呀
您的问题解决了吗  我也遇到了同样的情况
二维码

扫码加我 拉你入群

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

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

2020-3-13 11:26:14
15521078268 发表于 2019-12-26 20:42
请问为什么会显示纬度范围不对,要求在-90,90之间,可是我的数据明明已经在了呀
维度在前面就对了
二维码

扫码加我 拉你入群

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

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

2020-4-26 20:48:16
请问得到的距离是地理实际距离吗?比如以km为单位计量的
二维码

扫码加我 拉你入群

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

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

2020-12-22 14:34:16
哈哈哈,谢谢您,确实把纬度放在前面就对啦
二维码

扫码加我 拉你入群

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

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

2020-12-22 14:34:46
是以实际距离km计算的呢
二维码

扫码加我 拉你入群

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

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

2021-1-25 20:42:53
deem 发表于 2017-8-28 17:35
大佬我来挖坟了,我使用cross using命令的时候电脑会跑不动,两个文件分别有20万和500个观测值,请问这个该如何处理?
二维码

扫码加我 拉你入群

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

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

2021-1-25 20:46:00
mycroft233 发表于 2021-1-25 20:42
大佬我来挖坟了,我使用cross using命令的时候电脑会跑不动,两个文件分别有20万和500个观测值,请问这个 ...
数据量感觉也不是很大,但stata一跑就死
二维码

扫码加我 拉你入群

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

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

2021-2-9 20:21:28
大神啊,我来膜拜
二维码

扫码加我 拉你入群

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

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

2022-3-24 12:19:28
我有两组经纬度数据 已经合并到了一张表上 但是怎么算距离呢 用的这个代码
SSC install geodist,replace
geodist latitude longitude lat_1 lng_1,gen(distance)
二维码

扫码加我 拉你入群

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

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

2022-3-24 12:23:17
deem 发表于 2017-8-28 09:34
我有两组经纬度数据 已经合并好了 怎么计算距离呢 我用的是这个代码 显示无效语法
SSC install geodist,replace
geodist latitude longitude lat_1 lng_1,gen(distance)
二维码

扫码加我 拉你入群

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

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

2024-8-1 20:15:37
deem 发表于 2017-9-17 13:13
实在对不起,我不小心操作点上去了,怎么都取消不了,不好意思
二维码

扫码加我 拉你入群

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

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

2024-8-2 15:36:09
jinlong1835 发表于 2017-9-18 18:39
我现在的问题有以下几个:第一,geodist计算的结果是什么呀?这个距离的单位是什么?为什么我自己用原始的 ...
请问您的问题解决了吗,我也不知道我的计算结果为什么一直出现偏差
二维码

扫码加我 拉你入群

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

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

2024-8-28 17:55:34
要在Stata中使用`geodist`命令生成400多个地区间的所有两两组合的距离(形成一个距离矩阵),你需要按照以下步骤操作:

### 步骤 1: 确保安装 geodist

首先,确保你已经安装了`geodist`命令。如果还没有安装,可以在Stata中输入:
```stata
ssc install geodist
```

### 步骤 2: 准备数据

假设你的数据集有以下结构:

- `code`: 地区代码(唯一标识)
- `longitude`: 经度
- `latitude`: 纬度

### 步骤 3: 创建距离矩阵

使用`geodist`命令计算所有组合的距离。但是,`geodist`不能直接生成一个完整的两两地区间距离的矩阵,它主要用于比较两个特定点之间的距离。

为了解决这个问题,我们可以创建一个新的数据集来存储所有可能的地区对及其对应的经纬度值,然后使用`geodist`命令计算每一对地区的距离。这可以通过下面的步骤实现:

1. **复制并合并数据**:首先,你需要将你的数据集复制一份,以确保可以进行自我连接(即每个地区与自己以及其它所有地区比较)。
```stata
preserve // 保存原始数据状态

// 复制数据集两次以创建所有组合
tempfile temp1 temp2
save `temp1', replace
append using `temp1'
save `temp2', replace

use `temp1'
merge 1:1 code longitude latitude using `temp2'
drop _merge // 删除合并信息标记变量
```

2. **计算距离**:现在,你有了一张包含所有可能地区对的数据集。使用`geodist`命令来计算每一对地区的距离。
```stata
geodist dist, lon1(longitude) lat1(latitude) lon2(_merge_longitude) lat2(_merge_latitude)
```
请注意,这里假设在复制并合并数据后,经纬度字段被命名为`_merge_longitude`和`_merge_latitude`。如果Stata没有自动重命名这些变量,请使用适当的变量名。

3. **保存结果**:最后,将计算出的距离数据集保存或导出为需要的格式。
```stata
save "distance_matrix.dta", replace // 保存为dta文件
```

4. **恢复原始状态**:
```stata
restore // 恢复到原始数据集的状态
```

### 步骤 4: 验证结果

在完成上述步骤后,你将得到一个包含所有地区对及其距离的数据集。你可以通过查询该数据集中任意地区的组合来确认计算是否正确。

以上步骤可以生成一个包含所有两两地区间距离的矩阵形式的数据集,但请注意,由于数据集可能会变得非常大(尤其是对于400多个地区),处理和存储这个完整的距离矩阵可能需要一定的资源。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

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