如果一个数据表的年份跨度是2007到2024名字里又带着“媒体关注”四个字那十有八九是做公司金融或资产定价方向的人在找的研究样本。我这些年帮人处理过不少类似数据也看过很多基于这类数据写出来的论文。一个比较普遍的现象是大家拿到“上市公司媒体关注日、年数据”之后第一反应是直接按年度聚合成面板丢进回归里跑等被审稿人问起数据口径和样本筛选才意识到问题没那么简单。媒体关注度这个变量表面上看只是“某公司某天被媒体报道了多少次”但在实证研究里它既是信息环境代理变量也是外部治理机制还是可以影响股价和公司行为的可观测因子。2007-2024这个时间窗口尤其有意思它同时覆盖了传统纸媒主导阶段、网络财经媒体爆发阶段和自媒体碎片化阶段。在这种情况下你要是不把数据口径吃透2024年的媒体报道数量跟2009年比起来完全不具有可比性——这是这类数据里最隐蔽、也最致命的坑。我这篇就结合自己做数据校验和论文复现的经验把一份2007-2024年上市公司媒体关注日、年数据从字段结构、口径演变、样本陷阱到回归前的处理链路完整拆开讲一遍。如果你是正要拿这类数据做实证的硕士生、博士生或者刚入行量化研究的朋友这篇文章应该能帮你少走不少弯路。1. 为什么实证文章都绕不开“媒体关注度”这个变量1.1 理论支撑与研究场景媒体关注度在学术文献里叫 media attention也叫 media coverage它之所以能成为高频变量底层逻辑是信息不对称。在一个信息不透明的市场里公司管理层和外部投资者掌握的信息天然不一致。媒体报道承担了信息中介的角色它把公司经营动态、财务表现、治理问题传播出去从而降低投资者获取信息的成本也压缩内幕信息的优势空间。放到回归方程里这个变量可以出现在很多位置做解释变量媒体关注度越高信息不对称越低从而影响股价同步性、盈余管理程度、公司治理水平、企业社会责任行为。这类研究非常多被解释变量可以是审计费用、投资效率、创新投入、股票崩盘风险等。做被解释变量哪些公司更容易获得媒体关注公司规模、业绩、股权结构、机构投资者持股比例、突发事件等因素都可以作为解释变量。做调节变量或分组变量比如研究信息披露质量对公司价值的影响时用媒体关注度做调节逻辑是媒体关注高的组里信息传递更充分。所以你会看到只要研究里涉及“信息环境”这个概念媒体关注度几乎就是默认首选代理变量。这也是为什么2007-2024年上市公司媒体关注日、年数据这类产品有稳定需求——它把“获取公开新闻并清洗成面板数据”这个累活提前做完了。1.2 时间窗口选择2007年为什么是常见起点很多研究者拿到数据后先看年份2007年作为起点不是随手定的。2007年是中国上市公司执行新企业会计准则的元年财务数据口径的连贯性从那一年开始明显改善。更重要的是2005年启动的股权分置改革在2006年末、2007年初进入完成阶段A股的市场化程度和信息披露监管环境发生了结构性变化。如果媒体关注度数据从2007年起步能和大多数公司财务数据、股票交易数据的可比区间对齐。另一方面2007到2024这十几年恰好是媒体形态剧烈变化的时期。早期公众获取上市公司信息主要靠报纸和电视2009年后新浪财经、东方财富网等网络财经媒体快速崛起2013年之后微博、微信、股吧等社交平台的讨论量变成不可忽略的信息源。这种媒体结构变化对研究者来说是挑战也是机遇——你可以用网络媒体的兴起做自然实验也可以用“传统报纸报道量”和“网络媒体讨论量”做对比检验。2. 日度表与年度表的字段逻辑别被“媒体”两个字带偏2.1 一份典型日度数据的字段长什么样市面上这类数据的字段设计大同小异核心是“谁、哪天、被哪些媒体、报道了多少次”。我经手过的日度数据表常见字段大概是这样字段名类型示例含义股票代码文本600519证券交易所代码股票简称文本贵州茅台公司简称交易日期日期2023-08-01媒体报道所属日期媒体来源文本新浪财经、东方财富网具体媒体渠道报道标题文本公司发布半年度业绩预告新闻标题报道数量整数5当日该来源报道篇数情感倾向分类正面/中性/负面如果数据商做了文本情绪分析需要注意不同来源的日度表设计差异很大。有的数据商把“报道数量”细分成“标题提及次数”和“正文提及次数”有的会把“负面新闻数量”单列一列有的只统计公司全称出现在新闻标题或正文中的情况。就我的经验来说拿到日度表第一件事不是跑回归而是确认它的“报道数量”到底怎么定义——是公司全称、简称出现在标题中的新闻篇数还是正文中提及公司的次数。这两个口径差别能有一倍以上。2.2 年度表的生成逻辑与两个口径差异年度表通常是从日度表聚合出来的核心变量是“上市公司当年被媒体报道的总次数/总篇数”。但聚合方式不止一种最常见的有四种年度总报道数量当年日度报道数量求和直观但容易受极端值影响年度报道天数当年有多少个交易日出现了该公司的报道能体现覆盖持续性月度报道数量均值先算月度再算年度均值能缓解某个月集中报道的问题是否有报道的虚拟变量当年有没有在任何媒体上出现过用于区分“被关注”和“完全没被关注”。年代数据看起来简洁但如果你打算用年度数据做模型一定要搞清楚数据商用的是哪种聚合逻辑。更谨慎的做法是拿到日度数据后自己按研究假设重新聚合一遍。比如你研究的是“持续关注”对治理的影响那就应该用年度报道天数而不是总报道次数如果你研究的是“舆情热度峰值”那应该用全年最高单日报道量而不是总量。2.3 日报与网络财经媒体混用的边界“媒体关注”里的媒体来源通常分为几层一是传统权威报纸二是网络财经媒体三是股吧和社交平台。学术研究中一个比较稳妥的做法是用“权威报纸 主要网络财经媒体”的合并口径作为主回归测量把股吧讨论量单独拿出来做稳健性检验。原因在于社交平台讨论噪音大、匿名化严重话题发散性强直接混进核心变量会让结果很难解释。但也要提醒一句不要把“媒体报道”和“网络搜索热度”画等号。搜索热度反映的是主动检索行为媒体报道反映的是新闻供给行为两者的生成机制完全不同。用媒体报道数据去解释“投资者关注”时需要注意理论链条上还有一层“媒体报道→投资者注意→交易行为”的传导关系不是所有研究都适合直接替代。3. 2007-2024年里的数据口径演变和样本陷阱3.1 报纸电子化的覆盖率问题如果你拿到一份从2007年开始包含“报纸媒体报道”的数据要警惕早年报纸电子化的覆盖率问题。2007到2011年前后很多报纸数据库对早期版面的扫描质量参差不齐OCR识别会产生漏报和错字。对上市公司简称这种高频词错字影响尤其大——公司简称一旦被识别成别的词形这篇文章就会被漏掉。所以年份越早的媒体关注数据理论上漏报率越高。怎么判断你有没有碰上这个问题很简单挑几个在2008年、2010年发生过大事件的知名公司查一查当年数据里有没有对应报道记录。如果事件本身在当时被各大财经媒体广泛报道而数据表里完全没有记录那说明早期覆盖率有缺口。这种缺口不一定会毁掉你的回归但一定要在稳健性检验里说明或者干脆把主样本起始年份后移到报纸电子化更稳定的时点。3.2 网络媒体崛起带来的结构性断点抛开覆盖率问题2007到2024年最明显的特征就是媒体报道总量逐年上升。这主要不是上市公司变得更“有新闻”而是媒体供给能力发生了数量级变化。2015年之后各种财经客户端、自媒体平台的机器写作和快速转载让同一条公司新闻可以在几个小时内被几十个站点重复发布。这对面板数据意味着什么意味着“年度媒体报道总量”这个变量的均值会随年份系统性抬升。如果你不控制年份固定效应很容易出现伪相关——媒体报道多的年份股价波动或公司指标也可能恰好有系统性变化。我看过不少初稿把年份效应漏掉了结果媒体关注度的系数被吹得非常大这就是典型的遗漏变量问题在作祟。反过来如果你故意只保留传统权威报纸来源可以部分规避网络媒体数量膨胀的噪音但代价是2012年后报纸媒体的信息代表性也在下降。3.3 公司状态变化退市、借壳、更名与简称匹配媒体关注度数据是按股票代码和公司简称组织的但A股里有大量状态变化公司被ST、*ST简称里多了字母媒体会继续按新简称报道公司被借壳上市股票代码不变但公司名字、行业属性和主营业务全变了公司主动更名比如从“某某科技”改成“某某控股”公司退市后期不再有媒体报道记录但财务数据表里可能仍有少量交易记录直到退市日。这类变化处理得是否干净直接决定样本的连续性。我的建议是保留股票代码作为唯一标识不要用简称做连接键。做实证时如果你想研究存续公司样本可以把“后续退市”的观测保留到退市当年然后单独加一个“是否退市”虚拟变量而不是武断删除。删除有退市记录的样本本质上是对失败公司做条件删除会让回归样本产生生存者偏差。公司简称匹配是另一个细节坑。有些数据商按“公司全称”去匹配新闻匹配率高但会漏掉大量用简称报道的文章有些按“股票简称”匹配又容易撞车比如“某某科技”这种简称在A股里可能对应好几家公司。经验做法是维护一张别名表把全称、简称、缩写、历史曾用名全部映射到统一股票代码。处理过这类数据的人都知道这个环节不能省。3.4 时间对齐报告期错位和交易日归属媒体关注度的日期归属看似简单实际经常出问题。一个典型场景是很多新闻是前一个交易日收盘后或者当天凌晨发布的数据商是按“发布时间”还是“抓取时间”打标会导致报道落在不同的交易日。如果你用事件研究法把“第0天媒体关注度”作为事件窗口指标日期归属差一天整个累计超额收益的计算都会跟着跑偏。还有财务数据拼接时的报告期错位。年度媒体关注度数据通常是自然年度的比如2020年1月1日到2020年12月31日而财务数据里的“年度”可能是2020年12月31日的年报数据。多数实证研究里t年媒体关注度会对t1年或t年的公司行为产生影响这里到底用同期还是滞后一期需要跟你的研究假设完全匹配。审稿人很爱抓这个细节我在修改论文时就被问过“为什么媒体关注度与被解释变量用的是同期数据”如果没有扎实的理论解释这就是个风险点。4. 从日度到回归样本一条可复现的处理链路4.1 日度数据的标准化清洗拿到日度数据后我一般会按下面的顺序做标准化清洗统一股票代码格式。深交所和上交所代码都是6位数字但不同来源可能带后缀或前导符号统一清洗成纯6位文本。剔除交易日期缺失、股票代码缺失的样本。处理重复记录。两张数据表拼接后如果出现同一股票同一天多条重复记录需要确认是多个媒体来源还是数据重复。检查“报道数量”有没有异常值比如某天媒体报道量上万通常是抓取环节出了问题要逐条核实。对每家公司计算“年报道量”同时保留“有报道天数”和“报道来源数”辅助变量。这个环节不要贪快。日度数据少则几十万行多则几百万行人为排查不现实但统计筛查一定要做干净否则后面的回归结果都是海市蜃楼。4.2 Python聚合代码把日度变成年度下面我贴一段可以直接跑的Python代码逻辑是统计每家上市公司每年的媒体报道总量、报道天数和月度报道均值import pandas as pd # 读取日度数据 df pd.read_csv(media_daily_2007_2024.csv, dtype{股票代码: str}) df[交易日期] pd.to_datetime(df[交易日期]) # 提取年份和月份 df[年份] df[交易日期].dt.year df[月份] df[交易日期].dt.month # 先按公司年月统计月度报道量 monthly ( df.groupby([股票代码, 年份, 月份])[报道数量] .sum() .reset_index() ) # 再按公司年聚合 yearly ( month.groupby([股票代码, 年份])[报道数量] .agg(年度报道总量sum, 月度报道均值mean) .reset_index() ) # 统计有报道的交易日天数 active_days ( df.groupby([股票代码, 年份]) .agg(有报道天数(交易日期, nunique)) .reset_index() ) # 合并 yearly yearly.merge(active_days, on[股票代码, 年份], howleft)这段代码的一个关键处理是先聚合到月度再聚合到年度。这么做的目的是同时得到“年度总量”和“月度均值”后者能避免某一个月集中爆发式报道对年总量的过度拉动。如果你只按天直接求和那2023年某家公司在连续一周内被刷屏的数值就会给它全年媒体关注度贡献巨大比重研究结论容易受个别舆情事件支配。4.3 与财务数据的拼接和描述性统计聚合出年度媒体关注度后下一步就是跟财务数据表做匹配。我用Stata比较多常用的拼接代码是* year 为年份stkcd 为股票代码 merge m:1 stkcd year using financial_data.dta keep if _merge 3 drop _merge拼接时有几个细节必须注意行业代码和行业名称要用同一版本不同年份如果行业分类标准变化要做前后统一财务变量里的“年度”要确认是报表期还是公告期避免把2020年报的数据错误匹配到2020年媒体关注度上一年内上市的次新股上市前没有股票代码媒体关注数据本来就缺失这类样本要单独记录缺失原因。描述性统计阶段媒体关注度变量通常严重右偏绝大多数公司每年只有少量报道少数热门公司被大量报道。所以主回归之前对媒体报道总量取对数或做Winsorize前后各缩尾1%都是常规操作。不过要注意取对数后系数的经济含义是“媒体报道数量增长1%”对因变量的影响写论文解读时要对应清楚。4.4 数据质量校验的几种方法我每处理一批数据会做三层校验第一层是总量校验。日度数据按年汇总后的总量应当和年度数据表一致如果对不上说明日度表和年度表来自两套清洗流程先解决差异再往下走。第二层是案例校验。选几家知名度较高的公司比如某大型白酒消费企业、某头部股份制银行按年份手动收集它们当年是否有可证实的大事件再查数据表里对应年份的报道数量。一个健康的数据集在大事件爆发月的报道量应该有明显跃升。第三层是分布校验。按年度、行业分组看报道量均值和中位数正常情况下应该呈逐年缓慢上升或者随市场热度波动的趋势。如果某个年份突然从几千跳到几百万八成是网络媒体口径在某一年扩大了来源范围。这种结构性变化不是你公司层面的处理能解决的必须通过数据商或者来源标记去识别。5. 我用这类数据踩过的实用坑5.1 关注度不是情绪两个最易混淆的概念这是我在论文评审里见过最多的一种混淆。“媒体关注度”只回答“有没有人报道”不回答“报道者态度是好是坏”。一家公司可能因为业绩暴雷获得极高关注度但新闻内容几乎全是负面的另一家公司可能因为发布重磅利好也获得高关注度。这两类情况在“媒体报道次数”这个维度上数值可能接近但经济含义完全相反。如果你的研究假设涉及媒体基调那就必须另外引入情感分析数据或者文本情绪数据替成“正面报道数量”“负面报道数量”而不能在“报道总数”上直接做解释。否则遇到股价下跌、崩盘风险这类被解释变量报道总数系数符号很容易出现悖论。这一点写论文时最好用一小节单独交代清楚审稿人非常看重测量的有效性。5.2 转载计数多算出来的热度新闻转载是媒体关注度数据里最麻烦的问题。一条关于上市公司的新闻稿发出后几十家财经网站和客户端都会原样转发从公司信息传播角度看这些转载确实扩大了信息的覆盖面但从“独立报道”角度看它们本质上是同一条内容的重复计数。两种口径没有绝对对错但你必须知道自己用的是哪一种。我用过一个比较折中的方案主回归用“去重后的独立报道数量”稳健性检验用“包含转载的媒体提及次数”。如果你的数据商没有提供去重标识有一个近似处理是按“新闻标题”去重完全相同的标题视为同一篇报道。这个方法不完美但能在很大程度上避免某一条被无限转载的新闻主导整年数据。5.3 大文件读不进去的应对2007到2024年的日度媒体数据全量行数通常在千万级左右用Excel直接打开会卡到怀疑人生。日常处理我建议用Python或者R把清洗后的数据转成parquet格式读取速度快很多而且能保留日期类型和中文文本编码。如果团队里有人习惯Stata记得把最终生成的年度面板导出成dta格式中文变量名在旧版Stata里容易乱码保险起见变量名用英文命名标签里保留中文说明。我见过不少同学因为数据量太大直接用数据商提供的年度汇总表跑回归结果审稿人要求补充稳健性检验时才发现年度表里没有日度信息无法重构变量。所以哪怕最终只用年度数据也建议把日度表在本地保留一份跑模型前做一次自聚合对比。5.4 论文里“数据来源与口径”这一段怎么写如果你最后要写论文数据口径这部分别偷懒把下面几个要素写清楚基本就稳了媒体来源范围哪些报纸、哪些网络财经媒体、是否包含股吧等社交平台统计口径标题提及还是正文提及是否去重时间范围与频率2007-2024年日度、年度数据公司样本范围是否剔除金融行业、是否剔除ST、是否剔除当年上市的新股数据处理方式如何对公司简称做映射、如何匹配股票代码、如何做缩尾处理。这套写法的好处是别人拿到论文能完整复现你的数据处理过程。很多经验丰富的审稿人不会看你的回归表格前先看这段如果这段写得含糊后面结论再漂亮也会被质疑。最后分享一个我自己的习惯任何媒体关注度数据我都会额外构造一个“是否连续多日被媒体报道”的变量。它比单纯的年度报道总量更能体现“持续关注”这个理论概念。你可以从日度数据里先统计每家公司每段连续出现报道的天数取全年最长连续天数作为新变量放进稳健性检验里往往比总量指标更有故事性。数据到手的价值很多时候取决于你还能从字段里挖出什么而不只是直接拿现成列跑回归。这类细节数据商不会写在说明文档里只能自己动手试出来。