news 2026/4/18 6:41:25

Stata 数据合并:gvkey 补齐 6 位编码再 merge

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Stata 数据合并:gvkey 补齐 6 位编码再 merge

温馨提示:若页面不能正常显示数学公式和代码,请阅读原文获得更好的阅读体验。

作者:丁闪闪 (连享会)
邮箱:lianxhcn@163.com

  • Title: Stata 数据合并:gvkey 补齐 6 位编码再 merge
  • Keywords: Compustat, CRSP, IBES, GVKEY, merge, 数据清洗, 横向合并, 添加零字符, 字符串补零

1. 简介

在处理 Compustat、CRSP、IBES 等数据库的美股数据时,GVKEY几乎是绕不过去的主键之一。最常见的使用场景是:你在做公司层面 (firm-level)的合并,比如把财务报表数据和股票市场数据拼接起来,GVKEY往往就是关键的 merge 变量。

但实际操作时,GVKEY很容易"看起来一样,merge 却对不上"。原因通常不是数据本身错了,而是存储类型编码格式不一致:

  • 有些数据库里是gvkey(数值型),例如1004
  • 有些数据库里是GVKEY(字符型),例如"001004"
  • 有些数据已经是足额 6 位字符编码
  • 有些数据是"不足六位但不补零"的写法 (比如"1004")

因此,merge 前至少要检查两件事:

  • (1)变量类型一致:两边都必须是 numeric 或 string,不能一边数值一边字符串
  • (2)补零非常关键1004"001004"在 merge 里是两回事

本文用一个小例子,介绍几种常用的方法,说明如何把数值型gvkey统一处理成 6 位字符串编码。

2. 数据和目标

我们先生成一份包含 5 行观测值的数据,gvkey为数值型:

clear input gvkey 201 1004 11008 123456 999999 end

我们期待最终得到的 6 位编码:

  • 201"000201"
  • 1004"001004"
  • 11008"011008"
  • 123456"123456"
  • 999999"999999"

目标是生成一个新变量:

  • 变量名:GVKEY
  • 类型:字符串str6
  • 规则:不足 6 位,左侧补零

3. 首选方案:tostring + format(%06.0f)

由于gvkey是数值型变量,我们可以使用tostring命令将其转换为字符串变量,并使用format(%06.0f)来补齐 6 位编码。

tostring gvkey, gen(GVKEY) format(%06.0f) list gvkey GVKEY, clean

结果如下:

. list gvkey GVKEY, clean gvkey GVKEY 1. 201 000201 2. 1004 001004 3. 11008 011008 4. 123456 123456 5. 999999 999999

解读:

  • tostring gvkey:把数值型gvkey转成字符串变量

  • gen(GVKEY):生成新变量名为GVKEY

  • format(%06.0f):把数值按"6 位整数"输出

    • %06.0f的含义是:总宽度 6 位、整数输出、小数位为 0、不足位数左侧补 0。即201被格式化为"000201"1004被格式化为"001004";而123456则维持原样"123456"

4. 其他可选方案

下面的方案都能实现同样的目标。为了方便你在同一个 dofile 里多种写法一起跑,我把新变量命名为GVKEY_A,GVKEY_B, ...,避免报错覆盖。

4.1 方案 A:string()+ 格式%06.0f

gen str6 GVKEY_A = string(gvkey, "%06.0f") list gvkey GVKEY_A, clean

结果同上,不在列示。具体解释如下:

  • string(x, "%06.0f"):把数值变量x转为字符串,并按 6 位补零格式输出
  • 优点是:写法像 "定义规则",可读性很强
  • 缺点是:需要你在gen时显式指定str6。因此,当变量长度超过 6 位时,需要手动调整str类型的长度。

4.2 方案 B:字符串拼接补零 + 取最后 6 位

这个方法常见于各种 "编码补齐" 的场景,本质是:

  1. 先把数字转字符串
  2. 左边拼 6 个 0
  3. 再截取最后 6 位
tostring gvkey, gen(gvkey_str) format(%12.0f) force gen str6 GVKEY_B = substr("000000" + gvkey_str, -6, 6) list gvkey gvkey_str GVKEY_B, clean

解释:

  • "000000" + gvkey_str:把 6 个 0 拼到左侧
  • substr(..., -6, 6):从末尾开始,取字符串最后 6 位
  • 优点:速度快、技巧通用;可以将"000000"替换为任意长度的补零字符串;也可以用于在字符串左侧补齐其它字符,如"xxxxxx"+gvkey_str
  • 缺点:可读性略差,且多一个中间变量

扩展:有些情况下我们需要在字符串右侧补齐字符,这种方法就很有用。例如:

gen str6 GVKEY_C = substr(gvkey_str + "xxxxxx", 1, 6) list gvkey gvkey_str GVKEY_C, clean

结果如下;

. list gvkey gvkey_str GVKEY_C, clean gvkey gvkey_~r GVKEY_C 1. 201 201 201xxx 2. 1004 1004 1004xx 3. 11008 11008 11008x 4. 123456 123456 123456 5. 999999 999999 999999

5. 类似场景

GVKEY的补零问题,本质上属于一类非常普遍的数据清洗任务:把"看起来像编号"的变量统一为固定长度的字符串编码

只要你做过跨数据库合并、跨系统匹配、或者需要把编码输出到表格/图形里,类似的问题几乎一定会遇到。

下面补充一些典型场景,便于你快速形成迁移思路。

  • 中国上市公司代码补齐 6 位 (证券代码 / 股票代码)
    在 Wind、CSMAR、交易所公告、券商研报等来源之间切换时,经常出现一边是数值型4638,另一边是字符串"000004""000638"。如果不补零,merge 会直接掉匹配。

  • 行政区划代码 (6 位) 或统计地理编码 (省市县)
    地理编码在不同来源里经常出现"截断/省略"的情况,例如把"440305"存为数值440305还好,但如果某些系统导出时把前导零抹掉,或者采用"省-市-县分列"的方式,就很容易造成口径不一致。涉及到空间匹配、区域合并、政策试点识别时尤其常见。

  • 邮政编码 ZIP / Postcode (长度固定,但前导 0 极其关键)
    典型例子是美国 ZIP Code:02138(Cambridge, MA) 这类邮编前面有 0。
    一旦被当作数值型导入,就会变成2138,导致你按邮编 merge、分组统计、或做地理映射时出现系统性错误。

温馨提示:若页面不能正常显示数学公式和代码,请阅读原文获得更好的阅读体验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 23:02:30

照明行业代表企业综合实力对比分析

在现代建筑以及室内设计当中,照明已然从仅仅的功能性需求,转变成为对空间氛围、视觉效果乃至人体健康产生影响的关键要素。伴随LED技术的成熟以及普及起来,照明行业出现了众多品牌,给消费者和工程项目造就了丰富的选择。面对市场里…

作者头像 李华
网站建设 2026/4/17 23:40:43

【工具变量】城市网络关注度数据(2011-2019)

一、数据简介 网络搜索指数被广泛用于衡量互联网上的公共利益热点。由于百度搜索指数在预测中国旅游活动方面优于谷歌搜索指数,因此采用了百度搜索指数的数据。通过“城市名称”、“城市名称旅游”、“城市名称美食”、“城市名称景点”、“城市名称酒店”等关键词…

作者头像 李华
网站建设 2026/4/17 17:50:08

社会网络仿真软件:Gephi_(14).案例分析:社交媒体影响力分析

案例分析:社交媒体影响力分析 在社交媒体平台上,影响力分析是一个重要的研究领域,可以帮助我们理解哪些用户在特定社区中具有较高的影响力,从而更好地进行市场营销、舆论引导、社区管理等。本节将通过一个具体的案例,详…

作者头像 李华
网站建设 2026/4/17 18:14:06

宏智树AI有多能打?解锁期刊论文投稿密码,告别盲目改投

作为深耕论文写作科普多年的博主,后台最常收到的提问不是“期刊论文怎么写”,而是“为什么我改了三版还是被拒稿”“图表格式总不达标该怎么办”。期刊投稿的核心痛点,从来不是“写不出”,而是“写不对路”——方向偏离期刊偏好、…

作者头像 李华
网站建设 2026/4/17 18:48:08

开源C# Winform CAN上位机源码分享

C#Winform开源一个can上位机源码,工控试验源码,通讯源码。 can接口用的周立功的dll文件。 绘图用的zedgrah。 上位机功能是读取历史转速数据,作为控制的目标转速,通过can卡,发送给风扇控制器,复现风扇转速变…

作者头像 李华