名师讲堂|使用 Stata 计算上市公司供应链地理加权距离

指标来源

供应链地理加权距离指标来自邹颖、石福安、祁亚发表在《世界经济》2026 年第 1 期的论文《以数促联:公共数据开放与企业供应链地理布局》。

该论文采用堆叠双重差分模型考察公共数据开放对企业供应链地理布局的影响,其中核心被解释变量即为供应链地理加权距离,包括两个维度:

  • 供应商加权距离(Disws):衡量上市企业与主要供应商之间的地理距离(加权);
  • 客户加权距离(Diswc):衡量上市企业与主要客户之间的地理距离(加权)。

论文发现,公共数据开放能打破地理距离约束,拓宽企业供应链分布范围。

指标定义与计算公式

数据来源

该指标的测算需要三类数据:

  1. 上市公司注册地址与办公地址数据:包含 2000~2024 年所有沪深 A 股上市公司的注册地址和办公地址经纬度信息,以及所处省市区县。
  2. 上市公司前 5 大供应商数据:包含 2001~2024 年上市公司前 5 大供应商的工商注册信息匹配结果,含供应商经纬度、采购额及采购额占比。
  3. 上市公司前 5 大客户数据:包含 2001~2024 年上市公司前 5 大客户的工商注册信息匹配结果,含客户经纬度、销售额及销售额占比。

计算公式

对于上市公司 i 在第 t 年,分别计算供应商加权距离和客户加权距离:

地理距离计算方法

地理距离采用 Stata 的 geodist 命令计算球面距离(Vincenty 球面公式)。geodist 是 Stata 中常用的地理距离计算命令,其基本语法为:

geodist lat1 lon1 lat2 lon2, sphere gen(dist_km)

其中:

  • lat1 lon1 为第一个点的纬度和经度;
  • lat2 lon2 为第二个点的纬度和经度;
  • sphere 选项指定使用球面距离公式(而非椭球面公式);
  • 生成的变量单位为千米(km)。

上市公司地址使用的是办公地址(而非注册地址),这与论文中基于实际经营地址的选择一致。

加权方式说明

权重采用的是供应商采购额占前五大供应商采购总额的比例(而非供应商采购额占企业总采购额的比例)。这是因为上市公司年报中通常只披露前五大供应商/客户的名称和交易金额,无法获取完整的采购/销售总额数据。

计算过程

第 1 步:参数设置与数据读取

首先设置数据路径并读取三类数据:

clear all
set more off

global dir "/Users/ac/Desktop/使用 Stata 计算上市公司供应链地理加权距离"

global gys_file "$dir/2001~2024年上市公司前5大供应商工商注册信息匹配结果(含经纬度及所处的省市区县).dta"
global kh_file "$dir/2001~2024年上市公司前5大客户工商注册信息匹配结果(含经纬度及所处的省市区县).dta"
global addr_file "$dir/2000~2024年上市公司注册地址与办公地址(含经纬度、所处的省市区县及搬迁距离).dta"
global outfile "$dir/2001~2024年上市公司供应链地理加权距离.dta"

use "$addr_file", clear
keep 股票代码 年份 办公地址_经度 办公地址_纬度 股票简称 行业代码C 办公地址_省 办公地址_市
rename 年份 统计年份
drop if missing(统计年份) | missing(办公地址_经度) | missing(办公地址_纬度)

tempfile addr_temp
save `addr_temp'

注意:tempfile 用于创建临时文件,Stata 会话结束后自动删除。这里将过滤后的办公地址数据保存为临时文件,以便后续的供应商和客户数据分别合并使用。

第 2 步:计算供应商加权距离

首先读取供应商数据,筛选有效记录(年报、有经纬度、有采购额):

*- 此处代码需下载讲义材料查看~

关键逻辑说明:geodist 的参数顺序是 纬度在前、经度在后,这与经纬度的书写习惯不同(书写时通常”经纬度”),务必注意不要写反。collapse (sum) weighted_dist (count) ratio_s 表示按组求 weighted_dist 的总和和 ratio_s 的计数(即有效供应商数)。最后用 log(1 + weighted_dist) 得到加权距离的对数值。

第 3 步:计算客户加权距离

客户加权距离的计算逻辑与供应商完全对称,只是将”供应商采购额”替换为”客户销售额”:

*- 此处代码需下载讲义材料查看~

第 4 步:合并结果并输出

将供应商加权距离和客户加权距离合并到上市公司信息表中:

use "$addr_file", clear
keep 股票代码 年份 股票简称 行业代码C 办公地址_经度 办公地址_纬度 办公地址_省 办公地址_市
rename 年份 统计年份

*- 左连接供应商加权距离
merge 1:1 股票代码 统计年份 using `gys_weighted', nogen

*- 左连接客户加权距离
merge 1:1 股票代码 统计年份 using `kh_weighted', nogen

sort 股票代码 统计年份

*- 去除 2000 年数据
drop if 统计年份 < 2001

save "$outfile", replace

注意:由于使用了 tempfile 保存中间结果,实际运行时需要将 gys_weighted 和 kh_weighted 的保存与加载放在同一 Stata 会话中。完整脚本中使用了 tempfile 链式操作。

描述性统计

使用 Stata 计算得到的描述性统计结果:

变量 样本量 均值 中位数 标准差
Disws 9,413 5.840 6.197 1.361
Diswc 12,363 5.915 6.408 1.504

可以看到:

  • 供应商加权距离(Disws)和客户加权距离(Diswc)的中位数分别为 6.197 和 6.408,均值分别为 5.840 和 5.915;
  • 由于取了对数变换,中位数大于均值说明存在明显的左偏分布;
  • 客户加权距离的标准差(1.504)略大于供应商加权距离(1.361),说明不同企业与客户的地理距离差异更大。

说明:上述描述性统计基于全样本(2001~2024 年)计算,与论文中 2007~2022 年的子样本统计量存在差异属于正常现象。

完整 Stata 脚本

*- ============================================================
*- 计算上市公司与供应商/客户的加权地理距离(Stata 版本)
*- 参考论文:以数促联:公共数据开放与企业供应链地理布局(邹颖等, 2026)
*-
*- 公式:
*- Disw_s_it = ln(1 + Σ Dis_s_ipt × Ratio_s_ipt)
*- Disw_c_it = ln(1 + Σ Dis_c_iqt × Ratio_c_iqt)
*-
*- 距离计算:geodist 命令(Vincenty 球面距离)
*- 地址选择:上市公司使用办公地址
*- 数据计算:微信公众号 RStata
*- ============================================================

clear all
set more off

*- ---- 1. 参数设置 ----
global dir "/Users/ac/Desktop/使用 Stata 计算上市公司供应链地理加权距离"

global gys_file "$dir/2001~2024年上市公司前5大供应商工商注册信息匹配结果(含经纬度及所处的省市区县).dta"
global kh_file "$dir/2001~2024年上市公司前5大客户工商注册信息匹配结果(含经纬度及所处的省市区县).dta"
global addr_file "$dir/2000~2024年上市公司注册地址与办公地址(含经纬度、所处的省市区县及搬迁距离).dta"
global outfile "$dir/2001~2024年上市公司供应链地理加权距离.dta"

*- ---- 2. 准备上市公司办公地址 ----
use "$addr_file", clear
keep 股票代码 年份 办公地址_经度 办公地址_纬度 股票简称 行业代码C 办公地址_省 办公地址_市
rename 年份 统计年份
drop if missing(统计年份) | missing(办公地址_经度) | missing(办公地址_纬度)
tempfile addr_temp
save `addr_temp'

*- ---- 3. 计算供应商加权距离 ----
*- 此处代码需下载讲义材料查看~

*- ---- 4. 计算客户加权距离 ----
*- 此处代码需下载讲义材料查看~

*- ---- 5. 合并结果 ----
use "$addr_file", clear
keep 股票代码 年份 股票简称 行业代码C 办公地址_经度 办公地址_纬度 办公地址_省 办公地址_市
rename 年份 统计年份

merge 1:1 股票代码 统计年份 using `gys_weighted', nogen
merge 1:1 股票代码 统计年份 using `kh_weighted', nogen

sort 股票代码 统计年份

*- ---- 6. 描述性统计 ----
summarize Disw_s Disw_c, detail

*- ---- 7. 去除 2000 年数据并保存 ----
drop if 统计年份 < 2001
save "$outfile", replace

参考文献

邹颖、石福安、祁亚,2026:《以数促联:公共数据开放与企业供应链地理布局》,《世界经济》第 1 期。

点击这里跳转到 RStata 短书平台获取附件:名师讲堂|使用 Stata 计算上市公司供应链地理加权距离

评论