信息速览
美国的生命统计不是一份调查问卷,而是一套由法律强制驱动的登记流程:每一次活产、每一例死亡,都要在事发地填一张标准证书,经州与市级登记处编码,再汇到联邦层面。NVSS 就是这套流程的名字,也是它产出的那批年度微观数据文件的名字。
它看起来像一张巨大的表,实际上更像一个按年份切片的档案柜:出生文件从 1968 年排到 2025 年,死亡多死因文件从 1968 年排到 2024 年,每一年一个压缩包,包内是定宽 ASCII 文本、一份记录布局说明和三种统计软件的读入语句。字段位置随证书修订而移动,跨年份拼接时必须先对齐布局。
本篇按「它是什么、怎么构成、怎么拿、哪里会错」四层来写,所有规模、年份、阈值均取自 CDC 与 NCHS 官方页面,未经二次统计。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 正式全称 | National Vital Statistics System(国家生命统计系统) |
| 运营机构 | 美国 CDC 下属国家卫生统计中心(NCHS),与各辖区登记处协作 |
| 制度性质 | 法定生命事件登记,非抽样调查、非自愿上报 |
| 登记辖区 | 五十州 + 哥伦比亚特区 + 纽约市 + 五个属地,共五十七个 |
| 覆盖事件 | 活产、死亡、胎儿死亡、婴儿死亡、婚丧(婚丧仅汇总数) |
| 年度事件量 | 2024 年出生约 363 万、死亡约 307 万 |
| 公开文件起点 | 1968 年(出生与死亡均为该年) |
| 公开文件格式 | 逐年 zip,内含定宽 ASCII 与 SAS/SPSS/Stata 语句 |
| 最新公开年份 | 出生 2025,死亡多死因 2024 |
| 地理粒度 | 公开版到州;县及以下需申请受限数据 |
| 死因编码 | ICD-10,一条根本死因 + 最多二十条多重死因 |
| 在线查询 | CDC WONDER,聚合表 + XML 查询接口 |
| 抑制规则 | 计数小于十的统计量与人口数被抑制 |
| 著作权 | 美国政府作品,无著作权;受 NCHS 保密条款约束 |
| 主要门槛 | 定宽解析、跨年布局漂移、地理受限、编码版本断点 |
| 典型替代 | CDC WONDER(聚合)、HMD(跨国)、EHR 队列(个体病程) |
§1 它要解决的具体麻烦
1.1 一个国家需要一个「人人都必须进来一次」的登记册
绝大多数医学数据集是「选出来」的:某家医院、某个时间段、某种疾病、某批愿意签知情同意的人。NVSS 的逻辑相反,它是「必须进来」的——在美国境内发生的每一例活产与死亡,法律要求在规定时限内向辖区登记处申报,辖区再把去标识化的记录汇交联邦。这套机制的产物不是样本,而是全量事件的年度账本。
这个差别决定了它能回答什么。抽样队列适合估计关联强度,全量登记适合数人头:某年某县某年龄段的死亡数是多少、某种死因在五年里上升了多少、某个州的婴儿死亡率是否高于全国。前者怕选择偏倚,后者怕漏登与错编码,两类错误的方向完全不同。
也正因为是登记制,它的字段是「证书上写了什么」而不是「研究者想知道什么」。一张死亡证明上有死者的人口学信息、死亡地点、根本死因与若干促成因素,但没有血压、没有用药、没有住院病程。想要临床变量,必须另找队列再做链接,而链接本身又受地理受限的约束。
这个定位带来一个反直觉的结论:数据越完整,单条记录的信息量反而越少。因为要覆盖三亿人,证书只能问所有人都答得出的问题;一旦要问只有医院才有的指标,覆盖就会立刻掉到抽样水平。完整性与深度在这类系统里是互斥的,NVSS 明确选了前者。
理解这个取舍,才能理解它为什么在几十年的时间里不断被拿来当分母,却很少被拿来做特征工程。分母需要的是「一个不漏」,特征工程需要的是「每个都细」,两种需求指向不同的数据形态。
1.2 三条常见的错误期待
第一条是把 NVSS 当成一次横断面调查。它不是抽样,没有抽样权重,也没有「应答率」这个概念;反过来,它也没有问卷式的行为与态度字段。用调查数据的思路去加权,会得到一套无意义的权重。
第二条是把 CDC WONDER 当成 NVSS 的全部。WONDER 是查询界面,输出的是聚合表,行是「某年某县某死因的死亡数」,不是一份一份的证书。想要逐条记录做建模,必须去下载年度文件,或者申请受限版本。
第三条是以为公开文件里什么都有。自 2005 年起,含州、县或大城市地理细节的全国微观文件不再公开发布,公开版把地理压到州一级,同时删去一批准识别字段。这一条是很多人做完第一版分析才发现的前提。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 数清某年某地的死亡人数 | 逐条死亡记录与聚合查询两条路径 | 够,且是权威口径 |
| 看死因谱的长期变化 | 1968 年以来的逐年多死因文件 | 够,但需处理 ICD-9 到 ICD-10 的断点 |
| 分析出生结局与母婴风险 | 逐年出生文件,含体重、孕周、妊娠风险 | 够,字段随证书修订增减 |
| 追踪某个患者的病程 | 无 | 不够,需链接 EHR 或理赔 |
| 拿到县以下地址或坐标 | 公开版没有,受限版有县 | 部分够,需申请 |
| 做个体级临床预测 | 只有证书字段 | 不够,缺少检验与用药 |
| 与基因组或影像配对 | 无任何生物样本标识 | 不够,需自行申请链接 |
| 估算罕见暴露的归因风险 | 事件级计数齐全 | 够,但小样本会被抑制 |
| 复现某篇论文的年龄标化率 | 提供人口分母与标准人口 | 够,但需固定标准人口版本 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 手上只有医院队列,想知道该人群在全县死亡中的占比 | 提供全量死亡计数作分母 | 先用 WONDER 拉县级聚合,再决定是否申请受限记录 |
| 要做一个跨十年的死因趋势图 | 逐年文件与统一 ICD-10 段可直接拼接 | 先确认 1999 年前后编码版本,再决定是否只用 1999 年后 |
| 要评估某政策的围产结局效应 | 出生文件的体重、孕周、支付方式可做前后对比 | 先检查该州证书修订年份,避免字段定义中途改变 |
| 要做死亡风险预测模型 | 提供人群基线率与协变量分布 | 先明确预测目标是人群率还是个体风险,后者需外部队列 |
| 要给一篇公卫论文找权威分母 | 官方人口分母与标化方法 | 固定使用官方公布的分母版本并在文中注明 |
| 要做多国死亡率对比 | 可比口径的美国一侧 | 跨国比较优先用 HMD 或 WHO MDB,NVSS 只作美国细粒度补充 |
1.5 一句话判断
它不是一个可以拿来训练模型的「数据集」,而是一套可以拿来校准所有美国人群结论的「底账」;把它当底账用,价值极高,把它当临床队列用,一定会失望。
1.6 不适合谁:四条边界
第一,不适合需要纵向随访同一个体的研究。每条记录是事件级的,出生与死亡之间没有稳定的个人主键,跨文件配对要靠受限的链接文件。
第二,不适合需要临床细节的研究。证书上没有实验室值、影像、用药与生命体征,任何以生理参数为输入的模型都无法直接使用它。
第三,不适合需要县以下空间精度的研究。公开版止步于州,想做普查区级分析只能走受限数据申请,周期以月计。
第四,不适合把「事件数」直接当「患者数」的统计。一个人可以在同一年产生一条出生记录与一条死亡记录,也可以多次跨州登记,去重规则必须先想清楚。
§2 数据构成与规格
2.1 五个文件族,各有各的记录布局
NVSS 对外发布的微观文件不是一个包,而是五个族:出生(natality)、死亡多死因(mortality multiple cause)、胎儿死亡(fetal death)、链接出生婴儿死亡(linked birth/infant death)、以及匹配多胎与胎儿死亡(matched multiple birth)。每个族按年切分,每年一个 zip,包内通常包含数据文件、用户指南与读入语句。
| 文件族 | 一行是什么 | 起始年 | 最新年 | 典型体量 |
|---|---|---|---|---|
| 出生(natality) | 一例活产 | 1968 | 2025 | 最新年约 227 MB 压缩 |
| 死亡多死因(MCD) | 一例死亡 | 1968 | 2024 | 最新年约 146 MB 压缩 |
| 胎儿死亡 | 一例二十周及以上的胎儿死亡 | 1982 前后 | 2024 | 数十 MB 级 |
| 链接出生婴儿死亡 | 一例婴儿死亡与其出生记录配对 | 1983 前后 | 2024 期/2023 队列 | 四百 MB 级 |
| 匹配多胎 | 一组多胎妊娠及其胎儿死亡 | 1995 前后 | 2024 | 较小 |
需要说明的是,起始年一栏里胎儿死亡与链接文件的年份在不同文档里有不同表述,官方门户以「可得的最早年份」列出,跨族拼接时应以门户当年列出的文件为准,而不是以本表为准。
2.2 字段字典:证书上写了什么,文件里就有什么
死亡与出生两族的字段来源不同,前者围绕「怎么死的」,后者围绕「怎么生的」。下表按语义分组列出核心字段,具体变量名与位置以官方用户指南的记录布局为准。
| 组别 | 核心字段 | 取值形态 | 备注 |
|---|---|---|---|
| 事件标识 | 死亡年份、州、登记号 | 整数 / 定长字符 | 登记号在州内唯一 |
| 人口学 | 年龄、性别、种族、族裔、婚姻状况 | 分组码 | 种族有单一与桥接两套口径 |
| 地理 | 居住州、居住县、死亡发生州 | 代码 | 公开版县字段被抹去 |
| 死亡情境 | 死亡地点、死亡方式、是否尸检 | 分类码 | 死亡地点含医院、家中、临终关怀等 |
| 根本死因 | 单条 ICD-10 编码 | 四位数编码 | 每条记录唯一 |
| 多重死因 | 最多二十条 ICD-10 编码 | 记录轴编码串 | 含实体轴与记录轴两种表示 |
| 伤害字段 | 伤害意图、伤害机制、工作相关 | 分类码 | 仅外部原因死亡有意义 |
| 社会字段 | 教育、职业、行业 | 分类码 | 部分州缺失率高 |
| 出生—母婴 | 母亲年龄、教育、种族、孕次产次 | 分组码 | 修订年份间定义有变 |
| 出生—妊娠 | 妊娠风险、感染、糖尿病、吸烟 | 是/否/未知 | 2003 版证书后扩充 |
| 出生—分娩 | 分娩方式、是否引产、是否试产 | 分类码 | 与剖宫产率分析强相关 |
| 出生—新生儿 | 出生体重(克)、孕周、Apgar、先天异常 | 整数 / 分类码 | 体重与孕周是围产研究主轴 |
| 支付 | 分娩支付来源 | 分类码 | 含医疗补助、私人保险、自付 |
多重死因的表示方式值得单独说一句:一条死亡记录既有「实体轴」形式(把每个病因与其对应的部位、时限拆开记),也有「记录轴」形式(把编码压成不超过二十条的条件串)。做共病分析要用记录轴,做因果链分析要回到实体轴,两者不能混。
字段层面还有六个容易踩的点,逐条说明:
- 年龄在婴儿段用分钟与小时表示,直接转年份会把新生儿死亡算成零岁成人。
- 死亡地点是分类码,居家、临终关怀、医院、途中死亡各有码位,不能只按「医院内死亡」一刀切。
- 尸检状态是三分变量,含「未知」,把它并入「未尸检」会抬高未尸检比例。
- 教育程度在晚年死亡里常由家属代答,缺失与「未知」的界限模糊。
- 种族在部分州按自报填写,在另一些州按殡葬主管观察填写,口径不同。
- 出生文件里的孕周在早期年份以末次月经推算为主,2003 版证书后改用结合超声的产科估计,两者不可混算。
2.3 一条记录的完整解剖
以一条死亡记录为例,公开文件里它就是一行定宽字符。下面的代码块演示如何按位置切出几个核心字段,位置值仅作示意,真实值必须查当年记录布局。
#-- 演示:按定宽位置切一条死亡记录(位置取自当年用户指南,此处为示意值)
from dataclasses import dataclass
LAYOUT = {
"residence_state": (1, 2),
"year": (3, 6),
"sex": (69, 69),
"age": (70, 73),
"race": (75, 76),
"hispanic": (78, 78),
"underlying_cause": (146, 149),
"record_axis": (450, 589),
}
@dataclass
class DeathRecord:
residence_state: str
year: int
sex: str
age: int
race: str
hispanic: str
underlying_cause: str
record_axis: str
def parse(line: str) -> DeathRecord:
def cut(key: str) -> str:
a, b = LAYOUT[key]
return line[a - 1:b].strip()
return DeathRecord(
residence_state=cut("residence_state"),
year=int(cut("year")),
sex=cut("sex"),
age=int(cut("age")) if cut("age").isdigit() else -1,
race=cut("race"),
hispanic=cut("hispanic"),
underlying_cause=cut("underlying_cause"),
record_axis=cut("record_axis"),
)
with open("MORT2024.txt", encoding="latin-1") as fh:
for i, raw in enumerate(fh):
rec = parse(raw.rstrip("\n"))
print(rec.year, rec.residence_state, rec.underlying_cause)
if i >= 4:
break
这段代码有两个容易忽略的点。编码要用 latin-1 或单字节口径读,用 UTF-8 会在遇到高位字节时报错;行尾可能是 CRLF,rstrip 只去换行符,固定宽度切片才不会错位。
2.4 文件清单与体量结构
官方门户按族列年份,每个年份一个下载链接,附带文件大小。体量的年度变化本身携带结构信息:1990 年代的死亡文件普遍在八十 MB 上下,2010 年代后期升到一百 MB 以上,主因是多重死因字段扩容与死因文本长度增加,而不是死亡人数翻倍。出生文件的体量更大,最新一年压缩后超过二百 MB,因为它的字段数本就是死亡文件的两倍上下。
按族看,出生族每年一个压缩包,2015 年起另附属地包;死亡多死因族每年一个包;胎儿死亡族与匹配多胎族体量小,通常只有十 MB 级;链接出生婴儿死亡族最大,因为它要把两份记录并在一起,分「期」与「队列」两种口径各发一份,压缩后常在四百 MB 以上。
解压后的形态高度一致:一个不含表头的定宽文本,一份记录布局说明,一套 SAS、SPSS、Stata 的读入语句。文本没有分隔符,字段之间靠位置区分,所以「打开看看」这一步对普通表格软件是无效的。
2.5 与同类资源的字段差异
把 NVSS 放进同类资源里看,它的独特性在「事件全量 + 证书字段」这个组合,而不在字段丰富度。
| 资源 | 记录单位 | 地理粒度 | 临床字段 | 死因编码 | 年度连续性 |
|---|---|---|---|---|---|
| NVSS | 生命事件 | 公开到州 | 无 | ICD-10,含多重死因 | 1968 起逐年 |
| CDC WONDER | 聚合单元 | 到县 | 无 | ICD-10 | 1999 起 |
| HMD | 人群—年份 | 国家 | 无 | 按死因分组 | 部分国家到十九世纪 |
| EHR 重症队列 | 住院次 | 单中心 | 极丰富 | 有但非登记口径 | 视机构而定 |
| 全国健康调查 | 受访者 | 到州 | 自报与体检 | 无 | 周期横断面 |
| 医保理赔 | 就诊记录 | 到县 | 诊断与操作 | 有,非根本死因 | 视支付方而定 |
§3 制度的骨架:谁在填、按什么填、凭什么填
3.1 五十七个辖区,五十七套登记处
美国的生命事件登记权在州,不在联邦。五十个州、哥伦比亚特区、纽约市(与纽约州分开登记)以及五个属地——波多黎各、维尔京群岛、关岛、美属萨摩亚、北马里亚纳群岛——各自运营登记处,共五十七个申报单位。NCHS 不与个人打交道,它通过合同与这些辖区交换数据。
这个结构解释了很多现象。为什么属地的数据单独打包,因为它们的证书版本与编码节奏跟五十州不同步;为什么纽约市要单列,因为它的登记量足以独立成表,且历史上一直独立申报;为什么某些字段的缺失率在州与州之间差别很大,因为填报是医院与殡葬机构在做,培训与系统在各州并不统一。
还有一层:辖区的登记系统各自采购,电子化进度参差。有的州早已全流程电子申报,有的州到近年仍在处理纸质表格的转录。这决定了同一年的数据在不同州的新鲜度不同——临时数据阶段,电子化程度高的州先到齐,纸质为主的州后补,全国合计因此在季中偏低。
这种「先到先得」的补齐模式,对做实时监测的人是机会,对做趋势比较的人是陷阱。任何用季中数据画的州间比较,实际上混入了上报速度的信息。
| 辖区类型 | 数量 | 是否单列文件 | 说明 |
|---|---|---|---|
| 州 | 五十 | 并入全国文件 | 主体 |
| 特区 | 一 | 并入全国文件 | 与州同级 |
| 纽约市 | 一 | 历史上单列统计表 | 与纽约州分开登记 |
| 属地 | 五 | 单独打包 | 证书版本与节奏不同 |
| 合计 | 五十七 | — | 官方口径的申报单位数 |
3.2 标准证书:字段漂移的源头
全国并不存在一张「联邦证书」。NCHS 与各辖区协作制定标准证书范本,各辖区据此立法采用,采用时间可以相差数年。出生证书最近一次大修在 2003 年,死亡证书同样在 2003 年前后改版,胎儿死亡报告另有版本。改版意味着字段增删与位置移动,也意味着同一年份不同州的数据在语义上并不完全等价。
这段历史对使用者有一个直接后果:跨年拼接时不能假设列号稳定。正确做法是逐年读取当年的记录布局,把需要的字段先映射到统一的自定义列名,再纵向合并。
| 证书 | 最近大修 | 主要变化 | 对分析的影响 |
|---|---|---|---|
| 出生 | 2003 版 | 增加妊娠风险、感染、吸烟等字段 | 2003 年前后风险因素不可直接比 |
| 死亡 | 2003 版 | 调整教育、种族、伤害字段 | 社会字段的分组口径变化 |
| 胎儿死亡 | 2003 版 | 与出生证书部分对齐 | 胎儿死亡与出生字段可部分互译 |
3.3 编码:从死因文本到 ICD-10
死亡证明上的死因是医生手写的文本,进入文件前要经过编码。NCHS 提供自动化编码工具,把文本映射成 ICD-10 编码,再由人工复核疑难记录。编码规则决定了「根本死因」的判定:一份证明上可能写了四五个病因,只有一条被选为根本死因,其余进入多重死因。
美国死亡数据在 1999 年切换到 ICD-10,此前使用 ICD-9。NCHS 为此发布过 ICD-9 与 ICD-10 的对照文件,供跨版本比较使用。这个断点是所有长时段趋势分析的第一道坎:不处理它,1998 与 1999 之间的跳变会被误读成真实的流行病学变化。
| 时期 | 死因分类 | 文件形态 | 拼接注意 |
|---|---|---|---|
| 1979–1998 | ICD-9 | 定宽文本 | 需对照表映射到 ICD-10 组 |
| 1999 至今 | ICD-10 | 定宽文本 | 同年内可直接比 |
| 1968–1978 | ICD-8 | 定宽文本 | 组码更粗,仅适合大类比较 |
3.4 法律基础:为什么它几乎不会缺年头
NVSS 能连续五十余年不断档,靠的不是资金,而是法律义务。各州立法要求医师、殡葬主管、法医在规定时限内申报死亡,要求医院申报出生,逾期有罚则。登记是取得死亡证明、社保结算、遗产处理的前置条件,因此申报率天然接近满值。
这也带来一个副作用:数据里几乎没有「拒绝参与」这一项,但却有「延迟申报」与「补登」。临时数据与最终数据的差额,很多时候就是迟到的记录。
这条链路有五个环节,每个环节都有自己的时限与产物:
- 事件发生:医院、殡葬机构或法医在数日内填出纸质或电子证书,死因由主治医师或法医书写。
- 辖区登记:州与市级登记处受理,做完整性检查,缺项退回补录,产物是州级数据库记录。
- 汇交联邦:辖区按月或按季批量提交,产物是全国文件的底稿。
- 编码与编辑:NCHS 做死因编码、一致性检查与口径统一,产物是可发布记录。
- 发布:随年度报告与公开文件放出,产物是最终数据文件。
五个环节里最不可控的是第一个。证书填写的质量取决于填表人的训练与时间压力,法医与医院两条填写路径的完整度差异,最终会沉到统计里变成地区差异。
3.5 州权结构带来的口径碎片
登记权在州,意味着同一套标准证书在不同辖区的落地时间、培训强度与电子化程度都不同。这种碎片化不会写在年度文件里,它会以「同一年份不同州的字段缺失率不同」的形式隐性存在。
对使用者的直接影响有三层。第一层,跨州比较某个边缘字段时,差异可能主要来自填报习惯而不是真实的人群差异。第二层,部分州在证书修订后的一两年内仍按旧版格式提交,NCHS 需要做转换,转换规则未必对每个字段都可逆。第三层,属地的编码节奏更慢,把它们直接并入全国合计会让最近一年的数据偏向五十州。
应对方式很朴素:优先使用核心字段(年龄、性别、死因、地理),把边缘字段(职业、教育、孕期吸烟)当作辅助变量,并在方法段注明字段的辖区覆盖差异。凡是结论高度依赖某个边缘字段的研究,都应当先做一次分州稳健性检查。
§4 从一份证书到一行数据:质量怎么被做出来
4.1 三层发布:临时、预发布、最终
同一年的死亡数据会以三种形态出现。临时数据(provisional)在事件发生后数周内更新,用于监测;预发布数据补齐大部分辖区但仍可能修订;最终数据在次年随年度报告发布,此后一般不再改动,除非发现编码错误。CDC WONDER 上同时挂着「临时」与「最终」两套查询,界面相近,口径不同。
| 形态 | 时滞 | 完整性 | 是否会被修订 | 适用 |
|---|---|---|---|---|
| 临时 | 数周 | 部分辖区未到 | 会 | 监测、预警 |
| 预发布 | 数月 | 接近完整 | 可能 | 季度分析 |
| 最终 | 次年 | 完整 | 一般不修订 | 论文、正式统计 |
| 修订版 | 不定期 | 完整 | 已修订 | 替换旧结论 |
混用两层是复现失败的高发原因:用临时数据算出的某县死亡数,在最终版里可能差出两位数,因为迟报的记录补进来了。做时间序列时,全篇必须锁定同一层。
4.2 抑制规则:小于十就不显示
隐私保护的第一道闸是计数抑制。CDC WONDER 的规则很直接:死亡或出生统计中,计数在一到九之间的单元被抑制;人口数小于十的单元同样被抑制。婴儿死亡的年龄组与活产分母另有附加约束。抑制不是删除记录,而是在聚合输出里把格子留空。
| 场景 | 是否抑制 | 原因 |
|---|---|---|
| 某县某年某死因死亡数为七 | 抑制 | 小于十 |
| 某年龄组人口数为八 | 抑制 | 小于十 |
| 全国总死亡数 | 不抑制 | 远超阈值 |
| 县级婴儿死亡按单岁组 | 可能附加抑制 | 婴儿分母另有约束 |
| 公开微观文件中的单条记录 | 不抑制 | 已去标识,但无地理细节 |
这条规则对建模有实质影响:基层单元的小计数缺失不是随机缺失,而是与单元规模直接相关,任何忽略抑制机制的插补都会系统性高估小县的事件数。
4.3 种族与族裔:两套口径不能混用
美国人口分母有两套种族口径。桥接口径把多种族人口按规则分配到四个单一种族组,用于与 2000 年以前的历史数据衔接;单一口径自报多个种族,分为六组、十五组或三十一组。WONDER 的死亡数据在 1999 至 2020 段用桥接口径,2018 年之后提供单一口径。
| 口径 | 分组数 | 年份段 | 用途 |
|---|---|---|---|
| 桥接 | 四组 | 1999–2020 | 长时段可比 |
| 单一(六组) | 六组 | 2018 起 | 与现行人口估计一致 |
| 单一(十五组) | 十五组 | 2018 起 | 亚裔等细分 |
| 单一(三十一组) | 三十一组 | 2018 起 | 最细,抑制更多 |
把 2021 年的单一口径数据接在 2019 年的桥接数据后面画一条线,得到的「种族间差距扩大」有一部分是口径变化造出来的。正确做法是分段呈现,或在重叠年份用同一口径重建。
4.4 案例:一份 2024 年库克县死亡证明的三年旅程
假设 2024 年 3 月,伊利诺伊州库克县一家医院有一位七十二岁男性死亡,死因为慢性阻塞性肺疾病急性加重,合并高血压与糖尿病。这份证明的旅程,能把这套系统的每一个延迟与转换点串起来。
第零天,主治医师在电子死亡登记系统里填写死亡证明,写入根本死因、两条促成因素、死亡地点、是否尸检。第三条,医院的病历编码员用自动编码工具把文本映射成 ICD-10 编码,根本死因落到 J44 段,两条合并症进入多重死因字段。第七天,库克县登记处受理,检查字段完整性,发现教育程度为空,退回补录。
第三十天,记录进入伊利诺伊州登记库;第九十天,随季度批量汇交到 NCHS。NCHS 侧做编辑与一致性检查,把种族与族裔按两套口径重新编码,把死亡地点映射到标准分类,把「是否工作相关」按伤害规则判定。此时这条记录同时具备实体轴与记录轴两种死因表示。
第两百天,它出现在临时数据里,成为某周县级计数的一个单位;第两百八十天,进入预发布;次年,随最终文件发布,落在 2024 年的定宽文本里,位置由当年布局决定。此后再过一年,它被纳入某个州的年龄标化率分母。
这条记录在全程中被看过至少六次,但没有任何一次能看到姓名与地址——公开版里连县都被抹掉,只剩州。它既是一条完整的医学结论,也是一条被层层削减过的统计单元。
4.5 质量的三根支柱
完整性靠法律,一致性靠编码规则,可比性靠对照文件。三者缺一,长时段分析就会失真。
| 支柱 | 机制 | 失效表现 | 检查方法 |
|---|---|---|---|
| 完整性 | 强制申报 + 时限罚则 | 迟报造成临时数据偏低 | 比对临时与最终同格计数 |
| 一致性 | 自动编码 + 人工复核 | 同一文本不同年份编码不同 | 抽查同码文本样本 |
| 可比性 | ICD 对照表 + 种族桥接 | 断点处出现假跳变 | 查断点年份的双口径重叠 |
4.6 与外部数据链接:增益与代价
NVSS 最常用的外挂是国家死亡索引(NDI)。研究者把自己的队列——临床试验、疾病登记、医保理赔——送去匹配,换回匹配对象的死亡日期与死因。这条路径把「有临床细节的个体」和「有权威死因的结局」接在一起,代价是申请周期、费用与匹配误差。
链接的误差有两个方向:队列成员移出美国后死亡,不会被 NDI 捕获,造成结局漏计;姓名与出生日期拼写差异会造成匹配失败,同样漏计。两者都会让观察到的死亡率偏低,且偏低的幅度与人群流动性相关。
| 链接方式 | 输入 | 输出 | 主要误差 |
|---|---|---|---|
| NDI 批量匹配 | 姓名 + 出生日期 + 社保号后四位 | 死亡日期、死因、州 | 移居海外漏计 |
| 登记—理赔链接 | 登记号 | 就诊轨迹 | 需双方授权 |
| 地理链接 | 县代码 | 区域社会经济指标 | 2005 年后公开版无县 |
| 概率链接 | 准识别字段组合 | 匹配概率 | 假阳性随字段减少上升 |
做链接前,有四件事必须先定下来,否则结果无法解释:
- 匹配字段组合,是否用社保号后四位,直接决定匹配率的高低。
- 匹配阈值的取舍,宽松提高召回但引入假阳性,严格相反。
- 观察窗,随访截止日与数据可用年要对齐,否则大量记录被误判为存活。
- 报告口径,匹配率、漏配率与假阳性率要同时报,只报匹配率会掩盖问题。
这四项里,观察窗最容易被忽略。用 2024 年的死亡文件配 2023 年底截止的队列,最后两个月的死亡根本没进文件,算出来的生存曲线会偏高。
§5 怎么把数据拿到手
5.1 四条通道,四种颗粒度
| 通道 | 粒度 | 鉴权 | 交付形态 | 适合 |
|---|---|---|---|---|
| 年度公开文件 | 逐条记录 | 无 | zip 内定宽文本 | 建模、批量统计 |
| CDC WONDER 网页 | 聚合表 | 无 | 网页表格 | 快速取数、核对 |
| WONDER XML 接口 | 聚合表 | 无 | XML | 自动化流水线 |
| 受限数据申请 | 逐条 + 县 | 提案评审 | 安全环境内分析 | 空间分析、链接 |
顺序建议是先 WONDER 后文件:先用聚合查询确认量级与口径,再去下载几十 GB 的年度包,能省掉大量无效下载。
5.2 WONDER 的一次查询长什么样
WONDER 的查询界面把「分组维度」和「度量」分开选。分组维度是可选的:年份、州、县、年龄组、性别、种族、死因;度量是死亡数、粗率、年龄标化率及其置信区间。选定后生成一张交叉表,可导出为制表符文本。
| 控件 | 取值示例 | 注意 |
|---|---|---|
| 数据集 | 最终多死因 2018–2024 | 与临时集分开 |
| 分组 | 年份 × 州 × 年龄组 | 维度越多抑制越多 |
| 度量 | 死亡数 / 粗率 / 标化率 | 标化率需选标准人口 |
| 死因 | ICD-10 四位码或选中死因表 | 选中表跨年稳定 |
| 地理 | 居住地或发生地 | 两者含义不同 |
| 输出 | 表格 / 图表 / API | API 需拼 XML |
年龄标化率用的是 2000 年美国标准人口,这个选择会影响与其他研究的可比性。跨研究比较前,先确认对方用的是哪套标准人口。
5.3 用 XML 接口把查询变成可重跑的脚本
WONDER 的接口接收一个 XML 请求体,返回同样结构的 XML。下面这段代码演示最小结构:请求某年分州的死亡数。参数里的分组码来自查询表单,改动分组时要同步改码。
#-- 通过 CDC WONDER 的 XML 接口取「某年分州死亡数」
import requests
from xml.etree import ElementTree as ET
URL = "https://wonder.cdc.gov/controller/datarequest/D158"
params = {
"M_1": "D158.M1", #-- 度量:死亡数
"B_1": "D158.V9", #-- 分组:年份
"B_2": "D158.V10", #-- 分组:居住州
"F_D158.V9": "2022", #-- 过滤:年份
"O_show_totals": "true",
"O_precision": "1",
"O_timeout": "300",
"O_accept_data_use": "true",
"V_D158.V9": "2022",
}
resp = requests.post(URL, data=params, timeout=300)
resp.raise_for_status()
root = ET.fromstring(resp.text)
for row in root.iter("r"):
cells = [c.text for c in row.findall("c")]
print("\t".join("" if c is None else c for c in cells))
接口有三点必须注意。第一,请求体里要显式接受数据使用条款,否则返回的是条款页面而不是数据。第二,超时参数是服务端的,设得太小会拿到截断结果。第三,同一查询在维度过多时会触发抑制,返回的格子是空的而不是零,解析时要区分空串与数字零。
5.4 下载年度文件并自查完整性
年度文件没有统一的校验清单,下载后要自己验。最省事的做法是先测压缩包结构,再抽样解析前若干行,确认宽度与布局说明一致。
#-- 下载 2024 年死亡多死因文件并做结构与抽样检查
mkdir -p nvss/2024 && cd nvss/2024
curl -L -o mort2024.zip "https://www.cdc.gov/nchs/data_access/vitalstatsonline.htm#mort"
unzip -t mort2024.zip
unzip -o mort2024.zip
ls -lh
awk 'NR<=3 {print length($0)}' VS24MORT.DUSMCPUB 2>/dev/null || true
for f in *.txt *.TXT; do [ -e "$f" ] && awk 'NR<=3 {print length($0)}' "$f"; done
md5sum *.zip 2>/dev/null || md5sum ./*.zip
实际文件名随年份变化,先 ls 再解析比写死文件名稳妥。行宽是重要线索:如果解析出的行长与用户指南里的记录长度不符,多半是下载不完整或换行符被转换过。
5.5 跨年对齐:把漂移的列号收进一张映射表
跨年分析的核心工作是把每年不同的位置映射到统一列名。做法是维护一张映射表,一年一行,键是语义名,值是当年的起止位置。
#-- 用一张「年份 → 字段位置」映射表,把多年数据竖着拼起来
import csv
FIELDS = ["state", "year", "sex", "age", "ucod"]
LAYOUT_BY_YEAR = {
2018: {"state": (1, 2), "year": (3, 6), "sex": (69, 69), "age": (70, 73), "ucod": (146, 149)},
2024: {"state": (1, 2), "year": (3, 6), "sex": (69, 69), "age": (70, 73), "ucod": (146, 149)},
}
def convert(path: str, year: int):
layout = LAYOUT_BY_YEAR[year]
with open(path, encoding="latin-1") as fh, open("out.csv", "a", newline="") as out:
writer = csv.writer(out)
if out.tell() == 0:
writer.writerow(FIELDS)
for line in fh:
line = line.rstrip("\r\n")
row = []
for name in FIELDS:
a, b = layout[name]
row.append(line[a - 1:b].strip())
writer.writerow(row)
convert("VS18MORT.DUSMCPUB", 2018)
convert("VS24MORT.DUSMCPUB", 2024)
示例里两年位置相同只是为了说明结构,真实情况是每改一次证书就换一次位置。维护这张表的成本,是这类数据分析的主要工程开销。
5.6 受限数据:要县以下地理就必须走这条路
2005 年起,含州、县或大城市地理细节的全国微观文件不再公开发布。需要这些细节的研究者要向 NCHS 研究数据中心提交提案,说明研究目的、变量需求、保密措施与输出审查方案,通过后在受控环境内分析,结果出门前要经过披露审查。
| 环节 | 内容 | 典型周期 |
|---|---|---|
| 预沟通 | 与数据中心确认变量可得性 | 数周 |
| 提案 | 研究设计、变量清单、保密计划 | 一至两月 |
| 评审 | 方法学与披露风险 | 数月 |
| 签约 | 使用条件、罚则 | 数周 |
| 分析 | 受控环境内运行 | 按项目 |
| 输出审查 | 结果披露检查 | 每次提交 |
代价是时间,收益是空间精度。如果研究问题只需要州级差异,公开文件完全够用,不必付这个成本。
5.7 取数环节的六个高频错误
| 错误 | 后果 | 纠正 |
|---|---|---|
| 用 UTF-8 读定宽文件 | 行宽错乱、解析越界 | 改单字节编码 |
| 把空串当零 | 抑制格被算成无事件 | 区分缺失与零 |
| 混用临时与最终 | 计数不可复现 | 全篇锁定同一层 |
| 跨 1999 年直接拼死因 | 断点假跳变 | 用对照表映射 |
| 桥接与单一混用 | 种族差距虚高 | 分段或统一口径 |
| 忽略属地包 | 全国合计偏小 | 合并后去重 |
5.8 把文件侧结果和查询侧结果对拍
同一批数据有两条入口,就有一次免费的质检机会。把文件侧的聚合结果与 WONDER 同条件查询对齐,能在正式分析前抓出绝大多数配置错误。对拍按下面八步走:
- 固定年份层,两边都用最终数据,不用临时数据。
- 固定地理层级,两边都用居住地或都用发生地,不能一边居住一边发生。
- 固定死因口径,两边都用 ICD-10 四位码,或都用同一张选中死因表。
- 固定种族口径,2018 年以后尤其要注意桥接与单一的差别。
- 固定年龄分组,单岁组与五岁组的汇总值应能互推。
- 核对总数,先对全国合计,再对州,最后对县。
- 核对抑制格,WONDER 留空的格子,文件侧可能有权重为零的记录。
- 记录差额,若差额集中在某个州,多半是该州的迟报或补充提交。
这八步走完,通常能在半天内定位问题。跳过它对拍直接投产,错误往往要等到论文投稿被审稿人指出才暴露。§4.4 的案例里那条记录,在文件侧与查询侧的表现就不完全一致:查询侧因为抑制看不到它,文件侧它一直在。
§6 它在这座库里的位置
6.1 关系图谱
NVSS 是这批资料里唯一「以生命事件为行」的全量登记源。它与其他词条的关系不是替代,而是分工:有人提供聚合视图,有人提供跨国对照,有人提供临床细节。
| 库内词条 | 关系 | 差异要点 |
|---|---|---|
| CDC WONDER | 同一体系的两个面 | WONDER 是查询界面,NVSS 是制度与文件 |
| BRFSS | 互补 | 行为与自报健康,抽样调查,无死因 |
| HMD | 互补 | 跨国长时段死亡率,人口—年份粒度 |
| NHANES 步数表 | 无关但常被混 | 体检与可穿戴,非登记 |
| Danish NPR / Swedish NPR | 结构类比 | 北欧患者登记,入院级,有个人主键 |
| ICES | 结构类比 | 省级人口级链接平台,可及性更强 |
| SEER-Medicare | 上下游 | 癌症登记 + 理赔,可与 NDI 链接 |
| CMS Medicare LDS | 上下游 | 理赔侧,含诊断但不含根本死因 |
| MIMIC 系 | 粒度反差 | 单中心重症,含波形与病程 |
和 CDC WONDER 的关系最容易被误解。WONDER 上的数字来自 NVSS,但 WONDER 只给聚合表,且有自己的抑制与口径规则;NVSS 的年度文件给逐条记录,但没有 WONDER 那种即时查询的便利。做探索用前者,做建模用后者,两者结论在同一口径下应当一致,不一致时先查年份层与种族口径。
6.2 三条检索路径
| 你要找的东西 | 走哪条路 | 关键词 |
|---|---|---|
| 某个死因的年度趋势 | WONDER → 多死因 → 选中死因表 | 死因、年份、标化率 |
| 出生结局与母亲特征 | 年度出生文件 | 出生体重、孕周、妊娠风险 |
| 死亡与临床队列配对 | NDI 匹配 | 死亡索引、链接、匹配 |
| 县级空间格局 | WONDER 聚合或受限申请 | 县、居住地、发生地 |
| 跨国比较 | 转 HMD 或 WHO 口径 | 寿命表、年龄别死亡率 |
6.3 与六个近邻的逐项区隔
与 CDC WONDER 的区隔:WONDER 是同一批数据的一个视图。它回答「某格子里有多少」,不回答「这一条记录长什么样」。需要逐条记录、需要自定义派生变量、需要做机器学习特征工程时,必须回到年度文件。
与 BRFSS 的区隔:BRFSS 是电话调查,测的是活人的行为与自报健康状况,有抽样权重,没有死因,也没有全量覆盖。想研究「吸烟者后来死因如何」,两者要链接;单独用任何一个都答不了。
与 HMD 的区隔:HMD 是人口—年份矩阵,跨国、长时段、经过清洗与平滑,适合算寿命表与跨国比较,但没有个体记录,也无法细分到州以下。NVSS 的美国部分更细,HMD 的国际部分更广。
与 NHANES 的区隔:NHANES 是体检与问卷的周期横断面,有血压、血糖、体测,样本量以千计,用于估计人群分布。NVSS 没有这些测量,但覆盖全部事件。两者常被拿来做「人群基线 + 事件结局」的组合,属于互补而非竞争。
与 Danish NPR、Swedish NPR 的区隔:北欧登记有全国唯一的个人标识,可以无摩擦地纵向追踪,这是 NVSS 做不到的。代价是规模小、死因细节依赖同一套编码体系。做方法学迁移时,北欧结果不能直接外推到美国的人群异质性。
与 SEER-Medicare、CMS 理赔的区隔:理赔数据有就诊轨迹与诊断码,但没有权威根本死因;SEER-Medicare 通过链接补上了死亡信息。NVSS 是这些链接的终点而不是起点——它提供结局,不提供暴露。
6.4 三种组合方式的取舍
实际项目里很少有人只用 NVSS,更多是三选一的组合。第一种是「聚合起步」:用 WONDER 把关键率拉出来,写判断,不再进文件层。它适合政策简报与快速评估,一周内能出结论,代价是无法做个体分层与自定义派生变量。
第二种是「文件自建」:下载若干年份的公开文件,建自己的事实表,做分层与建模。它适合学位论文与需要复现的研究,成本在一到两周的解析与对拍,收益是全部字段自由可用。
第三种是「链接扩展」:以自有队列为主表,向 NDI 或受限数据申请匹配,把死因结局接上去。它适合临床队列的长期随访,成本最高,周期以月计,收益是把「失访」变成「有结局」。
选择时可以问三个问题:结论需要个体层还是群体层?需要县以下地理吗?需要与已有的临床变量配对吗?三个问题里只要有一个答「需要个体层」,就得走第二或第三条路。反过来,如果只是想知道某年某地的量级,第一条路就够了——多数项目其实属于这一类。
§7 质量评估与局限
7.0 阅读本节前的一个前置校正
多数数据集的质量评估问的是「标注准不准、切片干不干净」。用这套尺子量 NVSS 会产生系统性误判:它没有标注员,没有训练/测试切分,也没有金标准复核环节。它的质量体现在另外三处——事件是否被登记、编码是否按规则、口径是否前后一致。
另一个常见误判是把「字段少」当成「质量低」。证书字段少是制度设计的后果,不是采集失败。评估时应当先问「这套字段能不能支撑我的问题」,再问「它在自己的目标上做得如何」。
7.1 五维评分与 DAIMS 24 项
| 维度 | 评分 | 依据 |
|---|---|---|
| 覆盖完整性 | 5 / 5 | 法定强制登记,全量事件,无抽样 |
| 时间纵深 | 5 / 5 | 1968 年起逐年,制度史可上溯更早 |
| 结构可用性 | 3 / 5 | 定宽文本、年度布局漂移,解析成本高 |
| 语义清晰度 | 4 / 5 | 编码规则公开,但证书版本多、口径要辨 |
| 合规与开放度 | 4 / 5 | 免费公开,但地理受限、链接需审批 |
DAIMS 评估按四组二十四项打分,每项满分一,合计二十四。评分只反映「AI-ready 程度」,不反映科学价值。
| 组 | 项 | 判据 | 分 |
|---|---|---|---|
| 发现 | 持久标识 | 有固定入口页与版本年 | 1 |
| 发现 | 元数据可检索 | 门户可按族与年份定位 | 1 |
| 发现 | 引用规范 | 官方给出引用格式 | 1 |
| 发现 | 版本记录 | 逐年文件即版本 | 1 |
| 发现 | 变更说明 | 证书修订有文档 | 1 |
| 发现 | 语种 | 仅英文 | 0.5 |
| 获取 | 免鉴权下载 | 公开文件直接可取 | 1 |
| 获取 | 批量接口 | 仅聚合层有接口 | 0.5 |
| 获取 | 断点续传 | 常规 HTTP 支持 | 1 |
| 获取 | 校验清单 | 无官方哈希 | 0 |
| 获取 | 限速说明 | 未集中说明 | 0.5 |
| 获取 | 稳定 URL | 门户链接多年稳定 | 1 |
| 结构 | 机器可读格式 | 定宽文本,非自描述 | 0.5 |
| 结构 | 模式定义 | 记录布局随年发布 | 1 |
| 结构 | 主键 | 州内登记号,跨州不唯一 | 0.5 |
| 结构 | 编码表 | ICD-10 与分类码公开 | 1 |
| 结构 | 单位约定 | 克、岁、日,明确 | 1 |
| 结构 | 缺失表示 | 空串与特殊码并存 | 0.5 |
| 质量 | 完整性声明 | 有发布政策 | 1 |
| 质量 | 一致性检查 | 编辑规则公开 | 1 |
| 质量 | 溯源 | 可回溯到证书层 | 1 |
| 质量 | 已知缺陷清单 | 分散在多份文档 | 0.5 |
| 质量 | 抑制机制 | 明确阈值 | 1 |
| 质量 | 更新承诺 | 年度发布,节奏稳定 | 1 |
| 合计 | — | — | 19.5 / 24 |
十九点五分不算高,扣分集中在「非自描述格式」「无校验清单」「主键不跨州唯一」三处——恰好都是工程侧的成本,而不是科学侧的缺陷。
7.2 三个系统性偏差
地理收缩偏差。 2005 年之后公开版没有县,研究者若只用公开文件做空间分析,实际上是在州级做生态学推断,结论的粒度被悄悄放大。这类研究的「县级差异」往往是州内异质性的平均值。
编码版本偏差。 死因编码从 ICD-9 切到 ICD-10,分类粒度变细,某些病因的计数在切换年跳变。阿尔茨海默病、流感与肺炎这类编码规则敏感的病因,跳变尤其明显。
申报行为偏差。 死亡证明由医生填写,填写的完整度与医院类型、法医制度、地区习惯有关。教学医院与社区医院对「促成因素」的填写密度不同,直接比较多重死因的条数会得到假的地区差异。
三类偏差之外,还有一个不那么显性的来源:分母。分子来自登记,分母来自人口估计,两者由不同机构产出,修订节奏也不同。人口估计在十年普查之间会做年度更新,遇到普查年还会整体回溯修正。用旧分母配新分子,会得到一条平白无故的率变化曲线。
处理办法是把分母版本写进代码,而不是写进记忆。每次重跑都用同一版人口估计,并在结果目录里留一份分母快照,半年后回头核对时才有依据。
7.3 已知的、可枚举的偏差
| 偏差 | 方向 | 影响面 | 缓解 |
|---|---|---|---|
| 县以下地理缺失 | 空间粒度变粗 | 2005 年后公开文件 | 申请受限数据 |
| ICD 版本断点 | 计数跳变 | 1998/1999 交界 | 用对照表重分组 |
| 种族口径切换 | 组间差距失真 | 2018 年后 | 分段呈现 |
| 多重死因填报密度差 | 地区间不可比 | 全部年份 | 只用根本死因比 |
| 属地分文件 | 全国合计偏小 | 全部年份 | 合并去重 |
| 迟报 | 临时数据偏低 | 最近一年 | 用最终数据 |
| 职业与行业缺失 | 社会梯度估计偏弱 | 部分州 | 改用教育代理 |
| 链接漏配 | 死亡率偏低 | NDI 匹配 | 报告匹配率 |
7.4 外部验证矩阵
矩阵里没有「独立金标准」这一列,因为登记系统本身就是金标准的一部分。能做的是内部一致性与跨国口径对照,而不是找一个更高的裁判。逐项看,可参照的对照关系有以下六条:
- 年度死亡总数对照官方年度报告,属同源核对,只用于确认当年文件是否完整。
- 年龄别死亡率对照 HMD 的美国序列,一致性高,差异主要来自分母口径。
- 婴儿死亡率用链接文件重算,需以活产数为分母,重算结果应与官方报告吻合。
- 死因谱对照 WHO 死因库,一致性中等偏高,差异来自归组规则。
- 州级出生数对照各州卫生部门年报,辖区口径一致,可直接比。
- 县级死亡数只能用受限数据重算,公开版无法直接验证。
这六条里,前三条是日常质检,后三条是跨源校验。做发表级结论时,至少要跑完前三条,并在方法段写明用的是哪一条。
7.5 它为何能持续:登记是取得法律身份的前置条件
这套系统能连续运行半个多世纪,靠的不是科研经费的持续性,而是它在社会运行中的位置:没有死亡证明,遗产无法处理、保险无法结算、遗体无法处置;没有出生证明,人无法取得身份号码。登记因此不是「配合研究」,而是「办理事务」的副产品。需求侧稳定,供给侧的年度发布就不会断。
7.6 上手前的十二项检查
以下清单按调研顺序排列,逐条过一遍,能挡住大部分返工:
- 确认研究问题要群体率还是个体行,前者不必下载文件。
- 确认年份层,临时、预发布、最终三者只能选一。
- 确认地理层级,公开版最高到州,县级要申请。
- 确认死因口径,四位码与选中死因表不可混算。
- 确认种族口径,2018 年后注意桥接与单一的切换。
- 确认年龄分组,单岁组在 WONDER 上抑制更重。
- 确认分母来源,标化率要用官方人口估计。
- 确认证书修订年,跨修订年的字段要单独映射。
- 确认属地是否纳入,纳入后要处理交叠年份。
- 确认文件编码,定宽文本一律按单字节读。
- 确认对拍方式,§4.4 的案例展示了同一记录在两侧的不同表现。
- 确认引用格式,写清数据年份、访问日期与口径。
十二项里最容易漏的是第八项与第十一项,前者影响字段语义,后者影响结论可信度。两项都不需要额外数据,只需要在读第一行代码之前多想五分钟。
§8 生态位与历史
8.1 一条从「十州试点」到「五十七辖区」的线
| 时间 | 事件 | 意义 |
|---|---|---|
| 1900 前后 | 死亡登记区起步,覆盖少数州与城市 | 联邦开始汇总死亡数 |
| 1915 | 出生登记区设立 | 出生统计有了统一底座 |
| 1933 | 全部州加入出生登记区 | 全国口径首次完整 |
| 1960 | NCHS 成立,NVSS 定型 | 统计职能集中 |
| 1968 | 公开微观文件起点 | 可复现研究成为可能 |
| 1979 | 死因转用 ICD-9 | 编码体系换代 |
| 1999 | 死因转用 ICD-10 | 第二次换代 |
| 1999 | CDC WONDER 上线死因查询 | 聚合取数平民化 |
| 2003 | 出生与死亡证书大修 | 字段扩充 |
| 2005 | 公开文件去掉县以下地理 | 空间精度收缩 |
| 2018 | 单一种族口径并行 | 口径双轨 |
| 2020 年代 | 电子登记与现代化项目推进 | 时滞缩短 |
这张表里最容易被低估的是 1933 年——在那之前,「全国出生数」是估算而不是清点。任何引用 1933 年之前全国出生率的研究,用的都是拼补数据。
8.2 三个参照系里的位置
在统计体系里,它是美国的官方底账,与人口普查、经济普查并列,但粒度更细、频率更高。在医学研究里,它是结局变量的来源,常年出现在流行病学论文的方法段。在人工智能里,它是表格数据的极端形态:行数极大、列数中等、语义强、噪声结构化。
| 参照系 | 它的角色 | 不可替代之处 |
|---|---|---|
| 官方统计 | 生命事件权威口径 | 法律强制,全量覆盖 |
| 流行病学 | 分母与结局 | 长时段、可分层 |
| 机器学习 | 大规模表格基座 | 真实人群、真实缺失 |
| 卫生政策 | 效果评估的对照 | 政策前后可比 |
8.3 现在的位置:默认分母,而非默认训练集
过去十年,美国人群层面的几乎所有率,都以它为分母。与此同时,它在机器学习社区的存在感并不高,原因是解析成本与地理限制——能直接喂进模型的表格数据太多了,没人愿意先写三百行解析代码。
这个错位正在被工具链抹平。随着 DuckDB、Polars 这类工具对定宽与半结构化数据的支持变好,把年度文件转成列式格式的成本从数天降到数小时,它的可用性会显著上升。
三个参照系对它的期待并不相同,混着用会出差错。统计体系要的是口径稳定,任何口径改动都要有说明;流行病学要的是分层能力,样本量越大越好,宁可牺牲字段丰富度;机器学习要的是可解析与可复现,格式是否漂亮不影响模型,但解析错一位就全盘皆错。
因此同一份文件在不同人手里会变成不同的东西:统计口径下的年度表、流行病学里的分层率、机器学习里的特征矩阵。三者都对,前提是各自把转换过程写清楚。
8.4 未来的三个变量
第一是时滞。电子死亡登记普及后,临时数据与最终数据的间隔在缩短,监测价值上升。第二是地理政策。受限数据的申请流程与披露审查规则若有调整,会直接改变空间研究的可行性。第三是编码体系。ICD-11 的落地时间表会影响下一个断点出现的位置。
§9 使用指引
9.1 三种角色的路径
| 角色 | 起点 | 关键动作 | 交付物 |
|---|---|---|---|
| 公共卫生研究者 | WONDER 聚合查询 | 锁定年份层与种族口径 | 率与趋势表 |
| 数据工程师 | 年度文件 | 建布局映射表,转列式 | 可查询的事实表 |
| 临床 AI 团队 | NDI 链接 | 先解决匹配率与伦理审批 | 带死因结局的队列 |
三条路径的分岔点在第一步:如果问题只需要率,就不要碰逐条记录;如果问题需要个体特征,就必须接受链接成本。
按角色再细化一步,各自的第一个动作与第一个坑如下:
- 公共卫生研究者:先拉三年同口径的聚合表,坑是把标化率当成真实率来解释。
- 数据工程师:先读一年的用户指南并写下布局表,坑是直接复用去年的列号。
- 临床 AI 团队:先算一次试点匹配率,坑是假设匹配率接近满分。
- 政策分析者:先固定政策实施年,坑是把实施当年的过渡期算进效应。
- 教学使用者:先做一份百行样例,坑是一上手就下全量文件。
五个角色的共同点是要先做小样本验证。NVSS 的文件太大,任何错误都会被规模放大,先在小样本上跑通全流程,比在大文件上调试快一个数量级。
9.2 一条最短的可用流程
目标:把两年的死亡文件转成一张可查询的表,并算出分州死亡数。流程只依赖命令行工具与一个嵌入式数据库。
#-- 建工作目录,放两个年份的原始文件
mkdir -p work/raw work/out && cd work/raw
#-- 手工从门户下载后放入,文件名按年份命名
ls -lh
cd ../..
#-- 把定宽文本转成 CSV(字段位置示意,实际按当年布局改)
import csv
SPEC = {"state": (1, 2), "year": (3, 6), "ucod": (146, 149)}
def to_csv(src: str, dst: str) -> None:
with open(src, encoding="latin-1") as fin, open(dst, "w", newline="") as fout:
w = csv.writer(fout)
w.writerow(list(SPEC))
for line in fin:
line = line.rstrip("\r\n")
w.writerow([line[a - 1:b].strip() for a, b in SPEC.values()])
to_csv("work/raw/VS22MORT.DUSMCPUB", "work/out/mort2022.csv")
to_csv("work/raw/VS23MORT.DUSMCPUB", "work/out/mort2023.csv")
#-- 用 DuckDB 合并并聚合,输出分州死亡数
CREATE TABLE mort AS
SELECT * FROM read_csv_auto('work/out/mort2022.csv')
UNION ALL
SELECT * FROM read_csv_auto('work/out/mort2023.csv');
COPY (
SELECT state, year, COUNT(*) AS deaths
FROM mort
WHERE ucod <> ''
GROUP BY state, year
ORDER BY state, year
) TO 'work/out/state_deaths.csv' (HEADER, DELIMITER ',');
这段流程的产出是一张小表,可用来与 WONDER 上同条件的查询结果对拍。对得上,说明布局与过滤条件都对了;对不上,先查年份层,再查是否漏了属地包。
9.3 引用方式
官方要求引用时标明数据来源与年份,并引用 NCHS 的方法文档。学术写作里常用下面这种形式。
National Center for Health Statistics. Multiple Cause of Death, 2018-2024,
Single Race. Compiled from data provided by the 57 vital statistics
jurisdictions through the Vital Statistics Cooperative Program.
Accessed via CDC WONDER on 2026-10-28.
National Center for Health Statistics. Natality, 2024.
Public Use File. Hyattsville, Maryland: NCHS, 2025.
引用年份要以实际使用的文件为准,不要照抄示例。用了受限数据还要注明数据中心编号与审查批号。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 文本生成 | 由 AI 起草,经人工核对官方页面后定稿 |
| 数字来源 | 仅取自 CDC、NCHS 官方页面与门户文件列表 |
| 未做的事 | 未下载全量文件做逐条统计,未做分布估计 |
| 代码状态 | 示例经静态复核,未在生产环境跑通 |
| 已知不确定 | 部分起始年份在不同文档表述不一,已标注 |
| 数据使用 | 未访问任何受限数据,未做个体级推断 |
| 责任边界 | 使用前请以官方用户指南为准 |
| 更新机制 | 官方发布新年后,本篇年份区间需同步 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「NVSS 是一个数据集」 | 是制度加一批年度文件的集合 | 官方首页定义与门户分族列表 |
| 「WONDER 上的就是原始数据」 | WONDER 给的是聚合表,且经抑制 | WONDER 隐私政策页 |
| 「下载了就能拿到县」 | 2005 年起公开版无县以下地理 | 受限数据页说明 |
| 「它是抽样调查,要加权」 | 法定全量登记,无抽样权重 | 官方「最古老的政府间共享」表述 |
| 「死亡数就是患者数」 | 事件级记录,一人可多条 | 记录单位说明 |
| 「跨年直接拼列号」 | 证书修订会移动字段位置 | 各年用户指南布局 |
| 「1999 年前后可直接连着画」 | ICD-9 到 ICD-10 有断点 | 官方对照文件 |
| 「种族分组一直一样」 | 桥接与单一两套口径并行 | WONDER 数据集说明 |
| 「可以用它训练临床预测模型」 | 无检验、无用药、无病程 | 字段字典 |
| 「数据和 WONDER 数字对不上就是错」 | 多半是年份层或口径不同 | §4.4 的案例所示流程 |
| 「它是 CDC 做的调查」 | 是法定登记,不是调查 | 官方关于页的登记权描述 |
| 「年份越新越可靠」 | 最近一年多为临时数据 | 三层发布机制 |
FAQ
Q1:NVSS 和 CDC WONDER 是同一个东西吗?
不是。NVSS 是登记制度与微观文件的集合,WONDER 是建在其上的在线查询界面。前者给逐条记录,后者给聚合表。
Q2:公开文件能拿到县级地理吗?
公开微观文件止步于州。WONDER 上可以按县查聚合数,但那是聚合,不是记录。需要县级记录要向 NCHS 研究数据中心申请。
Q3:为什么出生文件比死亡文件多一年?
出生文件已发到 2025 年,死亡多死因文件最新为 2024 年。两族发布节奏不同,做同年度配对要先对齐年份。
Q4:死亡记录里的多重死因怎么用?
先决定分析目标:共病计数用记录轴,因果链分析用实体轴。两者不能混在一张表里直接相加。
Q5:可以用它做个体级预测模型吗?
可以做人群率的建模与分层分析,个体级临床预测价值有限,因为字段只有证书内容。要补临床变量必须走链接。
Q6:数据要付费吗?
公开文件免费。受限数据不收数据费,但要付申请与审查的时间成本,部分情形涉及数据中心使用费。
Q7:为什么同一个县的死亡数在两次查询里不一样?
大概率是一次查了临时数据、一次查了最终数据,或者种族口径不同。先统一这两项再比较。
Q8:能把 NVSS 和 MIMIC 直接合并吗?
不能直接合并,两者没有共同主键。可行路径是先做地理或时间层的生态链接,个体级链接需要额外授权。
Q9:年龄标化率该用哪套标准人口?
官方默认 2000 年美国标准人口。跨研究比较时,确认对方用的标准人口版本,必要时重算。
Q10:属地数据要不要并进全国合计?
看研究范围。并了要防止重复计数,因为属地包与全国包在个别年份存在交叠。
Q11:文件那么大,必须先全量下载吗?
不必。可以先用 WONDER 确认量级,再只下载需要的年份。单年死亡文件压缩后一百多 MB,全量五十余年才是几十 GB。
Q12:这套数据会被停止公开吗?
目前没有停止公开的迹象,公开文件与聚合查询仍在按年更新。受限数据的政策可能调整,使用时以当年公告为准。
术语表
| 术语 | 含义 |
|---|---|
| NVSS | 国家生命统计系统,制度与文件的合称 |
| NCHS | 国家卫生统计中心,CDC 下属 |
| 生命事件 | 出生、死亡、胎儿死亡、婚丧等法定登记事项 |
| 根本死因 | 引发死亡链条起点的那个病因 |
| 多重死因 | 证明上列出的全部病因,最多二十条 |
| 实体轴 | 把病因与部位、时限拆开的死因表示 |
| 记录轴 | 把死因压成条件串的表示 |
| ICD-10 | 第十版国际疾病分类,美国 1999 年起用于死因 |
| 桥接种族 | 把多种族人口分配到四个单一种族组的口径 |
| 单一种族 | 自报多种族并分组的口径 |
| 登记辖区 | 独立运营登记处的州、城市或属地 |
| 标准证书 | NCHS 与辖区协作制定的证书范本 |
| 定宽文本 | 每个字段占固定字符位置的纯文本格式 |
| 记录布局 | 说明各字段起止位置的文档 |
| 抑制 | 小于阈值的统计单元不显示 |
| 临时数据 | 事件后数周发布、随后会被修订的数据 |
| 最终数据 | 次年发布、一般不修订的数据 |
| 受限数据 | 含地理细节、需审批后使用的版本 |
| NDI | 国家死亡索引,用于队列死亡匹配 |
| 研究数据中心 | 提供受限数据受控分析的设施 |
| 属地 | 波多黎各、关岛等五个非州辖区 |
| 年龄标化率 | 按标准人口结构折算后的率 |
| 生态学推断 | 用群体数据推断个体关系的分析 |
| 时滞 | 事件发生到数据发布之间的间隔 |
| 活产 | 有呼吸或其他生命迹象的娩出,是出生文件的纳入标准 |
| 围产期 | 围绕分娩前后的一段时期,具体周数定义随统计口径变化 |
| 口径 | 统计时所采用的定义、分组与分母约定 |
| 链接 | 把两份来源的记录按准识别字段配对的过程 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 登记辖区数 | 五十七 | NCHS 关于页 | 官方页面 |
| 2024 年出生数 | 3,628,934 | FastStats 出生页 | 官方页面 |
| 2024 年死亡数 | 3,072,666 | FastStats 死亡页 | 官方页面 |
| 出生公开文件起点 | 1968 年 | 数据门户 | 官方页面 |
| 出生公开文件终点 | 2025 年 | 数据门户 | 官方页面 |
| 死亡文件起点 | 1968 年 | 数据门户 | 官方页面 |
| 死亡文件终点 | 2024 年 | 数据门户 | 官方页面 |
| 最新死亡包体量 | 约 146 MB | 数据门户 | 官方页面 |
| 最新出生包体量 | 约 227 MB | 数据门户 | 官方页面 |
| 抑制阈值 | 小于十 | WONDER 说明页 | 官方页面 |
| 多重死因上限 | 二十条 | WONDER 说明页 | 官方页面 |
| 地理收缩起始 | 2005 年 | 受限数据页 | 官方页面 |
| 婴儿死因选表 | 一百三十类 | WONDER 说明页 | 官方页面 |
| 成人死因选表 | 一百一十三类 | WONDER 说明页 | 官方页面 |
| 死因编码切换年 | 1999 年 | NCHS 关于页 | 官方页面 |
| WONDER 死亡库起点 | 1999 年 | WONDER 多死因页 | 官方页面 |
| 桥接口径年份段 | 1999–2020 | WONDER 多死因页 | 官方页面 |
附录 B:数字的来源分层
本篇把数字分成三级,标注方式贯穿全文:
- 一级,官方页面直接写明。辖区数、年份区间、体量、抑制阈值、多重死因上限,都属于这一层,可直接引用。
- 二级,官方文档可推算或他处印证。文件族的起始年、证书修订年、部分体量区间,属于这一层,正文用「前后」「约」标注。
- 三级,未核实。部分属地的具体起始年、个别字段的缺失率,属于这一层,正文不给出具体值。
凡标注为「前后」「约」的年份与体量,均属第二层,使用时以当年门户列表为准。这样分层的目的不是推卸责任,而是让后来者知道哪个数字可以照抄、哪个必须回查。
附录 C:完整参考文献
- National Center for Health Statistics. National Vital Statistics System 首页. cdc.gov/nchs/nvss
- NCHS. About the National Vital Statistics System. cdc.gov/nchs/nvss/about_nvss.htm
- NCHS. Vital Statistics Online Data Portal. cdc.gov/nchs/data_access/vitalstatsonline.htm
- NCHS. Restricted-Use Vital Statistics Data. cdc.gov/nchs/nvss/nvss-restricted-data.htm
- NCHS. Multiple Cause of Death 2018–2024 数据说明. wonder.cdc.gov/wonder/help/mcd-expanded.html
- NCHS. Multiple Cause of Death 1999–2020 数据说明. wonder.cdc.gov/wonder/help/mcd.html
- NCHS. Births: Final Data for 2024. FastStats 出生页
- NCHS. Mortality in the United States, 2024. FastStats 死亡页
- CDC WONDER. WONDER Online Databases 入口. wonder.cdc.gov
以上九条均为官方来源,无二次文献。若需引用方法学细节,应另引 NCHS 的用户指南与生命统计报告系列,这些文档随年度文件一同发布,不单独列出。
附录 D:任务代码
把任意年份的死亡文件转成列式表,并输出分州、分年龄组的计数,用于与聚合查询对拍。
#-- 通用转换:按布局表切字段,输出 Parquet
import duckdb
LAYOUT = {"state": (1, 2), "year": (3, 6), "age": (70, 73), "ucod": (146, 149)}
def width_of(layout: dict) -> int:
return max(b for _, b in layout.values())
def build(src: str, year: int, table: str) -> None:
cols = ", ".join(
f"substr(line, {a}, {b - a + 1}) AS {name}" for name, (a, b) in LAYOUT.items()
)
con = duckdb.connect("nvss.duckdb")
con.execute(f"""
CREATE OR REPLACE TABLE {table} AS
SELECT {cols}, {year} AS file_year
FROM read_csv('{src}', delim='\\x01', header=false, columns={{'line': 'VARCHAR'}})
""")
con.close()
build("work/raw/VS24MORT.DUSMCPUB", 2024, "mort2024")
#-- 分州分年龄组计数,空死因行剔除
SELECT state, age, COUNT(*) AS deaths
FROM mort2024
WHERE ucod <> ''
GROUP BY state, age
ORDER BY deaths DESC
LIMIT 50;
附录 E:如果只记五件事
| 序 | 要点 |
|---|---|
| 一 | 它是法定登记的全量事件账本,不是抽样调查,没有权重 |
| 二 | 公开文件从 1968 年起逐年发布,出生到 2025、死亡到 2024 |
| 三 | 格式是定宽文本,字段位置随证书修订漂移,跨年必须先建映射 |
| 四 | 2005 年起公开版没有县,空间分析要申请受限数据 |
| 五 | 它的价值在分母与结局,不在临床细节;补细节只能靠链接 |
编辑说明
本篇核验时间为 2026 年 10 月 28 日,核验方式为直接访问 CDC 与 NCHS 官方页面及 CDC WONDER 说明页,未下载全量数据文件,未对任何个体记录做统计。
初稿由 AI 依据上述页面起草,数字口径以官方页面为准;凡官方文档之间表述不一致处,已在正文标注「前后」「约」,未做取舍性判断。
未覆盖内容:各属地单独的文件起始年、逐字段缺失率、受限数据的具体费用与排期。这些需要逐年文档比对或向数据中心询价,超出本篇范围。
若官方发布新年份文件,需同步更新 §2.1 的年份区间与附录 A 的核对表。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- hmd — 共享标签:公共卫生与流行病学 / 死亡登记 / 公共卫生统计 / 流行病学
- cdc-wonder — 共享标签:死亡登记 / 公共卫生统计 / 流行病学
- human-mortality-database — 共享标签:公共卫生与流行病学 / 死亡登记 / 公共卫生统计
- jphc — 共享标签:公共卫生与流行病学 / 死亡登记 / 流行病学
- who-mortality-db — 共享标签:公共卫生与流行病学 / 死亡登记 / 公共卫生统计
- hfa-europe — 共享标签:公共卫生与流行病学 / 死亡登记 / 公共卫生统计
- fair-health-atlas — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 流行病学
- nutrition5k — 共享标签:公共卫生与流行病学 / 流行病学
- datasus — 共享标签:公共卫生与流行病学 / 死亡登记
- who-sti-prevalence-atlas — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 流行病学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

