NHEFS — 把 1971 年体检接上 1992 年死亡

NHANES I 随访队列 · 1.4 万人 · 四轮随访 · 4,497 份死亡证书

来源 美国 CDC 国家卫生统计中心(NCHS) url: https://wwwn.cdc.gov/nchs/nhanes/nhefs/default.aspx发布时间: 2026-10-29最后更新: 2026-10-29 阅读 10
NHEFS — 把 1971 年体检接上 1992 年死亡

信息速览

数据集名称NHEFS — 把 1971 年体检接上 1992 年死亡
数据类型1.4 万人队列,四轮随访 1982-1992,ICD-9 多死因编码,免注册公开下载,定宽文本格式
规模14,407 名 25-74 岁基线体检者
接入方式美国 CDC 国家卫生统计中心(NCHS) url: https://wwwn.cdc.gov/nchs/nhanes/nhefs/default.aspx
AI 就绪度

NHEFS 是 NHANES I 流行病学随访研究的缩写。它在 1971–1975 年那批做过体检的美国人身上,一路追到 1992 年,把当时的血压、血清胆固醇、膳食记录,与二十年后的住院、入养老院和死亡证书,放回同一个人的同一条记录里。

这件事在公开数据里并不常见。绝大多数队列要么只公开基线、要么只公开随访结果,要么两个都公开却没有可核对的统一编号。NHEFS 三样都有:统一编号、逐轮随访、死亡结局。它因此成为少数能在没有许可门槛的情况下,直接做「基线暴露 → 长期死亡」设计的公开数据。

一屏速览见下表。

§1 它到底是什么

§1.1 一句话定义

NHEFS 是 NCHS 与美国国家老龄研究所(NIA)联合发起的国家级纵向研究,队列由 NHANES I 中所有完成医学检查、年龄在 25–74 岁之间的人组成(官方页面给出的 n = 14,407),随后在 1982–1984、1986、1987、1992 四轮随访中追踪其发病、死亡、住院与机构化情况。

把这句定义拆开,可以看到三个彼此独立的决定:

决定 官方表述 后果
谁进队列 在 NHANES I 完成医学检查的 25–74 岁者 未参加体检者、25 岁以下者、75 岁以上者全部不进;这不是"全国 25–74 岁人口"
追什么 发病、死亡、住院利用,以及风险因素、功能受限、机构化的变化 结局是多维的,死亡只是其中一维
追多久 1982 年至 1992 年,公开文件止于此 2011 年延展版不在公开渠道

第三行是全文多处要回到的边界。官方页面把 2011 年延展放在「Data Linkage」栏目里单独介绍,与公开文件是两件事。

§1.2 为什么它不是一个普通数据集

普通数据集是「一批观测」;NHEFS 是「一批人的两段时间」。基线是第一段,随访是第二段,两段之间隔了七到二十一年。中间发生了什么、没发生什么,都被记录成时间戳。

这种结构带来三件普通横断面数据给不了的事:

第一,时间顺序是硬约束。基线体检在随访之前,这是设计决定的,不是研究者假设的。做时序建模时不需要额外论证先后关系,但也不能反过来用随访结果去预测基线——那在数据上可行、在时间上不可能。

第二,有真正的删失结构。有些人活到 1992 年还在,有些人在某轮之后失联,有些人在两轮之间死亡。这三种状态在生存分析里必须区别对待,混成一个"缺失"会直接毁掉估计。

第三,同一个人有多轮观测。这意味着可以直接看变化量,而不是比对两个不同人群的横断面。1982 年的血压与 1992 年的血压属于同一个人,差值有意义。

一句话:NHEFS 的价值不在于人多,而在于「同一个人前后两次被量到」。

§1.3 三十秒决策卡

你的处境 NHEFS 能帮你什么
想研究某个 1970 年代的暴露(血清胆固醇、血压、膳食、吸烟)对长期死亡的影响 基线暴露与 1992 年前死亡证书在同一编号下可直接拼接
手上有横断面 NHANES 结果,被审稿人问"能不能看结局" 用 NHEFS 的死亡随访补上结局维度
要做生存分析的方法学演示,但不想申请受限数据 公开文件内有足够的死亡人数与删失结构
关心住院与入养老院的长期轨迹 五份机构停留文件覆盖基线至 1992 年的住院与机构化史
想比较美国上一代人二十年间的风险因素变化 四轮访谈 + 基线体检,但须先处理样本框差异(见 §7)
想估计 1975 年美国某病患病率 应该去用 NHANES I 本身,而不是这份随访文件

最后一行的道理很简单:NHEFS 的文件是"活着被追到的人",越往后越偏向健康者。用它算患病率,算出来的是幸存者的患病率。

§1.4 不适合谁

如果你的需求是下面几类,NHEFS 给不了你:

  • 当期健康监测。数据止于 1992 年。要讨论今天美国人的健康,去看 NHIS 或近年的 NHANES 周期。
  • 临床诊断任务。NHEFS 没有影像、没有病理报告、没有诊断金标准。它的"标签"是死亡与自报疾病,不是临床结论。
  • 高维测量的机器学习基准。每条记录几百个变量,几乎全是分类或整数,没有连续信号、没有序列、没有图像。想找深度学习基准,去影像或信号类数据集。
  • 2011 年及以后的死亡结局。延展版在 RDC 里,公开渠道拿不到。
  • 亚裔、原住民等小群体的单独分析。1971 年的抽样框决定了某些族群在本队列中的样本量极小,切片后置信区间宽到不能解读。

明确写出这些边界不是自贬。一个数据集的可信度,有一半来自它承认自己做不到什么。

§1.5 它回答的是哪一类问题

把 NHEFS 能回答的问题列出来,特征很清楚:它们都是「某个早期状态,后来怎么样了」。

反过来的问题——「现在的情况是什么」——它一个都答不了。这不是局限,是定位。一份冻结在 1992 年的随访数据,能贡献的只有「后来」,不能贡献「现在」。

认清这一点之后,下文所有技术细节(合并、权重、删失、去重)都只是把它用对的手段,而不是它的目的。

§2 数据构成与规格

§2.1 队列规模与随访人数

官方页面与 README 给出的是同一组数:

轮次 时间 对象与人数 采集方式
基线 1971–1975 NHANES I 中完成医学检查、25–74 岁的 14,407 人 家庭访谈 + 医学检查 + 化验 + 膳食调查
第一轮 1982–1984 全队列 追踪 + 本人或代理面访 + 测脉搏/体重/血压 + 摘录住院与养老院记录 + 收集死亡证书
第二轮 1986 基线时 55–74 岁且 1982–84 轮时已知未死亡者,不足四千人 约 30 分钟电话辅助访谈(CATI),不体检
第三轮 1987 全部已知未死亡者 11,750 人 同上
第四轮 1992 全部已知未死亡者 11,195 人 同上
死亡信息 截至 1992 4,497 名已识别死者 死亡证书,ICD-9 多死因编码

四轮随访的追踪率与访谈率官方给了区间:各轮追踪率 90%–94%,访谈率是已追踪者的 91%–96%;到 1992 年为止,全研究人群中 96% 的人至少在某一个时点被成功追踪到。

这组数的读法值得单独说一句。3,980 与 11,750、11,195 不是"三个递减的全队列",而是三个不同的准入条件:1986 年只做老龄段,1987 年与 1992 年才回到全队列。如果把 1986 年的 3,980 当成"全队列只剩四千人",后面的分析会全线错位。

§2.2 四类文件与它们各自的记录单位

公开数据分成四个组成部分,这不是按文件类型分,而是按记录单位分:

组成 记录单位 每条记录代表什么 覆盖轮次
Vital and Tracing Status 人 一个人在各轮的追踪状态、生死状态与人口学信息 四轮汇总为一份
Interview 人 × 轮 某人在某一轮的访谈内容 1982-84、1986、1987、1992 各一份
Health Care Facility Stay 次住院 / 次机构入住 一次过夜的住院或养老院停留 四轮各一份,另有补充文件
Mortality 人 × 轮(死者) 一次死亡事件及其 ICD-9 死因编码 汇总为一份

这个表比任何字段清单都重要。做任何合并之前,先确认你要合并的两张表记录单位是否相同。 访谈表一人一轮一条,机构停留表一人可以对应多条,直接按人键左连接会行数膨胀。

官方 README 里的文件体积表列出的是磁带时代的 MB 数(例如 1982-84 访谈为 10.6 MB 文档 + 50.7 MB 数据),现在从网页下载的定宽文本体积与之一致,可以直接据此估算读取时间。

§2.3 一条记录长什么样

以 1992 年访谈文件为例,定宽文本的前几个字段是这样的:

#-- 1992 Interview 文件前若干列的定宽布局(来源:intv92.inputs.labels.txt)
#-- @1    HANESEQ   $CHAR5   SAMPLE SEQUENCE NUMBER
#-- @6    BLANK1    $CHAR2   填充空白
#-- @8    LINTSTAT  $CHAR2   MOST RECENT COMPLETED INTERVIEW
#-- @10   LINTDATE  $CHAR6   DATE OF MOST RECENT COMPLETED INTERVIEW
#-- @16   BLANK2    $CHAR1   填充空白
#-- @17   LSSEX     $CHAR2   SEX OF SUBJECT
#-- @19   LNDOB     $CHAR6   DATE OF BIRTH
#-- ... 后续字段依次为既往病史模块(L 前缀)、当轮题项、设计变量

三个细节值得注意。

其一,样本序列号叫 HANESEQ,不叫 SEQN。SEQN 是后来 NHANES 连续调查(1999 年至今)的主键名,NHEFS 属于 NHANES I 时代,沿用 HANESEQ。这一条是连接基线文件与随访文件时最容易踩空的坑:按 SEQN 去 join 会得到空结果,而且不报错。

其二,大量字段以 L 开头。README 的字段标签里,LARTH、LSTROKE、LDIABETE、LHIGHBP 这些的含义都是「前次访谈中报告的 X」。也就是说,每一轮访谈不仅记录当轮信息,还重述上一轮的病史,用来做纵向核对与补漏。理解这一点才知道:为什么 1992 年文件里含有 1982 年就能看到的信息。

其三,日期是双份存储。既有 $CHAR6 的组合日期(如 LINTDATE),又有拆分后的月/日/年变量。组合形式在某些统计软件里不能直接转日期,用拆分变量更稳。

§2.4 主键与设计变量

变量 位置 含义 用法
HANESEQ 各文件头部 样本序列号,$CHAR5 跨文件、跨轮次合并的唯一键
STRATUM 文件尾部设计区 抽样层 复杂抽样方差估计
PSU 文件尾部设计区 初级抽样单元 聚类稳健方差
SUBSAMPL 文件尾部设计区 子样本标识 判断该记录属于哪个子样本
SWGT1–SWGT6 文件尾部设计区 六套样本权重 按分析对象选对应权重,不是随便挑一套
TRACSTAT 访谈文件 1992 轮生死状态 生存分析的事件指示
NEWDODYR 访谈文件 死亡年份 生存时间计算
DCRECD 访谈文件 死亡证书接收标记 判断死因是否可查

六套权重是这份数据里最容易被忽略的设计。不同权重的适用对象不同(不同子样本、不同轮次的代表性调整),官方在 Series 2 第 121 号报告里专门讨论过权重使用问题。README 明确把使用者指向那份报告,说明这不是可以自行发挥的部分。

§2.5 与同源数据的关系

NHEFS 不是独立采集的样本,它的基线就是 NHANES I。三者的关系可以这样画:

#-- 数据血缘(自上而下为时间顺序)
NHANES I (1971-75)
  ├── 家庭访谈 ────────────────┐
  ├── 医学检查(血压/身高体重/脉搏)│
  ├── 生化化验(血清胆固醇等)    ├──> 完成检查的 25-74 岁者 = NHEFS 队列
  └── 膳食调查 ────────────────┘
                                  ↓
              1982-84 面访 + 体检 + 住院摘录 + 死亡证书
                                  ↓
              1986 CATI(仅老龄段)→ 1987 CATI(全队列)→ 1992 CATI(全队列)
                                  ↓
                        1992 Mortality(ICD-9 多死因)

箭头说明一件事:基线变量不在这批随访文件里,而在 NHANES I 的公开数据文件里。README 的原话是「NHEFS 公开数据磁带应与 NHANES I 公开数据文件链接,才能进行恰当的纵向分析」。想拿到 1971 年那次的血清胆固醇,必须回 NHANES I 的文件里去取,再按 HANESEQ 接上。

§2.6 定位差异

资源 观测单位 结局 是否公开 与本数据的差别
NHEFS 人 × 四轮 死亡 + 住院 + 自报疾病 公开(2011 延展版除外) 同源纵向,基线暴露可回接体检
NHANES I 人(一次性) 无 公开 有全部基线测量,但没有结局
后续 NHANES 周期(1999 起) 人(每周期独立样本) 需另做死亡链接 公开 + 受限链接 周期不重复访同一人
NHIS 人(年度横断面) 自报;另有死亡链接 公开 + 受限链接 抽样与问卷都不同,不能混用
队列类(如 ARIC、HRS) 人 × 多轮 多种 需申请/注册 年代更近,但门槛更高

这张表的核心是第二行与第一行的对比:同一个样本,有没有结局,是两种完全不同的研究可能性。

§2.7 基线与随访的体积不对称

从下载区的标注能看出一个结构性事实:随访文件很大,基线文件不在其中。

四份访谈文件的标注体积合计超过一百四十 MB,五份机构停留文件合计六十 MB 上下,死亡与生死状态合计不到十 MB。信息量集中在访谈与住院记录里,而不是死亡结局。

但基线文件不在这个清单上。要拿到 1971 年的体检测量,得再去 NHANES I 的数据目录下载另一批文件,再按 HANESEQ 拼过来。它在体量上不重,在流程上却是另一条下载链。

做项目规划时容易漏掉这一点:只看 NHEFS 页面的文件清单,会以为拿全了数据,实际拿到的是半份。

§3 覆盖层:这批人是谁

§3.1 抽样框与实际覆盖

基线抽的是美国平民非机构人口的全国概率样本。NHEFS 只取其中完成医学检查且年龄落在 25–74 岁的人。

这三个限定叠在一起,意味着 NHEFS 不能代表"1971 年的美国成年人"。它代表的是"1971 年愿意并能够到检查点完成体检的 25–74 岁平民非机构人口"。愿意体检这一条本身就筛掉了一部分健康状况差、行动不便或对医疗系统不信任的人。

后续各轮的追踪是"追到受试者当前位置"(官方原话是 attempts to trace and interview all study subjects at their current location),不是固定在原住址。这在当时是相当强的设计,代价是地理信息被淡化。

§3.2 各轮的样本框差异

轮次 纳入条件 隐含的选择
1982–84 全队列 只需活到这一轮
1986 基线 55–74 岁且未死亡 叠加年龄下限,等同于"老龄段幸存者"
1987 全部未死亡者 又回到全年龄段(幸存者)
1992 全部未死亡者 同上,但幸存者更少

这张表解释了为什么"轮次之间的均值变化"不能直接解读为"人群在变化"。1986 年那一轮的均值只代表 55 岁以上的人,1987 年的均值代表所有还活着的人,两者的差距里有很大一部分来自年龄构成的突变,而不是健康本身的变化。

做趋势分析时的正确做法是:先把分析限制在所有轮次都满足同一条件的子集上(例如基线和 1986 年都 ≥55 岁的人),再比较轮次间变化。

§3.3 失访与死亡的区别

在 NHEFS 里,"没有 1992 年访谈记录"至少有四种原因:

  1. 已死亡(有死亡证书)
  2. 追踪到但拒绝访谈
  3. 追踪失败(地址失联、迁移国外)
  4. 该轮不在目标样本内(如 1986 年仅限老龄段)

只有第一种是竞争事件,后三种属于删失或结构性缺失。把它们统一编码成缺失值,会在生存分析里制造出大量假删失,把死亡率算低。

vital and tracing status 文件的价值正在于此:它逐轮记录了每个人的追踪状态,让使用者可以区分这四种情况,而不必靠猜。

§3.4 死亡与死因的可得性

公开的 1992 年死亡文件覆盖截至 1992 年识别出的全部死者,按 ICD-9 多死因编码。README 说明文件里有一个调查期标识变量,允许使用者在四轮之间筛选取用某轮的死亡信息。

这带来一个实操细节:同一个人可能在死亡文件里出现不止一次。如果按人计数死亡人数而不做去重,会得到比真实死者数更高的数字。正确做法是先按序列号去重,或按调查期变量筛选。

死因编码用的是 ICD-9。这在今天做跨年代比较时会遇到版本问题:ICD-10 在 1990 年代中后期才在美国逐步采用,ICD-9 与 ICD-10 的死因类目不是一一对应。把 NHEFS 的死因与 2000 年后的登记数据直接比较,需要先做编码映射。

§3.5 九年缺失的这段空档意味什么

第一轮在 1984 年收尾,第二轮在 1986 年启动,中间空了两年;第二轮与第三轮之间只有一年;第三轮到第四轮又隔了五年。这个不规则的时间间隔不是疏漏,而是经费与设计目标的产物:1986 年那一轮的存在理由是把老龄段补密,好让老龄化的发病与死亡过程有更细的时间分辨率。

对建模的含义有两层。浅的一层是:随访时间点不均匀,任何"每轮等距"的假设都错。深的一层是:事件时间的精度受制于访谈间隔。一个人如果在 1987 与 1992 两次访谈之间报告了新发疾病,事件只能定位到"这五年里某个时点",除非访谈里有确诊年份变量把时间细化。死亡不同——死亡证书有确切日期,所以死亡的生存分析精度远高于自报疾病的发病时间分析。

这也是一个常见的取舍判据:如果研究目标是死亡,NHEFS 的时间精度足够;如果目标是某种慢性病的发病时间,就必须依赖自报确诊年份,误差量级从几个月到几年不等。

§3.6 为什么官方要强调"不应提供患病率"

README 结尾那句提醒值得单独拆开。原文说的是:NHEFS 采集的数据在设计上是纵向的,因此在多数情况下不应用来提供患病率估计。

这句话背后的机制是幸存者结构。假设 1982 年要估计 1975 年某病的患病率,可用人群是活到 1982 年并被访谈的人。这个人群已经经过了七年死亡筛选,患病者的死亡风险通常更高,于是他们在样本里的比例被系统性压低。算出来的患病率会偏低,且偏低程度与该病的致死性正相关——越是致命的病,低估越严重。

这个偏倚的量级不是小数。正因为如此,官方把这句话写进 README,而不是留在方法报告的脚注里。使用时的做法是:要患病率,回到 NHANES I 的基线文件(那里没有幸存者筛选),或者用其他横断面调查。

§4 随访层:每一轮到底问了什么

§4.1 1982–1984:唯一带体检的一轮

这一轮是四轮中信息最厚的一轮,因为它是唯一同时具备三件事的:面访(不是电话)、体检(脉搏、体重、血压)、以及跨机构记录摘录(医院与养老院)。

面访由本人或代理完成。代理访谈在这个人群里不可避免——已经患病或认知受损的人无法自答,只能由家属代答。官方没有在这一轮的公开说明里给出代理比例,但后续分析必须把代理标志当作协变量,否则代理比例高的子群体(高龄、患病人群)在主观题项上的测量误差会系统性偏大。

§4.2 1986、1987、1992:三轮 CATI

三轮的形式统一:约 30 分钟的电话辅助访谈,不测体重血压,不摘录新增的体检数据。这个固定形式的代价是明确的——从 1986 年起,NHEFS 不再有客观测量,只剩自报。

对建模者的含义是:基线(1971–75)与 1982–84 有客观测量,1986 之后没有。想研究"血压变化"的,只能用 1971–75 与 1982–84 两个时点;想研究"自报健康状况变化"的,四轮都能用。把两种测量的变化混在一起比较,是在比较测量方法而不是比较人。

三轮的样本框差异已在 §3.2 说明,此处只补一句:1986 年那一轮是全部四轮中样本最小的,做亚组分析时最容易撞上样本量下限。

§4.3 访谈文件里的"上一轮回顾"结构

1992 年访谈文件的前几十个字段全部是 L 前缀的回顾变量:前次访谈中的婚姻状况、是否工作、父母的生死、各类疾病史及其确诊年份。

这个结构的设计意图是:以最后一次完整访谈为参照,只收集此后的增量。对使用者的好处是,一份 1992 年文件里就含有此前的病史轮廓,不必每次都把四份访谈文件全部读进内存;坏处是,回顾变量与当轮变量混杂在同一张宽表里,做特征选择时容易把"上一轮已报告"误当成"当轮新发"。

区分的办法看变量名:L 前缀 = 上一轮已报告;无前缀的模块 = 当轮询问并记录。确诊年份变量(如 LARTHYR、LBCANCYR、LBKHIPYR)是回溯时间信息,做事件时间分析时很有用,但都是自报。

§4.4 机构停留文件:为什么有五份

Health Care Facility Stay 系列共五份:四轮各一份(1982-84 那份是修订版),另有一份补充文件。

五份的存在理由不是冗余。每一轮访谈只记录了"本轮访谈期间报告的"住院,而受试者可能在访谈间隙回忆起更早的住院,或在某轮失访后才被追踪到、补报了失访期间的住院。补充文件专门装载"1992 年随访期间收到、但描述的是 1992 年之前发生的停留"这一类记录。

官方 README 的说法是:五份合并后,才构成基线至 1992 年的完整住院与机构化史。少合一份,就会漏掉一类住院。

§4.5 随访数据的三种用法

按分析对象分,随访数据有三种典型用法,每种需要的数据组合不同:

用法 需要合并 时间单位 关键字段
死亡生存分析 基线 + vital status + mortality 月或年 体检日期、死亡日期、生死状态、基线协变量
疾病发生时间分析 基线 + 各轮访谈 + 确诊年份变量 年 L 前缀确诊年份、当轮新发病记录
住院/机构化轨迹 基线 + 五份机构停留文件 次 入院/出院日期、机构类型、诊断摘要

第一种用法最成熟,公开文献里的应用也最多——因为死亡日期是硬事件,不依赖自报。第二种受自报诊断年份的回忆误差影响,需谨慎。第三种受回忆与记录完整性双重影响,适合做描述性刻画而非精确推断。

§5 取数层:怎么把它读进分析环境

§5.1 访问性质:完全公开,但有一个例外

公开使用文件可以在 CDC 页面直接下载,不需要注册、不需要签署使用协议、不需要申请。许可性质是美国联邦政府作品,README 只提出引用要求(建议的引用格式是「Source: National Center for Health Statistics (NHEFS)」),并要求在发表物中声明分析结论由作者负责、NCHS 只对原始数据负责。

唯一的例外是 1992 年之后的死亡随访。 官方页面在「NHEFS Data Linkage」区域说明,链接死亡文件把随访延至 2011 年 12 月 31 日、死者总数增至 9,035 人,并通过概率匹配接入国家死亡指数(NDI)。由于保密要求,这份文件只能通过 NCHS 研究数据中心(RDC)访问。

同一区域还列了三条其他链接:社会保障局数据(至 2007 年 12 月 31 日)、Medicare(1991–2007)、Medicaid(1999–2009)。四条都在受限通道里。

§5.2 文件获取

#-- 在工作目录下取回公开文件与配套的 SAS 声明文件
mkdir -p nhefs && cd nhefs
BASE=https://wwwn.cdc.gov/nchs/data/nhefs

for f in readme_ftp.txt \
         n92vitl.txt vitl.inputs.labels.txt 1992vital.pdf \
         N92mort.txt mort.inputs.labels.txt 1992mort.pdf ; do
  curl -sSLO "$BASE/$f"
done

#-- 访谈文件较大,按需取
curl -sSLO "$BASE/N92int.txt"
curl -sSLO "$BASE/intv92.inputs.labels.txt"

每个数据文件都配一个 *.inputs.labels.txt。它不是普通文档,而是 SAS 的 INPUT 与 LABEL 语句集合,可以当作列位置与变量标签的权威来源直接用。

§5.3 读入与合并

import pandas as pd

BASE = "nhefs/"

#-- 官方给的是 SAS 输入语句,先用 pandas 读定宽再赋列名
#-- 这里只演示关键列;完整列位置见 intv92.inputs.labels.txt 的 @n 标记
colspecs = [(0, 5), (7, 9), (9, 15), (16, 18), (18, 24)]
names = ["HANESEQ", "LINTSTAT", "LINTDATE", "LSSEX", "LNDOB"]

int92 = pd.read_fwf(BASE + "N92int.txt", colspecs=colspecs,
                    names=names, dtype=str)
int92["HANESEQ"] = int92["HANESEQ"].str.strip()

#-- 生死状态文件是名单底册,一人一条
vital = pd.read_fwf(BASE + "n92vitl.txt", dtype=str)
vital.columns = [c.strip() for c in vital.columns]
vital = vital.rename(columns={vital.columns[0]: "HANESEQ"})
vital["HANESEQ"] = vital["HANESEQ"].str.strip()

panel = vital.merge(int92, on="HANESEQ", how="left", validate="one_to_one")
print(len(vital), len(panel), panel["LINTSTAT"].value_counts().head())

关键在 validate="one_to_one"。生死状态文件应当一人一条,访谈文件也应当一人一条;如果这个校验报错,说明有一边存在重复序列号,这在真实数据里是会发生的事(同一人在不同调查期出现多次),必须先去重再合并,否则后面的生存时间会算错。

§5.4 机构停留文件的行数膨胀

import pandas as pd

hcfs = pd.concat(
    [pd.read_fwf(f"nhefs/{f}.txt", dtype=str) for f in
     ["n82hcfs", "n86hcfs", "n87hcfs", "n92hcfs", "n92hcfsp"]],
    ignore_index=True,
)
hcfs["HANESEQ"] = hcfs.iloc[:, 0].str.strip()

#-- 一人可以对应多次住院,先聚合到人,再与名单底册合并
stays = hcfs.groupby("HANESEQ").size().rename("n_stays").reset_index()
panel = panel.merge(stays, on="HANESEQ", how="left")
panel["n_stays"] = panel["n_stays"].fillna(0).astype(int)

这段的重点不是代码本身,而是 groupby 那一步。五份机构停留文件纵向拼接后,记录单位是"次停留",直接按人左连接会让 panel 行数翻倍再翻倍。

§5.5 权重与设计变量

#-- 设计变量在访谈文件尾部,SE 估计必须带上它们
#-- 以下用 R 的 survey 包示意口径,权重按分析子集从 SWGT1-SWGT6 中选
#-- 具体选哪一套,须查 Series 2 No.121 报告,不要凭习惯选第一套
library(survey)
nhefs <- read.csv("nhefs_panel.csv")

des <- svydesign(ids = ~PSU, strata = ~STRATUM,
                 weights = ~SWGT1, data = nhefs, nest = TRUE)

#-- 死亡比例的点估计与设计感知置信区间
svymean(~factor(vital_status), des, na.rm = TRUE)

nest = TRUE 不能省。NHEFS 的 PSU 编号在层之间可能重复,不加这个参数,R 会把不同层的同号 PSU 当成同一个,方差被低估。

§5.6 一份可核对的自检清单

拿到数据后,按这个顺序核一遍,能挡住大部分误用:

检查 期望 不符合说明什么
生死状态文件行数 与官方队列数一致 读取时丢行或重复
HANESEQ 唯一性 生死状态文件中唯一 该文件不是名单底册,或读错文件
1992 访谈人数 应小于全队列 大于说明混入了其他轮次
死亡文件去重后的人数 应等于官方给出的死者数 大于说明未按人去重
死亡日期 − 体检日期 全部为正 出现负值说明日期字段解析错位

第四行的坑很隐蔽:死亡文件按"人 × 调查期"组织,同一个人若在多轮被重复确认死亡,会出现在多行。不先去重就数,数字会偏高。

§5.7 贯穿案例:一次 HANESEQ 合并失败的完整复现

把前面几节串起来,最典型的一次翻车是这样发生的:

第一步,从一个 NHANES 时代的脚本模板复制合并代码,模板里写的是 on="SEQN"。运行不报错,得到一个行数有限的表,代码继续往下走,生存分析也跑出了结果。

第二步,结果里的死亡比例明显偏低。检查发现合并后的表几乎全是空值——两个文件里都没有 SEQN 这一列,pandas 的合并没有匹配上任何一行,left join 保留了左表的全部行,右表字段整列为 NaN,任何按右表字段做的缺失值过滤都把这些行悄悄丢掉了。

第三步,改成 on="HANESEQ",但列值是定宽文本,尾部带填充空格。"10001 " 与 "10001" 在字符串比较里不相等,于是仍然大量匹配失败。加 .str.strip() 之后才真正对齐。

第四步,对齐之后行数比预期多。原因是死亡文件按"人 × 调查期"组织,同一个人出现了多次。加 drop_duplicates("HANESEQ") 或按调查期筛选,才回到一人一条。

前述案例的四步分别对应四个不同的失败模式:键名错、键值未清洗、记录单位不同、去重时机错。四者都不会抛出异常,只会让结果安静地偏向某个方向。这也是为什么 §5.6 的自检清单要把"生死状态文件行数"放在第一条——它是唯一一个能在最早阶段暴露前三步的检查。

§5.8 主键误用为什么会静默失败

静默失败在这类数据上格外危险,因为它伪装成「数据就是这样」。§5.7 的案例是典型:四步全部不报错,结果只是偏了一点。

如果合并键写错,得到的是空值而非报错。如果权重选错,标准误偏小而点估计不变,肉眼看不出异常。如果分母用错,死亡率会高到不合理,但如果不做外部对照,这个"不合理"也不会自己跳出来。

三种情况下,唯一可靠的防线都是外部对照:与官方给出的人数对、与已发表文献的效应量对、与常识量级对。前两节已经给出对照的做法,这里只强调一点——对照要在写模型之前做,而不是在结果可疑之后补做。

§6 与库内资源的分工

§6.1 分工:横断面、随访、死亡登记各管一段

库内已经有三类相邻资源,彼此重叠但不互相替代:

库内资源 它负责哪一段 它给不了什么
nhanes 一次访谈加一次检查,测的是某一时点的状态 没有结局,随访对象不重复
nhis 家庭访谈的调查面板,年度连续监测 抽样与问卷体系不同,不能与 NHEFS 直接拼样本
human-mortality-database 按人群汇总的死亡登记 没有个体层面的基线暴露
NHEFS 同源基线 → 四轮随访 → 死亡结局 只要横断面,它反而绕远

这张表要说清的是一个容易混淆的点:nhanes 与 NHEFS 不是"新旧两版",而是同一批设计的不同截面。nhanes 那条讲的是那个横断面调查体系本身;NHEFS 是在它之上长出来的随访分支。想用 1971 年那次体检的原始测量,要回到 nhanes 所描述的 NHANES I 文件;想接死亡结局,才来 NHEFS。

这个分工不是回避重叠,而是重叠本身必须讲清楚:NHEFS 的基线数据并不在 NHEFS 的随访文件里。这是两份数据、两处下载、一次按 HANESEQ 的拼接。

§6.2 与队列类资源的关系

aric、hrs、nurses-health-study 都是纵向队列,与 NHEFS 的差别在三点:

一是年代。NHEFS 的基线在 1970 年代前期,这在美国队列里属于最早的一批。二是门槛。NHEFS 完全公开,其他队列多数需要申请或注册。三是维度。NHEFS 的结局偏死亡与住院,其他队列的测量维度更宽(生物标志物、基因、认知量表)。

做方法学复现时,NHEFS 常被当作"门槛最低的纵向死亡数据"来用;做当代问题时,则应转向测量更新的队列。

§6.3 与汇总类资源的关系

gbd-results 与 world-health-survey 提供的是人群层面的汇总或调查估计。NHEFS 是这些估计的原始素材之一——1970 年代的美国死亡与风险因素分布,最终会以某种形式进入全球疾病负担的估算链条。但两者不能互相替代:一个是个体记录,一个是建模输出。

§6.4 在 AI 流程中的位置

在一条典型流程里,NHEFS 通常出现在三个位置:

位置 作用 注意
预训练/特征筛选 从几百个 1970 年代变量里找出与长期死亡相关的少数因子 筛选必须带权重,否则找到的是"样本大的子群体"的特征
外部验证 用在别处训练的生存模型,在独立的老队列上验证 变量定义要先对齐,1970 年代的题项口径与现代量表不同
方法学基准 检验竞争风险、时变协变量、代理访谈偏倚等方法的稳健性 样本量足以支撑分层,但不足以支撑高维模型

第三行值得强调。NHEFS 的变量数在几百量级,事件数(死亡)在几千量级,算不上高维,做深度模型没有优势。它的合适位置是"方法验证场",而不是"性能竞技场"。

§7 质量评估与局限性

§7.0 阅读本节前需要知道的一件事

用评价机器学习数据集的框架来评价 NHEFS,会得出"没有标注、没有划分、没有基准分数"这类结论——这些结论都对,但都答错了问题。

NHEFS 不是为训练模型造的,它是为流行病学推断造的。它的质量标准是:队列是否代表目标人群、随访是否完整、结局是否可靠、权重是否正确。用"有没有 train/test split"来打分会误判。

同样,把它当成"上个世纪的老数据、没有 AI 价值"也是误判。老数据的价值恰恰在于时间跨度——没有第二个公开数据集能让你看到 1971 年的血清胆固醇与 1992 年的死亡证明之间的关系。

§7.1 逐条局限

局限 具体表现 影响 缓解
设计决定不可估患病率 README 明确说该数据"多数情况下不应提供患病率估计" 用它算患病率会系统性偏低 患病率改用 NHANES I 本身或其他横断面
幸存者选择 越往后越只剩健康者 后期轮次的均值向健康端偏 做趋势分析时固定同一子集
客观测量止于 1982–84 1986 起只有自报 后期的血压血糖无法直接测量 前后两段分别建模
代理访谈 患病、高龄者由他人代答 主观题项误差集中在这部分人 把代理标志当协变量
自报诊断回忆 确诊年份靠回忆 事件时间分析有测量误差 做敏感性分析
死因编码版本 ICD-9,与后来的 ICD-10 不完全对应 跨年代死因比较需映射 用映射表,报告映射损失
公开止于 1992 之后的死亡在 RDC 长随访研究需受限通道 明确声明随访截止
族群样本不均衡 1971 年抽样框限制 小群体切片后不可解读 只在足够大的分组上分析
膳食方法年代差异 1971 年的膳食调查方法与今日不同 营养摄入不可跨年代直接比较 只做同代内比较

§7.2 数据质量评分(DAIMS 框架)

DAIMS(Data and Information Management System,数据与信息管理系统)是一套面向数据产品的能力自评框架。按它的几个维度对 NHEFS 打分如下——分数是依 §7.1 的逐条事实给出的判断,不是官方评分:

维度 评分 依据
完整度 Completeness 4/5 四轮随访齐全,追踪率高;2011 延展不在公开渠道
准确性 Accuracy 4/5 死亡证书与化验为客观来源;自报题项与确诊年份有回忆误差
一致性 Consistency 3/5 四轮样本框不同,跨轮比较需先对齐
及时性 Timeliness 1/5 公开文件最后更新于 1996 年,此后只在受限通道延展
可访问性 Accessibility 5/5 免注册下载,定宽文本加 SAS 声明文件即可读入
可理解性 Understandability 3/5 四份 Series 1 计划与操作报告加一份 Series 2 统计问题报告;字段标签偶有拼写错误
可追溯性 Provenance 5/5 每一轮的抽样、访谈、编码方法都有单独的方法报告
复用价值 Reusability 5/5 支持生存分析、竞争风险、纵向建模等多种设计

这张表最有信息量的一行是及时性。1 分不是贬低,而是提醒:这份数据的公开形态已经冻结了近三十年。

§7.3 外部验证与对照

验证方式 做法 能发现什么
与 NHANES I 对账 按 HANESEQ 回接基线,核对人数与关键测量 拼接是否丢人、主键是否用错
与已知死亡率对账 用官方追踪率与死者数反推粗死亡率 分母是否用错(如把全队列当 1992 年存活者)
与后续 NHANES 周期比对 比较同年龄段、同年代的风险因素分布 抽样差异与测量方法差异的大小
与队列文献比对 找已发表的使用同一文件的生存分析,比对效应量方向 权重与子集处理是否正确

第二条最容易被忽略。粗死亡率 = 死者数 ÷ 人年数。分母若用 1992 年存活人数,会得出一个高得离谱的死亡率;若用全队列总人年,才是对的。这个错误在复现文献时很常见,它与前述案例的失败属于同一类:合并与字段都没错,错在分母把「存活者」当成了「全体」。

§7.4 版权与引用合规

README 给的引用格式很短:表格底部写「Source: National Center for Health Statistics (NHEFS)」,文献表里按 NCHS 的机器可读文件格式著录。它还要求发表物包含免责声明,明确分析、解释与结论由作者负责,NCHS 只对初始数据负责。

对二次分发的含义是:数据本身是美国联邦政府作品,可以再分发,但再分发时应当保留出处说明,且不得让人误以为再分发版本经过 NCHS 认可。

§7.5 与年代相关的一条使用红线

有一条红线与具体分析无关,却几乎每次都会踩到:不要用 NHEFS 讨论当代的疾病负担或政策效果。

原因不在数据质量,而在暴露的年代太早。1971 年的膳食结构、吸烟率、医疗可及性与今天差了一代,从这份数据估出的效应量,迁移到当代人群时会发生变化。它可以作为历史基线,可以作为方法验证,但不能直接充当代结论。

判断规则很直接:如果结论句里出现的是「今天」「当前」「如今」,NHEFS 只能是背景,不能是论据。

§8 版本、生态与历史

§8.1 版本节奏:一次冻结

NHEFS 没有版本迭代的概念。1982–84 访谈文件在 1987 年 12 月发布,修订版机构停留文件 1990 年 11 月,1986 与 1987 两轮在 1990–1991 年,1992 轮的全部文件(生死状态、死亡、访谈、机构停留、补充文件)集中在 1996 年 7 月。此后公开文件不再变动。

这个节奏说明:NHEFS 是磁带时代的产物,数据随交付载体一次性定稿,不像后来的数据产品那样持续打补丁。使用时的隐含假设是——公开文件里有什么就是什么,不会有下一代修正错误。

§8.2 历史沿革

时间 事件
1971–1975 NHANES I 基线:家庭访谈、医学检查、化验、膳食调查
1982–1984 NHEFS 第一轮:追踪 + 面访 + 体检 + 住院摘录 + 死亡证书
1986 第二轮:仅基线 55–74 岁且在世者
1987 第三轮:全队列在世者,改为电话访谈
1992 第四轮:全队列在世者,最后一轮公开随访
1996 1992 轮文件发布,公开数据定稿
后续 死亡随访延展至 2011 年,转受限渠道

由 NCHS 与 NIA 联合发起这一点值得注意。老龄化是这次随访的核心动机之一,1986 年那轮专门针对老龄段,也印证了这个取向。

§8.3 生态位:它是方法学的教科书案例

NHEFS 在流行病学教学与因果推断文献里出现频率很高,原因不是数据新,而是结构干净:

  • 有明确的暴露(基线测量)与明确的结局(死亡证书)
  • 有时间顺序,不需要额外论证
  • 有混杂结构(年龄、吸烟、体重等同时在两侧起作用)
  • 有大量已发表的复现

这使它成为演示倾向评分、逆概率加权、工具变量、G 计算等方法的常见案例。方法学教材选它,是因为它的问题结构可以被讲清楚,而不是因为它的数据规模大。

§8.4 为何能持续:它靠什么活到今天

一份 1990 年代冻结的公开数据,为什么三十年后还有人在用?

第一,替代品不存在。1971 年的美国全国体检样本,只有这一份。想研究那个年代基线暴露的长期影响,没有第二个来源。

第二,成本极低。免注册、体积在几百 MB 量级、格式简单。研究者的启动成本几乎为零,这使它在教学与试算中被反复选用。

第三,方法学惯性。教材与论文用惯了它,新的方法论文献会继续拿它当基准,形成自我强化。

第四,机构背书。NCHS 是联邦统计机构,方法报告(Series 1 的 22、25、27、35 号,Series 2 的 121 号)把抽样、访谈、编码、加权都写清楚了。没有这些报告,数据再干净也不敢用。

四条里最容易被低估的是第四条。一份数据能长期被使用,靠的不是数据本身,而是围绕它的方法文档是否足够让人"放心地犯错后还能查出哪里错了"。

§8.5 一个被反复误用的字段:死亡年份

1992 年访谈文件里的死亡年份字段,看起来是最简单的一个变量,实际用法要绕三道弯。

第一道,它是字符型。定宽文件里所有字段都是 $CHAR,直接参与算术会按字符串处理,"1990" - "1975" 在某些环境下得到拼接而非减法。必须显式转数值。

第二道,它不是所有人的非缺失值来源。访谈文件里死亡年份是访谈轮次内收集的;而统一的生死状态在另一份文件里。有人可能在死亡文件里有记录、在访谈文件里没有,因为访谈未完成。用访谈文件的死亡年份做生存时间,会漏掉一部分死者。

第三道,它与体检日期的差值必须为正。若出现负值或零,一般是日期解析错位(例如把月日年当成日月年),或该记录本不属于本队列。

三道弯走完,才得到一个能用于生存分析的 time 与 event;三道弯的正确走法,与 §5.7 的案例同源——都是把某个「看起来对但其实错」的假设先排除掉。这也是 §9.3 那段最小骨架里为什么有两个看起来多余的步骤——数值转换与正数过滤。

§9 使用指引

§9.1 三种角色的路径

角色 第一步 第二步 产出
流行病学研究者 读 Series 2 No.121 的权重部分 回接 NHANES I 建基线暴露 带设计感知方差的关联分析
数据工程师 从 inputs.labels 文件生成列位置清单 写可复现的合并脚本 一份人 × 轮的面板表
教学者 用生死状态与死亡文件做最小示例 加入基线协变量 生存分析授课案例

§9.2 最小可运行流程

import pandas as pd

def load_panel(vital_path, int_path):
    """把生死状态与某一轮访谈按 HANESEQ 合并成面板。"""
    vital = pd.read_fwf(vital_path, dtype=str)
    vital.columns = [c.strip() for c in vital.columns]
    vital = vital.rename(columns={vital.columns[0]: "HANESEQ"})
    vital["HANESEQ"] = vital["HANESEQ"].str.strip()
    vital = vital.drop_duplicates("HANESEQ", keep="first")

    itv = pd.read_fwf(int_path, dtype=str)
    itv.columns = [c.strip() for c in itv.columns]
    itv = itv.rename(columns={itv.columns[0]: "HANESEQ"})
    itv["HANESEQ"] = itv["HANESEQ"].str.strip()
    itv = itv.drop_duplicates("HANESEQ", keep="first")

    return vital.merge(itv, on="HANESEQ", how="left", validate="one_to_one")

panel = load_panel("nhefs/n92vitl.txt", "nhefs/N92int.txt")
print(panel.shape, panel["HANESEQ"].nunique())

最后一行打印的两个数应当相等。不相等,说明合并后有序列号重复。

§9.3 生存分析的骨架

import pandas as pd
from lifelines import CoxPHFitter

df = panel.copy()
df["time"] = (pd.to_numeric(df["NEWDODYR"], errors="coerce")
              - pd.to_numeric(df["EXAMYEAR"], errors="coerce"))
df["event"] = (df["TRACSTAT"].astype(str).str.strip() == "1").astype(int)

#-- 随访时间为 0 或负的记录必须先剔除再建模
df = df[df["time"] > 0]
df = df[["time", "event", "LSSEX"]].dropna()

cph = CoxPHFitter()
cph.fit(df, duration_col="time", event_col="event")
cph.print_summary()

时间单位的定义(年还是月)、零点(体检日期)、事件定义(是否限于某类死因)三者必须同时写清楚,否则结果无法与已发表研究对照。

§9.4 在长流程中的分工

在一条"从历史暴露到当代政策"的流程里,NHEFS 的角色是中段:

#-- 分工示意
NHANES I 文件  →  基线暴露(血清胆固醇、血压、膳食、吸烟)
     ↓ HANESEQ
NHEFS 随访文件 →  结局(死亡、住院、机构化、自报疾病)
     ↓ 权重与设计变量
设计感知估计   →  人群层面的关联效应
     ↓ 与当代队列比对
迁移与外部验证 →  效应量是否随时间改变

这个链条最关键的一环是 ↓ HANESEQ。它是整条流程唯一的人工衔接点,也是最容易出错的地方。

§9.5 迁移到其他数据时的注意事项

在 NHEFS 上跑通的代码,迁到别的队列时有三处必须改。

一是键名。HANESEQ 是 NHANES I 时代的命名,其他队列各有各的序列号,有的沿用 SEQN,有的用自造 id,有的是复合键。把键名硬编码进函数参数,迁过去必然断。

二是时间零点。NHEFS 的零点可以取体检日期,也可以取某一轮访谈日期。两个选择给出不同的风险集,结论也会不同。迁到别的队列时,零点要重新确定,不能照搬。

三是权重。六套权重与 NHEFS 的抽样设计绑定,换数据就要换权重口径。把权重变量名照抄过去,轻则报错,重则悄悄用了别人的权重。

三处里最隐蔽的是第二处:代码能跑通、结果也像样,但风险集里的人完全不同。

§10 AI 使用声明

项目 声明
性质 观察性纵向队列的公开二手数据,非临床数据、非登记全量
推荐用途 长期死亡结局建模、住院轨迹刻画、生存与竞争风险方法验证、流行病学教学
不建议用途 当期患病率估计、临床诊断模型训练、把公开文件当 2011 年随访版本
伦理边界 死亡与疾病记录涉及已故与在世个体,做再识别推断越界;族群细分需评估小样本表述风险
引用要求 表格标注 NCHS 为原始来源,文献表按 NCHS 机器可读文件格式著录
版本声明 本页描述的是公开使用文件;2011 年延展版的行为须另作说明
状态 公开文件已冻结;使用前应核对官方页面是否新增文件
责任划分 分析与结论由使用者负责,NCHS 仅对初始数据负责

常见误读

常见说法 实际情况 证据
主键是 SEQN 是 HANESEQ;SEQN 属后来 NHANES 连续调查的命名 1992 访谈文件 inputs.labels.txt 首列
四轮随访是 1982、1987、1992,外加一次核对 是 1982–84、1986、1987、1992 四轮,"1986"本身是完整的一轮 官方页面 Survey Description
1986 年样本小是因为失访严重 是设计上只做基线 55–74 岁的老龄段 官方页面给出该轮人数,远小于全队列
死亡随访到 2006 年 公开文件止于 1992;受限链接版到 2011 年 12 月 31 日 官方页面 Data Linkage 段落
死亡人数随年份增加,公开文件里也在增加 公开文件固定记录 1992 年前识别出的死者;9,035 是受限版总数 官方页面与 README 分别陈述
拿到随访文件就有基线体检数据 基线在 NHANES I 文件里,须按 HANESEQ 回接 README:应与 NHANES I 公开文件链接
公开文件需要申请 免注册直接下载;只有链接数据需走 RDC 官方页面下载区与 Data Linkage 区
死亡文件一人一行 按人 × 调查期组织,同一人可能多行 README 提到提供调查期标识变量以筛选取用
可以用它估计 1975 年美国患病率 官方明确说纵向设计多数情况下不应提供患病率估计 README 结尾段落
四轮均值的变化就是人群健康的变化 各轮样本框不同,构成变化会混入 官方页面逐轮给出不同纳入条件

常见问题

Q1:NHEFS 和 NHANES I 是同一份数据吗?

不是。NHANES I 是 1971–1975 年的一次性调查,NHEFS 是在它的受试者身上做的后续追踪。基线测量在 NHANES I 的文件里,随访结果在 NHEFS 的文件里,两者靠序列号拼接。

Q2:为什么队列人数有两种常见说法?

官方统一给的是"完成医学检查的 25–74 岁者"。有人按"全部 NHANES I 受试者"算,会得到更大的数;有人按"有随访记录者"算,会得到更小的数。做分母时先想清楚要回答哪个问题。

Q3:1982–84 那轮为什么特殊?

它是四轮里唯一既做面访又做体检、还系统摘录住院记录的一轮。此后三轮统一改为电话访谈且不体检。所以"客观测量"只存在于基线与这一轮。

Q4:可以用它做机器学习吗?

可以,但要想清楚任务。它的变量是几百个分类与整数,事件数是几千,适合生存模型与表格模型,不适合高维或深度模型。把它当方法验证场比当性能竞技场更合适。

Q5:死亡证书里有什么?

死因按 ICD-9 多死因程序编码,另有死亡日期、死亡地点等信息。详细死因文字与精确地理标识在受限层。

Q6:想延长随访怎么办?

只能走 NCHS 研究数据中心。公开渠道没有 1992 年之后的记录。官方页面在 Data Linkage 区列出了链接版的可申请内容。

Q7:代理访谈会不会毁掉数据?

不会毁掉,但会引入系统性误差。代理比例高的子群体(高龄、患病)在主观题项上误差更大。把代理标志放进模型,误差的影响就能被部分吸收。

Q8:权重有六套,怎么选?

按分析对象选,不是凭习惯。官方把使用者指向 Series 2 第 121 号报告,那份报告讲的就是统计问题与权重使用。选错权重不会报错,只会让标准误悄悄偏掉。

Q9:可以把四轮访谈文件纵向拼起来吗?

可以,但拼之前要确认每轮的样本框。1986 年只含老龄段,直接拼接会让 1986 年的记录在年龄上与其他轮次不可比。

Q10:为什么字段名有拼写错误?

原始 SAS 标签里存在若干拼写问题(如 OSTEOPORSIS、BORKEN)。这些是文件中的既有状态,不是转载错误。处理时保留原拼写,否则与官方声明文件对不上。

术语表

术语 含义
NHANES I 第一次全国健康与营养检查调查,1971–1975 年执行
NHEFS NHANES I 流行病学随访研究,本页描述的对象
NCHS 美国国家卫生统计中心,CDC 下属
NIA 美国国家老龄研究所,NHEFS 的共同发起方
CATI 计算机辅助电话访谈,1986 年后三轮采用的形式
HANESEQ 本数据的样本序列号,跨文件合并键
SEQN 后来 NHANES 连续调查的序列号命名,不可用于本数据
Vital and Tracing Status 逐轮追踪与生死状态文件,一人一条
Health Care Facility Stay 住院与养老院停留记录,一次一条
多死因编码 按死亡证书上列出的全部死因编码,而非只取根本死因
ICD-9 国际疾病分类第九版,本数据死因编码所用版本
NDI 国家死亡指数,用于概率匹配识别死亡
RDC NCHS 研究数据中心,受限数据现场分析场所
竞争风险 生存分析中多种互斥终点的情形,如死亡与失访
删失 随访结束时尚未观察到事件的状态
设计变量 分层、PSU、权重,用于复杂抽样的方差估计
代理访谈 由家属或照护者代答的访谈
幸存者偏倚 越往后越只剩健康者导致的选择偏差
定宽文本 按固定列位置排列的文本数据格式
输入声明文件 描述列位置与标签的 SAS 语句集合

附录 A 文件清单

文件 内容 配套文档 约体积
n92vitl.txt 1992 生死与追踪状态 vitl.inputs.labels.txt / 1992vital.pdf 4 MB
N92mort.txt 1992 死亡数据 mort.inputs.labels.txt / 1992mort.pdf 2 MB
N92int.txt 1992 访谈 intv92.inputs.labels.txt / 1992intv.pdf 72 MB
n87int.txt 1987 访谈 intv87.inputs.labels.txt / 1987intv.pdf 50 MB
n86int.txt 1986 访谈 intv86.inputs.labels.txt / 1986intv.pdf 18 MB
N82int.txt 1982–84 访谈 intv82.inputs.labels.txt / 1982intv.pdf 较小
n92hcfs.txt 1992 机构停留 hcfs92.inputs.labels.txt / 1992hcfs.pdf 4 MB
n87hcfs.txt 1987 机构停留 hcfs87.inputs.labels.txt / 1987hcfs.pdf 3 MB
n86hcfs.txt 1986 机构停留 hcfs86.inputs.labels.txt / 1986hcfs.pdf 2 MB
n82hcfs.txt 1982–84 修订机构停留 hcfs82.inputs.labels.txt / 1982rhcfs.pdf 10 MB
n92hcfsp.txt 机构停留补充 hcfssup.inputs.labels.txt / hcfssupl.pdf 29 MB
readme_ftp.txt 总说明、引用格式 — 15 KB

附录 B 变量与主键

类别 代表变量 说明
主键 HANESEQ 跨文件、跨轮次唯一
追踪状态 TRACSTAT 1992 轮生死状态
死亡 NEWDODYR / DOD / CAUSEDTH / DCRECD 死亡年份、日期、死因、证书接收标志
基线日期 GPEXDATE / EXAMYEAR 体检日期,生存时间零点
上一轮回顾 L* 前缀(LARTH、LSTROKE 等) 前次访谈已报告的病史
确往年 LARTHYR、LBCANCYR、LBKHIPYR 自报诊断年份
设计 STRATUM / PSU / SUBSAMPL / SWGT1-6 分层、聚类、子样本、六套权重
机构停留 各轮 hcfs 文件的入院出院与诊断摘要 一次停留一条

附录 C 术语与缩写补充

缩写 全称
NHANES National Health and Nutrition Examination Survey
NHEFS NHANES I Epidemiologic Follow-up Study
NCHS National Center for Health Statistics
NIA National Institute on Aging
NDI National Death Index
RDC Research Data Center
ICD-9 International Classification of Diseases, 9th Revision
CAPI 计算机辅助个人访谈
PSU Primary Sampling Unit,初级抽样单元

附录 D 常见误读补充

场景 常见处理 问题 建议
数死亡人数 直接对死亡文件取行数 一人多行导致偏高 先按序列号去重
算死亡率 分母用 1992 年存活人数 分母过小,结果偏高 用人年或全队列
拼四轮访谈 直接纵向 concat 1986 轮样本框不同 先固定子集
比较均值 直接比各轮均值 构成变化混入 按年龄分层或标准化
找血压变化 四轮都用 1986 后无客观测量 只用前两轮
选取权重 默认用第一套 权重口径可能不匹配 查 Series 2 No.121
接基线 按 SEQN join 键名不对,得空表 用 HANESEQ
用死因 当根本死因 多死因编码含所有死因 明确取哪一条

附录 E 引用与再分发注意事项

事项 要求
表格来源标注 建议写 Source: National Center for Health Statistics (NHEFS)
文献著录 按 NCHS 机器可读文件格式著录,注明为数据文件与文档
免责声明 声明分析、解释与结论由作者负责,NCHS 只对初始数据负责
技术描述一致性 若发表数据的技术描述,应尽量不与 NCHS 已发表描述冲突
二次分发 数据为美国联邦政府作品,可再分发;须保留出处,不得暗示官方背书
受限数据 链接死亡文件及其余链接数据不可再分发,只在 RDC 内分析
版本核对 使用前应回官方页面核对文件清单与发布状态
联系渠道 数据链接相关问题由官方页面给出的数据链接邮箱承接

编辑说明

核验时间:2026-10-29。核验方式:以 CDC NCHS 官方 NHEFS 页面与官方 README、1992 访谈文件的 SAS 输入声明文件为准;文件体积取自官方下载区的标注。未覆盖内容:各轮访谈的完整字段清单、各轮实际访谈完成人数、基线与随访文件拼接后的实际行数。这些需要在下载全量文件后统计,超出本次写作范围。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • jphc — 共享标签:公共卫生与流行病学 / 队列研究 / 死亡登记 / 流行病学
  • charls — 共享标签:公共卫生与流行病学 / 队列研究 / 调查数据 / 流行病学
  • nhanes — 共享标签:公共卫生与流行病学 / 调查数据 / 流行病学
  • nhis — 共享标签:公共卫生与流行病学 / 调查数据 / 流行病学
  • cvss-nvss — 共享标签:公共卫生与流行病学 / 死亡登记 / 流行病学
  • mesa — 共享标签:公共卫生与流行病学 / 队列研究 / 流行病学
  • chns — 共享标签:公共卫生与流行病学 / 队列研究 / 调查数据
  • elsa — 共享标签:公共卫生与流行病学 / 队列研究 / 调查数据
  • hunt-study — 共享标签:公共卫生与流行病学 / 队列研究 / 调查数据
  • nurses-health-study — 共享标签:公共卫生与流行病学 / 队列研究 / 调查数据

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集