WHO STEPS — 97 国的 NCD 危险因素个体级调查库

三步法住户调查 / 152 轮次 / 97 国 / 登录后方可取数

来源 https://extranet.who.int/ncdsmicrodata/发布时间: 2026-10-29最后更新: 2026-10-29 阅读 9
WHO STEPS — 97 国的 NCD 危险因素个体级调查库

信息速览

数据集名称WHO STEPS — 97 国的 NCD 危险因素个体级调查库
数据类型个体级微数据,许可申请,DDI 元数据,三步法问卷
规模单轮约 3,500–7,000 人(以 4 份 DDI 实查为准);152 轮次累计未公开
接入方式https://extranet.who.int/ncdsmicrodata/
AI 就绪度

一份血压读数、一次空腹抽血、一张关于一周吃了几次水果的问答表,分散在三张不同的纸上,谁也看不出它们属于同一个人。STEPS 做的第一件事,就是把这三张纸按顺序装订成一份,并且让全世界 90 多个国家用同一套装订方式。第二件事更少见:它规定了每一个问题怎么问、每一台血压计怎么校、每一管血离体后多久送检。风险因素的跨国比较之所以能成立,靠的不是样本大,而是这些琐碎的细节被写死在手册里。

代价是这套方法的产出从来不是一个数据库,而是一摞一国一轮的册子。这些册子被放在一个叫 NCD Microdata Repository 的站点里,共 152 条记录,每条背后是一个国家在某一年的某一次调查。册子的封面、目录、变量清单都摊开摆在门口,谁都能翻;但正文被锁在门后,要登记姓名、写明用途、承诺不商用,才给开门。

因此这里要回答的问题比一般的数据库介绍更前置:它到底能拿到什么、拿到之后有什么是不能做的。一屏速览见下表。

维度 内容
中文名 世界卫生组织 非传染性疾病危险因素分步监测方法
英文名 WHO STEPwise approach to NCD risk factor surveillance(STEPS)
维护方 WHO 非传染性疾病监测、报告与监督团队
方法学起点 2000 年代初期在低中收入国家试点,25 年文献口径为 122 国完成
门槛数字一 微数据仓库 STEPS 集合 152 条研究记录
门槛数字二 目录出现的国家代码 97 个(含属地)
时间跨度 2002–2024
结构 三步:问卷 / 体格 / 生化
单轮规模 四份抽查 3,516 至 6,989 例
变量数 四份抽查 180 至 262 个
数据级别 个体级住户调查(非汇总指标)
元数据 DDI XML / JSON 公开,无需登录
个体数据 登录 + 申请;目录页全标 Licensed
许可 非商业、非营利公共卫生用途
最容易被误解的一点 是否"公开数据"取决于你问的是元数据还是记录

§1 它是什么,以及它不是什么

1.1 一句话定义与三个容易混的层次

STEPS 是一套方法,不是一个文件。这三个层次混在一起,是绝大多数误读的起点。

第一层是 STEPS Instrument,通用问卷本体。WHO 在 2024 年 9 月 1 日发布了 Standard STEPS instrument,提供阿拉伯语、英语、法语、西班牙语四种语言版本,每一个问题都有标准题干、标准选项和一个标准题号,例如 T1 是"目前是否吸烟"。各国拿到这份通用问卷后,删改、翻译、加题,形成本国版本。

第二层是 STEPS Survey,一国一轮的具体调查。它由该国卫生部或指定机构执行,有具体的抽样框、具体的日期区间、具体的执行团队。尼泊尔 2019 年那次、阿尔及利亚 2016 至 2017 年那次,都是独立的 Survey。

第三层是 STEPS 微数据,Survey 的个体记录文件。它是对外分发的最小单位,也是这一条主要讨论的对象。

三者容易混,是因为"STEPS"这个词在三处通用同一套缩写。一个常见的具体后果:有人搜到"STEPS 问卷"的 PDF,以为那就是数据;有人下载了某国 STEPS 报告的统计表,以为已取得微数据;还有人把 Instrument 的题号当成数据集的变量名,结果在真实文件里找不到 C1——因为在多个国家发布的版本里,人口学变量已经改名为 age、sex 这类普通词。

1.2 为什么三步法值得单独成库

危险因素监测的手段不止一种。可以只发问卷,成本低、覆盖广,但受访者自报身高体重会系统性偏离;也可以只做体检,客观但昂贵,且难以解释来源。STEPS 的取舍是把两者串在同一个人身上,并按成本从低到高排列,让资源不足的国家可以只做前一两步。

这个设计的关键不在"三步",而在"同一个人"。Step 1 和 Step 2 通常在同一次家访中连续完成,Step 2 的体重、血压直接接在问卷后面;Step 3 往往另约时间,在社区卫生机构集中采血与留尿。因此一个人的数据天然分成三段记录,合并后才有完整的危险因素画像。

下面这张表把三步各自回答的问题和成本摊开,可以看清"哪一步最贵"。

层次 访谈内容 测量内容 采集场所 相对成本 用于回答
Step 1 core 人口学、烟草、酒精、果蔬与盐摄入、体力活动、疾病史、生活方式建议 无 住户内面访 最低 行为危险因素的分布与趋势
Step 1 expanded 教育、族裔、婚姻、就业、家庭收入;戒烟与二手烟;酒精使用障碍;食盐认知;久坐 无 同上 低 社会分层与不平等的刻画
Step 2 core 无 血压(三次读数)、身高、体重、腰围 住户内 中 超重肥胖、高血压的客观患病
Step 2 expanded 无 臀围、心率 同上 中 中心性肥胖、静息心率
Step 3 core 空腹状态确认 空腹血糖、总胆固醇、尿钠、尿肌酐 社区机构集中 最高 糖尿病、血脂异常、盐摄入
Step 3 expanded 无 甘油三酯、HDL 胆固醇 同上 高 完整血脂谱与心血管风险分层

成本差异直接决定了数据完整性。第 5 章会用一个具体轮次说明:同一次调查里,问卷部分人人都有,体格部分掉一个百分点出头,生化部分只剩四分之一。这不是数据质量问题,而是方法本身的资源结构决定的。

1.3 三十秒决策卡

你的处境 STEPS 能帮你什么
要研究中低收入国家成年人的高血压、糖尿病或超重的真实分布 提供同一个人身上的问卷 + 血压 + 血糖,行为与生化可以在个体层面对齐
要比较多个国家在同一年的危险因素水平 标准化题号与流程使跨国比较在方法上成立,但你仍需处理各国年龄范围与分段不同
要做自报身高体重与实际测量的偏差研究 同一份文件里同时有自报值与测量值,可以直接算差值
要研究盐摄入,但没有 24 小时尿 Step 3 的点尿钠与肌酐是少见的可选指标,但只覆盖部分国家
要做 SBP/DBP 测量误差或"三次读数取均值"的方法学研究 多数轮次保留了三次连续读数(m4a/b、m5a/b、m6a/b),而不是只给一个均值
要给模型找几万到几十万量级的大样本训练集 给不了。单轮数千人,152 轮合计也远小于 BRFSS 一年的量;真正的量级在别的库里
要一个可以随取随用、不必请假的开放数据集 给不了。个人记录在门后,需要注册与申请,且授权限非商业用途

1.4 不适合谁

如果你的需求是"下载一份 CSV 立刻开始训练模型",STEPS 给不了你这条路径。个体记录需要注册账号、逐轮提交申请、等待授权,且授权条款明确限制在非商业、非营利公共卫生用途,并要求在发表前告知 WHO。这与 CC BY 这类只需署名的开放许可不是同一回事。

如果你的需求是某个国家当前的全国高血压患病率,STEPS 也给不了直接答案。正确的位置是 GHO 的国家-年面板,那里给的是建模后的年龄标化估计;STEPS 给的是某一年的原始测量,两者回答的不是同一个问题(第 9 章展开)。

如果你的需求是纵向随访,STEPS 尤其不适合。它是重复横断面,每次抽的是不同的人,没有被随访的个体队列。这一点在方法上被反复强调:手册的原话是 surveillance 意味着"在持续、重复的基础上"采集,理想间隔约五年一次,但每次都是一轮新的抽样。

需要个体级、可随访、带生物样本的队列,应当去看 DHS 的纵向变体或各国的专门队列;需要美国境内的行为监测,应当去看 BRFSS;需要妇幼指标,应当去看 MICS。第 9 章给出完整的判断顺序。

§2 数据构成与规格

2.1 目录层面的账:152 与 97

要讲清规模,必须先讲清计数口径,因为"STEPS 覆盖多少国"这个问题的答案从 97 到 122 都有人引用,差别全在口径。

口径一,微数据仓库里有的研究记录数。2026 年 10 月 29 日,STEPS 集合页显示 “Showing 1-15 of 152”,即 152 条研究记录。这是最小、最硬、可复现的口径。

口径二,这 152 条记录里能解析出标准研究编号(形如 AFG_2018_STEPS_v01)的条数,为 146 条。其余 6 条是同一国家内的分区调查,标题带地名,如 “STEPS 2009, Yap”、“STEPS 2002, Pohnpei”,编号格式与主流不同。

口径三,国家代号去重后的数量,为 97 个。这个数字里既有主权国家,也有属地与联系邦——Aruba、Anguilla、Bermuda、Cayman Islands、Cook Islands、Niue、Tokelau、Wallis and Futuna 都在其中。因此"97 国"严格说是"97 个 ISO 3166 地理代号"。

口径四,方法学论文里的口径。2016 年发表在 American Journal of Public Health 的综述给出的数字是:122 个国家完成过 STEPS 或 STEPS 对齐的调查的数据收集,其中 112 国完成全部三步,10 国只做了前两步。这个数字比 97 大,因为它统计的是"做过调查",而微数据仓库统计的是"把数据交回来并建档"。

口径五,WHO 区域办事处新闻稿的口径,2026 年东地中海区域办事处在利比亚的新闻中写道 “over 120 WHO Member States have implemented the STEPS survey”。这与口径四基本一致。

四个口径的差别本身就说明一件事:做过调查、交出数据、能在目录里查到,是三件不同的事。引用数字时若不加限定,"STEPS 覆盖 100 多个国家"这句话会让对方以为 100 多个国家的个体数据都能下到。

口径 数字 统计对象 出处
目录研究记录 152 微数据仓库 STEPS 集合的分册数 集合页 “1-15 of 152”
可解析编号的分册 146 带标准 IDNo 的记录 列表页字段摘要
国家代号 97 ISO 三位代码去重,含属地 列表页 IDNo 前缀去重
方法学论文 122 完成过数据收集的国家 AJPH 2016 综述
区域办口径 120+ 实施过 STEPS 的成员国 EMRO 2026 新闻

2.2 轮次结构:多数国家只有一轮

把 97 个国家按分册数展开,结构相当不均。57 个国家在目录里只有一轮,40 国家有两轮及以上,只有 8 个国家达到三轮或更多。最多的是蒙古,4 轮。

这条分布决定了 STEPS 的两种用法在统计上是不同的:

第一种是跨国横截面比较,用在 57 个单轮国家身上,每个国家贡献一个时间点。此时国家间的年份差异极大——同一张表里既有 2003 年的数据也有 2023 年的数据,把它们当"同一时期"比较需要额外说明。

第二种是国内趋势,只对那 40 个多轮国家成立,而且轮次间隔并不均匀。手册建议约五年一轮,实际执行受资金与政治周期影响,间隔三到十几年都有。

分册数 国家数 说明
1 轮 57 只能做横截面;年份分散在 2002–2024
2 轮 32 可做两点的粗略变化,但间隔不均
3 轮 7 可做趋势;含部分太平洋岛国的分区调查
4 轮 1 蒙古

按年份看,146 条带编号的记录里,2002 至 2009 年共 50 条,2010 至 2019 年共 82 条,2020 至 2024 年共 13 条。近年新增明显放缓,其中一部分原因是疫情打断了现场调查,另一部分是若干国家转向了与 STEPS 对齐但另行执行的调查。

2.3 一轮文件的真实形状

一轮调查对外分发的是一个宽表文件。以特立尼达和多巴哥 2024 年那轮为例,公开的 DDI 描述给出的规格是 4,052 例、207 个变量。

变量不是按"问卷表 / 体格表 / 生化表"三张表组织的,而是全部横向合并在一张宽表里。这意味着一位只做了问卷的受访者和一位三步都做完的受访者,占的是同一行,区别只在后者的 m*、b* 列有值。

变量命名沿用通用题号,前缀的含义如下表。理解这套前缀,是读懂任何一轮 STEPS 文件的第一步。

前缀 含义 典型变量 示例标签
无前缀 抽样与设计变量 stratum、psu 抽样层、初级抽样单元
w 分析权重(分步) wstep1、wstep2、wstep3 第 1/2/3 步权重
C 人口学 c4、c5、c7 受教育年数、最高学历、婚姻状况
T 烟草 t1、t2、t12 目前吸烟、每日吸烟、无烟烟草
A 酒精 a1、a5、a9 是否饮过酒、近 30 天饮酒、暴饮次数
D 饮食 d1、d5、d7 每周吃水果天数、餐桌加盐、加工食品
P 体力活动 p1、p7、p16a 工作性剧烈活动、交通性活动、久坐小时
H 疾病史与卫生服务 h1、h17、h20 是否测过血压、心梗卒中史、就医
M 体格测量 m11、m12、m14 身高、体重、腰围
B 生化测量 b5、b8、b17 空腹血糖、总胆固醇、HDL
X/CX/S/MH 国家自加与可选模块 mh1、s6、cx1 抑郁筛查、乳腺检查、宫颈癌筛查

2.4 一条记录逐列解剖

取特立尼达和多巴哥 2024 年那一轮的一行,按 DDI 里的变量级统计量还原它可能长什么样。下表不是任何真实个体,而是用变量表与取值范围拼出的结构示意。

#-- 一行受访者的结构示意(列名与取值域来自 DDI 979 的变量表)
id        = 54702046        # 主键,8 位整数,全样本取值 2419518–99988576
stratum   = 7               # 抽样层 1–15
psu       = 58              # 初级抽样单元 1–114
age       = 47              # 18–69 岁,全样本均值 46.9
sex       = 2               # 分类变量,取值见值标签
wstep1    = 311.61          # 问卷权重,全样本均值
c4        = 12              # 受教育年数,均值 12.2
t1,t2     = 1,2             # 是否吸烟 / 是否每日吸烟
a1,a5     = 1,1             # 是否饮过酒 / 近 30 天是否饮酒
d1,d2     = 3,2             # 每周吃水果天数 / 每次份数
p1..p16b  = ...             # GPAQ 一整组题,MET 需自行计算
m4a,m4b   = 134,82          # 第一次血压读数 收缩/舒张
m6a,m6b   = 133,80          # 第三次读数;分析惯例取二三次均值
m11       = 169.9           # 身高 cm,全样本均值
m12       = 83.8            # 体重 kg,全样本均值
m14       = 97.1            # 腰围 cm,全样本均值
b1        = 1               # 12 小时内是否进食,空腹状态
b5        = 118             # 空腹血糖 mg/dl,全样本均值
b8        = 226             # 总胆固醇 mg/dl
wstep3    = 325.39          # 生化权重;全样本仅 1021 人有效

从这一行能看出三件直接决定分析正确性的事。

第一,血压不是一个数,而是三次读数的六个变量。分析时按 WHO 手册应取第二次与第三次的均值,而不是三次全部平均,也不是随便拿一次。这在方法学文献里被反复讨论,如果直接用 m4a,高压会系统性偏高。

第二,m11、m12、m14 的均值看起来"正常",但全样本里有 224 人的值是 888。这个值会被朴素地当成 888 厘米身高算进均值。DDI 把这些记录计为"无效",但导出成 CSV 后哨兵码就变成普通数字了。

第三,b5 的均值 118 以及最大值 777 是同时成立的,而有效值只有一千出头。也就是说,任何一个"健康"的缺失处理都在把 777 当成一个真实血糖值。

2.5 与库内同类资源的定位差异

STEPS 的位置,用一句话定位是:跨国、个体级、带客观测量、但需申请。这四个限定语每一个都在和不同的邻居拉开距离。

资源 数据级别 覆盖 是否含客观测量 获取方式 与 STEPS 的差别
STEPS 个体级横断面 97 国代码,152 轮 有(血压、体格、部分生化) 注册申请,非商业 跨国标准化最彻底,但覆盖国家有限
BRFSS 个体级横断面 美国 50 州 无(全国电话自报) 直接下载 量级大 10 倍以上,但只有美国、无体格测量
NHANES 个体级横断面 美国全国 有(体检 + 实验室) 直接下载 客观测量最全,但每轮约 5 千人且仅美国
DHS 个体级横断面 90 余国 部分(身高体重的女性与儿童) 注册后下载 覆盖国家多,但成人 NCD 相关测量少
MICS 个体级横断面 100 余国 部分(儿童体格) 注册后下载 妇幼导向,不含血压血脂
GHO 国家-年面板 190 余国 不适用(汇总) API 直取 覆盖面最广,但已经过建模,非原始测量
GBD 国家-年估计 200 余国 不适用(建模) 门户下载 病种覆盖最广,但为估计值

判断规则可以压缩成一句:要原始个体测量值、且能接受申请流程,选 STEPS;要立刻拿到可用表,选 BRFSS 或 NHANES;要覆盖全部国家,只能退到 GHO 或 GBD 的汇总层。

§3 分步法:方法层

3.1 core / expanded / optional 的三级设计

STEPS 的问卷不是"一份问卷加若干附件",而是三级同心结构。这个设计常被简化成"核心题必做、扩展题选做",但三级之间的界线比这更细。

core(核心):写在 Instrument 里不带底纹的题,各国"强烈建议"纳入。Step 1 的 core 覆盖人口学、烟草、酒精、果蔬与盐摄入、体力活动、疾病史、生活方式建议、宫颈癌筛查;Step 2 的 core 是血压、身高体重、腰围;Step 3 的 core 是尿钠尿肌酐、血糖、总胆固醇。

expanded(扩展):同一份 Instrument 里带底纹的题,用于把某个主题挖得更细。例如人口学扩展出学历、族裔、婚姻、就业、家庭收入;烟草扩展出戒烟尝试与二手烟暴露;酒精扩展出使用障碍;饮食扩展出对食盐危害的认知与控盐行为;体力活动扩展出久坐。Step 2 的扩展是臀围与心率,Step 3 的扩展是甘油三酯与 HDL。

optional modules(可选模块):结构类似但主题跑出主危险因素范围,以独立文档分发。Instrument 页列出的共 13 个:宫颈癌、慢性呼吸系统疾病、残疾、药物使用、家庭能源使用、心理健康/抑郁、心理健康/自杀、口腔健康、体力活动客观测量(加速度计/计步器)、感觉功能、性健康、烟草政策、暴力与伤害。

三级的差别不只是"做不做",还包括能否改变题目的结构。core 题题干固定、选项固定、题号固定,改动只能在翻译层面;expanded 题可以选择不做;optional module 则以整份文档为单位取舍,因此一旦纳入,往往是在原有题号体系之外另起一套前缀。第 2 章表里的 MH、S、CX 就是这类外来前缀。

3.2 题号体系为什么重要

题号(例如 T1、C4、M11)不只是索引,它是 STEPS 全部下游工具的公共锚点。WHO 提供的分析模板、事实表(fact sheet)脚本、数据本(data book)模板,全部按题号定位变量。因此题号一致的直接好处是:一套分析脚本可以套到不同国家的文件上,只要变量名遵循约定。

但这个好处在实践中被打了折。原因有三:

其一,大小写与拼写不统一。多数文件用小写 wstep1,但文档里常写 WStep1;有的文件主键叫 id,有的叫 pid。

其二,国家自加变量侵入命名空间。阿富汗那轮里有 province、district、village 三个地理变量,特立尼达那轮没有;阿尔及利亚那轮把国家特定题编成 x1 之类,与通用题号并存。

其三,题号相同不等于语义相同。x1 在特立尼达那轮是 LDL 胆固醇,在别国可能是完全不同的东西。跨文件合并时按列名拼接,是最常见的静默错误。

3.3 抽样与权重的三步分层

STEPS 的标准抽样是多阶段整群:先抽初级抽样单元(PSU),再抽住户,最后在户内抽一名(或全部)合格成人。年龄范围最常见的是 18 至 69 岁,也有 25 至 64 岁的旧口径,部分国家下限设 15 岁。

权重不是一套,而是三套。这是 STEPS 在结构上最容易被低估的一点。

wstep1 是问卷分析权重,wstep2 是体格测量权重,wstep3 是生化测量权重。三套分开的原因写在研究页的说明里:不同步骤的应答者年龄性别构成可能不同(拒访、中途退出导致),而且部分国家对 Step 2 或 Step 3 做了子抽样。若没有子抽样且各步应答率一致,三套权重会相等。

这条设计对分析的直接含义是:用 wstep1 去估计血糖均值是错的。血糖只在做了 Step 3 的人身上有值,必须用 wstep3。反过来,用 wstep3 去估计吸烟率也是错的,因为没做生化的人在全样本里是缺失的。

权重 适用变量 分子人群 用错的后果
wstep1 c*、t*、a*、d*、p*、h* 全样本 用在生化指标上,等于把没抽血的人按满权重计入
wstep2 m* 完成体格测量者 用在问卷指标上,丢掉未做体检者的信息
wstep3 b* 完成生化测量者 用错会系统性高估或低估生化患病率

3.4 eSTEPS 与纸质问卷并存

WHO 提供 eSTEPS 电子采集工具(安卓平板),带有跳转逻辑与范围校验,可以减少漏答与超界值。但并非所有国家都用。手册与各国报告显示,同期存在三种执行方式:全程 eSTEPS、全程纸质后录入、混合。

这对数据使用者有直接影响:两种方式产生的异常值形态不同。电子采集通常把超界值挡在录入阶段,纸质录入则常常把明显不可信的读数(如收缩压 888)留在文件里。第 2 章 m4a 最大值 888 就是后者的痕迹。

3.5 与 STEPS 对齐的其他调查

不是所有算作"STEPS"的调查都严格使用 WHO 的 Instrument。文献里区分两类:STEPS 调查与 STEPS 对齐调查(STEPS-aligned)。后者指某些国家用本国已有调查但按 STEPS 的关键指标定义采集,例如借用全球成人烟草调查(GATS)的样本框做 NCD 模块。

这个区别在微数据仓库里几乎看不出来——目录不会给每条记录标注"是否完全对齐"。唯一可靠的旁证是研究页的 Scope Notes:它逐条列出了该轮实际采集的 topics 与 measures。想确认某一轮有没有某项测量,读 Scope Notes 比读标题靠谱。

§4 三步的内容边界:Step 3 到底覆盖到什么程度

4.1 先纠正一个印象

常见的说法是"很多国家只做到 Step 2,所以 Step 3 是例外"。这个说法在 2016 年的文献口径下是反的:122 国里 112 国完成三步,只有 10 国止步于两步。也就是说,从"做过调查的国家"这个分母看,Step 3 接近全覆盖。

但这不等于"每个受访者都做了生化"。两件事必须分开:

  • 国家层面:绝大多数做过 STEPS 的国家在某轮做过 Step 3。
  • 个体层面:即便在某轮做了 Step 3 的国家,接受生化测量的往往只是一部分人。

后者才是数据使用者真正面对的边界,而且目录页不会告诉你比例。比例必须从数据字典的变量级统计量里读。

4.2 四轮实证:Step 3 的实际覆盖率

下表汇总了四轮调查的 DDI 统计量,都是无需登录即可获取的公开元数据。四列分别是全样本、体格有效值、血糖有效值、胆固醇有效值。

轮次 全样本 体格有效 血糖有效 胆固醇有效 血糖覆盖
特立尼达和多巴哥 2024 4,052 3,828 1,003 1,021 约 24.8%
东帝汶 2023 3,516 3,438 3,243 3,316 约 92.2%
阿富汗 2018 3,955 3,747 3,647 3,708 约 92.2%
阿尔及利亚 2016–2017 6,989 6,642 6,150 6,371 约 88.0%

四个数的差异揭示的东西比数字本身重要。东帝汶、阿富汗、阿尔及利亚三者的血糖覆盖率都在 88% 至 93%,说明 Step 3 可以作为"近似全样本"使用。特立尼达和多巴哥那轮只有约四分之一,明显是做了子抽样或遭遇了大量失访——生化权重与血糖两个变量的有效值互相印证了这一点。

因此任何跨轮比较生化指标的尝试,第一件事是算这一步的覆盖率。如果两轮的覆盖率一个 92% 一个 25%,直接比较未加权的患病率会得出完全不可靠的结论;即便加了 wstep3,两个人群的代表性也不同,需要用敏感性分析说明。

4.3 Step 2 的覆盖率与"888"问题

Step 2 的覆盖率明显更稳定。四轮里体格测量的有效率都在 94% 至 98% 之间。缺失的百分之几通常是拒测、外出、设备故障。

但 Step 2 有另一个更隐蔽的问题:哨兵码侵入取值范围。血压读数 888、身高 888、体重 888 这类值在 DDI 里被明确标为无效,但在导出文件里它们是普通整数。若不处理,计算平均身高会得到荒唐的结果,而均值只会被轻微拉高、不会报错,因此很难被发现。

处理办法写在手册的数据管理部分,思路是:先用范围规则把明显不可信的值置为缺失,再算衍生变量。范围本身也因国而异——成年人身高不会超过 250 厘米,收缩压通常不超过 250 mmHg,但设备故障可能产生远超此范围的读数。

指标 合理范围(成年) 常见异常值 处理方式
身高 cm 120–220 777、888、999 置缺失
体重 kg 25–250 777、888 置缺失
腰围 cm 40–200 777、888 置缺失
收缩压 mmHg 70–250 888 置缺失,三次读数独立判断
舒张压 mmHg 40–150 888 置缺失
空腹血糖 mg/dl 40–500 777 置缺失;大于 500 需核查设备
总胆固醇 mg/dl 80–400 777 置缺失

4.4 单位问题:标签不可信

STEPS 的生化单位在各国文件里并不统一,且变量标签的写法本身也靠不住。特立尼达那轮的血脂标签写 mg/dl,东帝汶那轮的血糖标签写成 mg/d(少一个字母),而分析方法文档与 R 包文档都按 mmol/L 讨论血糖的合理区间。

这意味着不能靠标签判断单位。稳妥做法有两条:一是回到研究页的 Data Collection Notes,那里常写明使用的设备(例如 Cardiochek PA);二是用数值分布反推——空腹血糖值在 4 至 15 之间通常是 mmol/L,在 70 至 300 之间通常是 mg/dl。

指标 mmol/L 常见范围 mg/dl 常见范围 换算
空腹血糖 4–8 70–150 ×18
总胆固醇 3–6 120–240 ÷38.67
HDL 胆固醇 0.8–2.0 30–80 ÷38.67
甘油三酯 0.5–2.5 45–220 ÷88.57

4.5 尿钠:最被低估的一项

Step 3 core 里有一项在别处很难找的测量:点尿的钠与肌酐。24 小时尿钠是盐摄入的金标准,但实施成本极高,几乎没有大规模跨国调查做。STEPS 用点尿加肌酐校正作为替代,配合身高体重等变量可以估计 24 小时排出量。

代价是估计误差大,且方法本身在演进——不同年份使用的换算方程不同。因此引用尿钠结果时必须同时说明换算方法,否则同一批数据可以算出差异明显的盐摄入量。

这一项也只有部分国家做。特立尼达那轮做了(研究页 Scope Notes 列有 urinary sodium and urinary creatinine),而很多国家在 Scope Notes 里完全没有这一项。也就是说,覆盖率问题在 Step 3 内部还存在第二层。

§5 怎么拿到:访问路径与取数实操

5.1 三道门

STEPS 的数据门禁不是一道,而是三道,每道门给的东西不同。

第一道门:不用登录。 目录列表页、研究描述页、变量清单、DDI/XML 导出、JSON 导出都在门外的。这些内容足以让你判断"这个国家这轮做过什么、变量长什么样、有多少有效值"。

第二道门:注册。 点 Get Microdata 会跳登录页,原文是"To request access to licensed datasets, please login to the website to continue",旁边有注册入口。

第三道门:逐轮申请。 登录之后看到的不是下载链接,而是一个申请表单(目录页的徽标 tooltip 写明 “Microdata request form (Licensed)”)。也就是说注册是必要条件,不是充分条件。

门 需要什么 能拿到什么 适合什么用途
门外 无 目录、研究描述、变量清单、DDI/JSON、变量级统计量 选轮次、做可行性评估、写方法学章节
注册后 邮箱注册 申请入口、下载权限(取决于审批) 提交数据申请
批准后 申请获批 + 承诺条款 个体级数据文件 实际分析

5.2 全部 152 条都是申请制

这一点需要写死,因为研究页的 Version 字段会给出误导。多数研究的 Version Description 写着 “Public-use dataset”,看起来像公开数据;但目录列表页的访问徽标全部是 “Licensed data files”,tooltip 为 “Microdata request form (Licensed)”。在 2026 年 10 月 29 日抓取的 11 个分页里,徽标计数与记录数一致,没有一条是 public-use 徽标。

所以,“public-use” 在这里指的是文件已经去标识化、供外部研究使用,而不是"拿到即可下载"。这两个意思在中文里都常译成"公开",但法律含义完全不同。

5.3 访问条件四条与它们的实际约束

每个研究的 Data Access 段落都列出了同样的四条承诺:

  1. 致谢数据来源。
  2. 在发表前把计划中的出版物告知 WHO。
  3. 向调查协调人提供共同署名(co-authorship)的机会。
  4. 仅用于非商业、非营利的公共卫生目的。

这四条里,第 2、3 条对使用者的影响远超一般的"署名要求"。第 3 条在实践中意味着:如果协调人接受共同署名的邀请,论文作者名单要变;如果拒绝,需要保留邀请记录。第 2 条意味着发表节奏受外部沟通影响。

引用的标准格式也被写死,要求包含国家、年份、实施机构三层信息,形如"This paper uses data from the [country] [year] STEPS survey, implemented by [implementing agency] with the support of the World Health Organization."

5.4 用 DDI 做可行性评估(无需登录)

在提交申请之前,最有价值的一步是把 DDI 下载下来,把"这轮到底有没有我要的变量、有效值多少"先问清楚。DDI 是 XML,结构简单,用标准库就能解析。

#-- 用 DDI 检查一轮调查的可行性与覆盖度(无需登录,无需申请)
import re
import urllib.request

def ddi_url(catalog_id: int) -> str:
    # 目录编号见 catalog 页 URL 末尾,例如 TTO 2024 为 979
    return f"https://extranet.who.int/ncdsmicrodata/index.php/metadata/export/{catalog_id}/ddi"

def load_ddi(catalog_id: int) -> str:
    req = urllib.request.Request(ddi_url(catalog_id), headers={"User-Agent": "Mozilla/5.0"})
    with urllib.request.urlopen(req, timeout=60) as resp:
        return resp.read().decode("utf-8", errors="replace")

def variable_stats(xml: str) -> dict:
    out = {}
    for block in re.split(r"<var ", xml)[1:]:
        name = re.search(r'name="([^"]*)"', block)
        if not name:
            continue
        labl = re.search(r"<labl>\s*(.*?)\s*</labl>", block, re.S)
        stats = dict(re.findall(r'<sumStat type="(vald|invd)">\s*(\d+)\s*</sumStat>', block))
        out[name.group(1)] = {
            "label": re.sub(r"\s+", " ", labl.group(1))[:60] if labl else "",
            "valid": int(stats.get("vald", 0)),
            "invalid": int(stats.get("invd", 0)),
        }
    return out

def coverage_report(catalog_id: int, checks=("m11", "m12", "m14", "b5", "b8")):
    xml = load_ddi(catalog_id)
    total = int(re.search(r"<caseQnty>\s*(\d+)\s*</caseQnty>", xml).group(1))
    stats = variable_stats(xml)
    print(f"轮次 {catalog_id}  全样本 {total}  变量 {len(stats)}")
    for v in checks:
        if v not in stats:
            print(f"  {v:>4}  该轮未收录")
            continue
        s = stats[v]
        print(f"  {v:>4}  有效 {s['valid']:>5}  无效 {s['invalid']:>5}  覆盖 {s['valid']/total:.1%}  {s['label']}")
    return total, stats

for cid in (979, 998, 782, 91):
    coverage_report(cid)
    print("-" * 60)

这段脚本的输出就是第 4 章那张表的来源。四轮的血糖覆盖率分别是 24.8%、92.2%、92.2%、88.0%,一眼就能看出哪一轮不适合做生化分析。

5.5 变量名对齐:跨轮合并前的第一道工序

拿到数据文件之后,最费时的不是建模,而是对齐。变量名在不同轮次之间有系统性差异,写死列名的脚本换一轮就会崩。下面的做法是按题号而非按列名组织,把差异收敛到一张映射表里。

#-- 跨轮变量对齐:按题号归一到统一列名,差异集中在 ALIASES
import pandas as pd

#-- 主键与权重的常见变体;新增国家时只需在此追加
ALIASES = {
    "pid": "id",          # 阿富汗等轮次用 pid
    "wStep1": "wstep1",   # 文档写法与文件写法不一致
    "wstep_1": "wstep1",
    "wStep3": "wstep3",
}

#-- 分析用语义的规范名 -> STEPS 题号(题号跨轮稳定,列名不稳定)
CANON = {
    "age": "age",
    "sex": "sex",
    "height_cm": "m11",
    "weight_kg": "m12",
    "waist_cm": "m14",
    "sbp": ["m4a", "m5a", "m6a"],   # 三次读数,需聚合
    "dbp": ["m4b", "m5b", "m6b"],
    "fasting_glucose": "b5",
    "total_cholesterol": "b8",
    "hdl": "b17",
}

def harmonise(df: pd.DataFrame) -> pd.DataFrame:
    df = df.rename(columns={k: v for k, v in ALIASES.items() if k in df.columns})
    keep = {}
    for canon, src in CANON.items():
        cols = src if isinstance(src, list) else [src]
        cols = [c for c in cols if c in df.columns]
        if not cols:
            continue                       # 本轮没有该变量,留作 NaN 列
        keep[canon] = df[cols].mean(axis=1) if len(cols) > 1 else df[cols[0]]
    out = pd.DataFrame(keep)
    for design in ("id", "stratum", "psu", "wstep1", "wstep2", "wstep3"):
        if design in df.columns:
            out[design] = df[design]
    return out

两个细节值得强调。其一,sbp/dbp 在这里用三次读数的均值做演示;严格按手册应取第二次与第三次的均值,改 df[["m5a", "m6a"]].mean(axis=1) 即可。其二,keep 里缺失的变量直接跳过,不生成全 NaN 列——因为跨轮合并时,某一轮没有 HDL 是常态,硬造列会让后续的缺失统计失真。

5.6 哨兵码清洗

拿到文件后的第二步是把哨兵码转成真正的缺失。这一步不能省,也不能只做一次。

#-- 哨兵码清洗:把 77/777/88/888/99/999 转成缺失,并做范围校验
import pandas as pd

SENTINELS = {77, 777, 7777, 88, 888, 8888, 99, 999, 9999}

RANGES = {
    "m11": (120, 220),   # 身高 cm
    "m12": (25, 250),    # 体重 kg
    "m14": (40, 200),    # 腰围 cm
    "m4a": (70, 250), "m5a": (70, 250), "m6a": (70, 250),   # 收缩压 mmHg
    "m4b": (40, 150), "m5b": (40, 150), "m6b": (40, 150),   # 舒张压 mmHg
    "b5":  (40, 500),    # 空腹血糖 mg/dl
    "b8":  (80, 400),    # 总胆固醇 mg/dl
}

def clean(df: pd.DataFrame, report=True) -> pd.DataFrame:
    df = df.copy()
    for col, (lo, hi) in RANGES.items():
        if col not in df.columns:
            continue
        s = pd.to_numeric(df[col], errors="coerce")
        before = s.notna().sum()
        s = s.where(~s.isin(SENTINELS), other=pd.NA)
        s = s.where((s >= lo) & (s <= hi), other=pd.NA)
        df[col] = s.astype("Float64")
        if report:
            print(f"{col:>4}  非空 {before:>5} -> {int(s.notna().sum()):>5}  (范围 {lo}–{hi})")
    return df

注意 s.where(~s.isin(SENTINELS), other=pd.NA) 里用 isin 而不是相等判断,原因是一次比较多个哨兵码,且可以避免对 NaN 做比较产生的警告。

5.7 权重使用与分析口径

清洗之后才是分析。加权这一步用 R 的 survey 包最容易对上 WHO 分析模板的做法,Python 端等价于用 wstep* 作概率权重、stratum 与 psu 声明设计。

#-- 加权患病率:按步骤选对应权重,声明分层与 PSU
import numpy as np
import pandas as pd

def weighted_prevalence(df, indicator, weight="wstep1"):
    d = df[[indicator, weight, "stratum", "psu"]].dropna()
    if d.empty:
        return float("nan"), 0
    w = d[weight].astype(float)
    num = (d[indicator] == 1).astype(float) * w
    return float(num.sum() / w.sum()), len(d)

#-- 问卷指标用 wstep1,生化指标必须用 wstep3
for ind, wt in [("t1", "wstep1"), ("sbp_high", "wstep2"), ("glucose_high", "wstep3")]:
    p, n = weighted_prevalence(df_clean, ind, wt)
    print(f"{ind:>14}  权重 {wt}  n={n:>5}  加权患病率 {p:.1%}")

这里的 stratum 与 psu 只用于取子集,没有真正进入方差估计。要做置信区间,需要 statsmodels 或 R 的 survey::svymean 声明完整设计;点估计用上面这段就够。这个区别在很多论文里被忽略——报了点估计与"95% CI"却没有声明设计,CI 是偏窄的。

§6 分层:它由哪几块拼起来

STEPS 不是一个平面文件,而是四块拼起来的结构。四块各自回答不同的问题,对应不同岗位的痛点。

第一块,方法规范层,回答"该测什么、怎么测"。载体是 STEPS Manual 的七个部分与 Standard STEPS instrument,加上 Q-by-Q 指南与展示卡(show cards)。使用者是准备做调查的国家团队,以及要写方法学章节的研究者。痛点是一份合规的方法段怎么写。

第二块,执行记录层,回答"这一轮实际做了什么"。载体是每轮的研究描述页:Scope Notes 列出实际采集的 topics 与 measures,Sampling 段落给出抽样程序与应答率,Data Collection Notes 写明设备与日期。使用者是要判断某一轮能否用于某个课题的人。痛点是从标题看不出的差别,全在这一段。

第三块,变量字典层,回答"每一列是什么、有多少有效值"。载体是变量清单与 DDI 导出,含变量标签、值标签、取值范围、有效与无效计数。使用者是要写清洗脚本的人。痛点是哨兵码、单位、变量名不一致,全部在这一层暴露。

第四块,个体记录层,回答"具体每个人的值是多少"。载体是申请获批后的数据文件。使用者是做分析的人。痛点反而不在这层——拿到之后的问题都是前两层留下的。

层 载体 回答的问题 谁需要 门禁
方法规范 Manual 七部分、Instrument、Q-by-Q、展示卡 该测什么、怎么测 执行国团队、方法学作者 无
执行记录 研究描述页 Scope / Sampling / Notes 这一轮实际做了什么 选题者、审稿人 无
变量字典 变量清单、DDI、JSON 每列是什么、多少有效值 写清洗脚本的人 无
个体记录 数据文件 每个人的具体值 分析者 注册 + 申请

这个分层的实用价值在于:前三层全部免费开放,第四层要申请。也就是说,一个研究项目里真正需要申请的动作,只占整个流程的最后一步。前期所有可行性判断、变量对齐、覆盖率核算,都可以在不申请的情况下完成。

这也解释了一个常见现象:不少论文的 Methods 部分对 STEPS 的描述相当准确,但 Results 里的数字无法复现——因为他们读的是前三层,做的是第四层的推断。

§7 质量评估、局限与 DAIMS

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

评 估 STEPS 时最容易犯的框架错误,是拿"数据集"的标准去量一套"调查基础设施"。若按一个静态数据集的标准衡量,STEPS 的缺点会显得致命:没有统一主键、变量名不一致、缺失没有统一编码、单位混用、个体数据不开放。

但这些所谓缺点,大多不是 STEPS 的属性,而是"97 个国家的 152 次独立调查被汇总到同一个目录"这个事实的必然结果。WHO 提供的是方法与存放地点,不是一份被清洗过的合并数据。目录里的每一册,在它自己的国家里都是完整自洽的;把它们拼在一起才出现裂痕,而拼接本来就是使用者要做的工作。

第二个常见的框架错误,是把"未公开"当成"不存在"。个体数据不开放,不代表数据质量差;恰恰相反,正因为要承担论文与政策的责任,才设了申请与共署名的门槛。

读完这一节的正确姿势是:把下面列出的局限,读成"使用者在拼接时必须自己解决的工程问题清单",而不是"WHO 做得不够好的地方"。

7.1 结构层面的局限

没有跨轮统一的主键。 每个国家-轮次是独立文件,主键只在文件内唯一。同一个国家不同轮次之间没有可以连接个体的键,因为重复横断面本来就不追踪同一个人。

变量集合随轮变化。 同为 262 变量的东帝汶 2023 与阿尔及利亚 2016,实际变量并不一一对应;阿富汗 2018 只有 180 个变量,因为没做部分可选模块。按列数对齐是错的。

地理粒度的不透明。 部分轮次提供了省、县、村三级地理变量,部分只到城乡。目录页不会标注这一点,只有变量清单能看出来。想做次国家级分析,必须先查清单。

7.2 测量层面的局限

设备与试剂不统一。 手册推荐了设备类型(例如便携式血糖血脂分析仪),但各国实际采购不同,校准与质控水平也不同。可用的线索是 Data Collection Notes 里写明的设备型号,例如 “Cardiochek PA devices were used”。

血压读数的取值习惯不一。 有的国家记录三次完整读数,有的记录两次,有的已预先算好均值。用统一脚本按 m4a/m5a/m6a 取均值,在只记录两次的轮次上会静默丢掉一次。

自报值与测量值在同一份文件里并存,容易混用。 疾病史部分(h*)是"医生曾告知"的自报,Step 2 的血压是现场测量,Step 3 的血糖是实验室测量。做"糖尿病患病率"时,用 h7a 得到的是自报诊断率,用 b5 加阈值得到的是测量患病率,两者可以差出一倍以上。

7.3 访问层面的局限

申请流程的周期不可预估。 目录页不公布审批时限。对于有明确截稿期的项目,这是实质性风险,应在项目计划中前置。

共署名条款的合规负担。 第 5.3 节列出的第 3 条承诺,在制度化程度高的机构里需要提前取得伦理或作者协议的确认。

再分发受限。 由于授权限非商业且要求告知 WHO,把原始文件放进公开仓库、或做成衍生开放数据集再发布,都需要单独判断。稳妥做法是只发布聚合结果与可复现脚本,原始文件由使用者自行申请。

7.4 DAIMS 24 项评估

DAIMS(Data and Analytics Infrastructure Maturity Schema)用于评估一个数据资产在 24 个维度上的成熟度,分为组织治理、数据管理、数据质量、分析就绪、可访问性与合规五组。STEPS 的评分如下。

组 维度 分 依据
治理 权责归属 5 WHO 是全球卫生统计的权威机构,方法权属清晰
治理 许可清晰度 3 四条承诺没有版本化的正式许可文本,条款靠研究页转述
治理 变更公示 4 目录列有 Last modified,但不发版本说明公告
治理 长期存续 5 已运行逾二十年,机构存续无疑
数据管理 元数据完备 4 DDI 结构规范,含变量级统计量
数据管理 词表控制 3 Topics 与 Keywords 为受控词,但变量名不受控
数据管理 主键设计 2 文件内主键,跨轮无键
数据管理 版本标识 4 每轮有 v01 式编号,但极少出现 v02
数据管理 溯源链 3 可追到实施机构与设备,但无原材料级记录
数据质量 缺失编码 2 哨兵码与真值混存,编码不统一
数据质量 范围校验 2 存在 888 类明显不可信值,未见统一清理
数据质量 单位一致 2 mg/dl 与 mmol/L 混用,标签有拼写错误
数据质量 应答率披露 4 研究页给出总体应答率,但非分步
数据质量 权重完备 4 三步分设权重,设计较为讲究
分析就绪 开箱可用 2 无合并版,需大量对齐工作
分析就绪 派生变量 2 不提供 BMI、MET 等派生列,需自行计算
分析就绪 文档示例 3 手册与分析模板齐全,但无公开代码库
分析就绪 基准任务 1 无官方基准或排行榜
可访问性 免注册入口 4 元数据完全开放
可访问性 个体数据门槛 2 注册 + 逐轮申请 + 非商业限制
可访问性 批量接口 2 无 API,只有逐轮 DDI/JSON 导出
可访问性 格式多样性 3 提供 SPSS/CSV 等,视轮次而定
合规 隐私处理 5 去标识,无直接标识符,受访者年龄分组
合规 伦理审查 4 各轮附伦理审批,但目录不统一存档

合计 24 项,总分 77 / 120。各组的均分如下。

组 平均分 解读
治理 4.25 机构与存续性最强,短板在许可文本化
数据管理 3.4 元数据规范,主键与词表是硬伤
数据质量 2.8 最低,全部来自跨轮汇总而非单轮本身
分析就绪 2.0 最低,官方不提供任何开箱可用的合并产品
可访问性 2.75 元数据极开,个体数据极严,两极分化
合规 4.5 隐私与伦理实践到位

评分解读。 77 分落在一个有意思的位置:治理与合规接近满分,分析就绪只有三分之一。这不是"好库"或"坏库"能概括的,它刻画的是一个公共品形态的档案库——它把权威性押在方法规范与隐私保护上,把清洗与整合的负担明确地留给下游。

对你意味着什么。 如果你的项目需要"一周内跑出第一版结果",78 分的分布意味着成本主要花在对齐与清洗上,而不是建模上;如果你的项目需要"方法学可辩护、隐私合规无争议",那 4.5 分的合规组正是它最值钱的地方。

7.5 外部验证的可行路径

STEPS 的数字可以与三类外部源交叉验证,但每一类都要注意口径。

外部源 可对照的指标 口径差异
NHANES 血压、血糖、血脂的测量方法与分布 美国人群,且为体检车标准化流程,设备差异导致分布有偏移
NCD-RisC 池化 血压、BMI、糖尿病患病率趋势 后者是建模估计且吸收了 STEPS 作为输入之一,不是独立验证
GHO 面板 年龄标化患病率 GHO 为估计值,年龄标化口径与 STEPS 原始值不同
各国官方统计年报 同年的本国患病率 常直接引用 STEPS,构成循环引用

最值得警惕的是最后一行。很多国家的 NCD 官方数字本来就来自 STEPS,用它去"验证"STEPS 等于自己验自己。真正独立的验证源是 NHANES 这类用不同方法体系采集的数据。

§8 版本、生态与它为何能持续

8.1 版本节奏

STEPS 的"版本"有三个独立的时间轴,混淆它们会得出错误的可比性结论。

方法版本轴:Instrument 本身在演进,题号与内容随版本调整。2015 年后的核心结构与早年的 2000 年代初版本已有差别,例如电子烟相关题目在后期才加入。

目录收录轴:微数据仓库持续收录新轮次并回填旧轮次。2026 年 7 月 29 日上线的东帝汶 2023,就是近期新增;阿富汗 2018 那轮的 Last modified 是 2026 年 6 月 1 日,说明旧记录也会被更新。

实施时间轴:每轮调查的实地采集时间,与研究编号里的年份不总一致。阿尔及利亚编号为 2016,采集跨 2016 至 2017;巴哈马编号 2011,采集跨 2011 至 2012。

轴 载体 变化频率 影响什么
方法版本 Instrument 文档 数年一次 题号与题目内容的可比性
目录收录 catalog 记录 持续 有没有数据可查
实地实施 研究描述页日期 每轮一次 数据的时点归属

8.2 生态位

STEPS 在证据链条上的位置,可以这样定位:它是上游的原始测量提供者,不是下游的学术产品。

往上,它依赖各国的卫生统计能力与抽样框;往下,它的数据被三类消费者使用:一是 WHO 自己的报告体系(NCD 进展监测等);二是学术上的二次分析,包括跨国比较与合并分析;三是建模工作的输入,NCD-RisC 的池化数据集就吸收了各国的人群测量研究。

值得注意的是,WHO 区域办事处各自还维护着与本区域相关的补充材料。东地中海区域办事处在 2026 年的新闻稿中,用 STEPS 的描述解释了本国新开展的调查,说明这套方法在区域层面仍在推广。

8.3 它是怎么来的

STEPS 的起源问题,在 WHO 的公开页面上写得比较克制。主页只说这是一套"简单、标准化"的方法,用于在各国采集、分析与分发关键 NCD 危险因素数据。方法学综述提供了更多背景:2000 年前后,多数低中收入国家在 NCD 危险因素上几乎没有可用数据,于是有了这套方法的试点。

综述里有一个很有说服力的表述:从"2000 年在多数低中收入国家几乎找不到数据"的暗淡图景,到十五年后"许多国家已拥有稳健的危险因素数据",这中间的转变正是 STEPS 想达成的目标。

8.4 它靠什么活着

三个支柱。

第一,机构刚性。 它不是一个研究项目的副产品,而是 WHO NCD 监测体系的一部分,挂在正式的组织单元下(Surveillance, Monitoring and Reporting team)。这意味着它有人、有预算科目、有年度工作计划的支撑。

第二,方法学的可辩护性。 三步法的设计、手册的详尽程度、DDI 的元数据规范,使它在学术审查中站得住。这一点在用作者的话说就是"标准化但灵活"——同一个框架既能让资源匮乏的国家只做问卷,也能让有条件的国家做全套生化。

第三,下游的依赖。 各国要用 STEPS 数据报告本国的 NCD 目标进展;区域办事处要用它做区域比较;建模项目要用它做输入。一旦停摆,这些下游都会缺一块。依赖形成之后,即便单个国家的积极性下降,整体也不会瓦解。

8.5 为什么它没有变成"一个大数据库"

既然全球都在用同一套方法,为什么不干脆合并成一个库?这个问题值得正面回答,因为它解释了 STEPS 最令人困惑的一点。

原因是三重的,且每一重都不是技术问题。

一是权属。每一轮调查的实施机构是当事国,数据的处置权在当事国与 WHO 之间,不是 WHO 单方可以合并发布的。

二是可比性的限度。即便用同一套问卷,各国的抽样框、年龄范围、执行质量仍有差异。合并成一个库会制造一种"可以任意比较"的错觉,而这种错觉比"需要分别处理"更危险。

三是隐私门槛的差异。合并会让小国的可识别风险上升——几千人的样本在细分到省份与年龄组之后,重识别的余量很小。逐轮申请的做法,实质上是把隐私评估放在每一轮的具体规模上做。

这三点合起来,构成了 STEPS 之所以是"一个目录"而不是"一个数据库"的根本理由。

§9 在库内的位置与检索路径

9.1 与 who-gho 的分工:汇总层 vs 个体级

这是最容易出错的一处,必须写清楚。

GHO(WHO 全球卫生观察)是指标层:国家-年面板,每个单元格是一个聚合数字。STEPS 是个体记录层:每个人一行,包含问卷、体格、生化。两者不是同一份数据的两种格式,而是两张不同层级的资产的上下游关系。

更要紧的是:GHO 里的 NCD 危险因素指标,多数不是 STEPS 的直接汇总。 以高血压为例,GHO 指标页的方法学说明写明,该指标基于 1,201 项人群研究、1.04 亿人的池化分析(NCD-RisC 的工作),数据源标注为 “WHO estimates”。STEPS 是这类池化分析的输入之一,但只占其中一部分——NCD-RisC 的输入还包括各国其他人群调查。

所以正确的分工表述是:

需求 用谁 为什么
200 个国家的年龄标化高血压率时间序列 GHO STEPS 没有这么多国家,也没有连续年份
某一国某一年某个省的实际测量值分布 STEPS GHO 只到国家级,且是估计值
个体层面的行为-生化关联(例如吸烟与血糖) STEPS GHO 无个体记录,做不了关联分析
复现某篇论文报告的国家患病率 先查 GHO,再查 STEPS 论文常引 GHO 估计,直接对 STEPS 原始值会对不上

9.2 与 brfss 的分工:规模 vs 广度

BRFSS 是美国 CDC 的年度电话调查,单年四十余万条记录,直接下载。STEPS 单轮数千人,需申请。规模上 STEPS 远不如 BRFSS。

但两者的分工不在规模,而在测量与范围。BRFSS 是自报,没有血压血糖测量;STEPS 有实际测量值,但只在美国以外。想做自报与测量值的偏差研究,最理想的设计恰恰是把两者都用上:用 NHANES 建校准关系,用 BRFSS 推全国,用 STEPS 推跨国。

9.3 与 mics、dhs-program 的分工:妇幼 vs 成人 NCD

MICS 与 DHS 都是多国住户调查,覆盖国家数都在 90 以上,都在 STEPS 之上。但它们服务于妇幼与家庭健康,成人 NCD 部分薄。MICS 的成人模块近年有所扩充,仍不含血压血脂的标准化测量。

判断规则:指标落在五岁以下儿童或育龄妇女的健康上,用 MICS/DHS;落在成人行为与代谢危险因素上,用 STEPS。

9.4 与 world-health-survey 的分工:一次性 vs 制度化

世界卫生调查(WHS)是 WHO 的一次性横断面调查,采样覆盖数十个国家,但只做过一轮,没有形成周期性监测。STEPS 的核心优势正是周期性——同一个框架可以被反复使用,从而产生趋势。因此需要趋势分析时 STEPS 占优,需要快速跨国描述时可以看 WHS。

9.5 与 gbd-results、ncd-risc 的分工:原始测量 vs 建模估计

GBD 是 IHME 的全球疾病负担建模体系,NCD-RisC 是危险因素领域的池化建模协作。两者都产出覆盖 200 个左右国家、跨越数十年的估计值,都吸收了 STEPS 作为输入之一。

它们的价值与 STEPS 正好互补:要全覆盖的估计,用它们;要看某一国的原始分布,用 STEPS。 一个常见的误区是用 GBD 的国家估计去"校正"STEPS 的原始值,这等于用下游去改上游,会掩盖原始测量中的真实信息。

库 层级 覆盖 关键用途 与 STEPS 的关系
who-gho 指标汇总 190 余国 面板时间序列、SDG 监测 STEPS 是其若干指标的间接输入
gbd-results 建模估计 200 余国 疾病负担、归因分析 部分输入来自 STEPS
ncd-risc 建模估计 200 国 危险因素趋势池化 明确吸收 STEPS 等测量研究
brfss 个体记录 美国 美国行为监测 平行方法,无体格测量
nhanes 个体记录 美国 美国体检与实验室 方法学上的对照源
mics / dhs-program 个体记录 90 余国 妇幼与家庭健康 覆盖重叠但指标不同
world-health-survey 个体记录 数十国 一次性跨国横断面 目标相似但非周期
STEPS 个体记录 97 国 成人 NCD 危险因素的原始测量 —

9.6 检索顺序建议

从一个具体问题出发,建议按下面的顺序找,可以少走弯路。

  1. 先明确问题是"要估计值"还是"要原始测量"。要估计值直接去 GHO 或 GBD,不必碰 STEPS。
  2. 若要原始测量,先确认目标国家在 97 个别内。这一查只需看目录列表。
  3. 再确认目标国家有没有做过需要的步骤。看研究页的 Scope Notes。
  4. 再确认需要的变量在这轮的有效值够不够。看 DDI 的变量级统计量。
  5. 以上都通过,再提交申请。

前四步全部不需要登录,通常能在半小时内完成。跳过前四步直接申请,是效率最低的路径。

§10 AI 使用声明

项目 声明
性质 官方公共卫生调查的个体级存档,非机器学习数据集
建议用途 流行病学二次分析、跨国比较、方法学研究(测量误差、自报偏差、抽样设计)
不建议用途 个体临床诊断、实时预测服务、商业模型训练
数据前提 个体记录须申请;使用前须核对覆盖率、单位与哨兵码
隐私与伦理 受访者已去标识,但细分到小样本亚组时仍有重识别风险,发布结果应做最小单元抑制
引用方式 按研究页给出的模板引用国家、年份与实施机构,并按承诺在发表前告知 WHO
版本与时效 目录持续更新;以引用当日的研究页 Last modified 为准
使用边界 非商业、非营利公共卫生用途;不得暗示 WHO 对使用者结论的认可

关于 AI 使用,有两条具体的实践建议。

第一,把 STEPS 当标签源要极其谨慎。它的个体记录适合做暴露与结局的描述性分析,不适合当作"金标准标签"训练诊断模型——因为生化测量本身有设备误差,且仅约四分之一到九成的受访者有生化值,标签的缺失机制与结局相关。

第二,合成数据要标注来源谱系。用 STEPS 的变量结构与分布生成合成数据,是常见的教学与开发做法;但若合成数据被用于训练并部署,必须说明其原始谱系与许可限制,避免把非商业授权下的产物带进商业管线。

常见误读(避坑清单)

常见说法 实际情况 证据
“STEPS 是一个可以下载的数据集” 是一个目录加方法,个体数据逐轮申请 全部 152 条目录页徽标均为 Licensed data files,取数页跳转登录
“研究页写着 Public-use dataset,所以能直接下” public-use 指去标识可对外使用,不是免申请 取数页原文 “To request access to licensed datasets, please login”
“STEPS 覆盖 110 多个国家,每个国家都有一轮数据” 目录内 97 个代号,其中 57 国仅一轮 列表页 IDNo 去重与分册计数
“做过调查的国家都能拿个体数据” 122 国做过收集,目录内只有 152 册 AJPH 2016 综述 vs 集合页计数
“Step 3 只有少数国家做” 112 / 122 国做过三步 PMC4695948 正文
“做了 Step 3 就等于全样本都有生化值” 覆盖率可低至约四分之一 TTO 2024 血糖有效值远少于全样本
“三套权重可以互换” 每步权重对应各自人群,混用会失真 研究页 Weighting 段落与 DDI 有效值
“缺失值都是空单元格” 大量使用 77/777/888/999 哨兵码 TTO b5 最大值 777、m4a 最大值 888
“变量标签写了单位就可以照着用” 标签存在 mg/dl 与 mg/d 混写 TLS 2023 b5 标签
“GHO 的危险因素指标就是 STEPS 汇总” 多来自 NCD-RisC 池化建模 GHO 指标页 Method of estimation
“变量名跨轮一致,可以按列名拼接” 主键有 id 与 pid 两种,权重大小写不一 AFG 2018 用 pid,TTO 用 id
“STEPS 可以用来做纵向随访” 重复横断面,每轮抽样不同,非队列 手册 surveillance 章节

FAQ

Q1:NCD Microdata Repository 和 IHSN 目录是什么关系?

前者是 WHO 自建的官方存放点,域名在 extranet.who.int 下。IHSN 与世行微数据图书馆收录了部分 STEPS 的元数据副本,研究编号一致(如 COD_2005_STEPS_v01_M),页面也注明"与其在 WHO 仓库发布的元数据相同,部分字段经过编辑"。因此查元数据两处都行,但取数只能回 WHO。

Q2:为什么有的研究编号带 _M 后缀,有的不带?

WHO 自己的编号通常形如 WLF_2019_STEPS_v01;IHSN/世行体系习惯再加一个 _M 标记元数据记录。两者指向同一轮调查,不要当成两轮。

Q3:注册之后多久能拿到数据?

目录页不公布审批时限,也没有 SLA。这是项目排期时应当前置考虑的风险,建议在计划阶段就把申请与可能的往返沟通时间算进去。具体时限需要向 ncdmonitoring@who.int 询问。

Q4:能不能只申请某一轮的元数据?

不需要申请。DDI/XML 与 JSON 导出对所有轮次开放,可以直接全部下载,作为本地变量目录。

Q5:用 STEPS 做论文,作者名单怎么处理?

按访问条件第 3 条,应向调查协调人提供共同署名的机会。实务上这一步需要在投稿前完成并留痕,而不能等到录用后再补。

Q6:为什么同一指标在不同轮次的有效值差那么多?

通常是子抽样或失访造成。特立尼达 2024 那轮对 Step 3 做了较强的子抽样,生化权重只在四分之一的受访者上有值;阿富汗 2018 那轮几乎全样本完成生化。判断办法是算覆盖率,不要看标题。

Q7:血压三次读数怎么取?

按 WHO 手册惯例,取第二次与第三次读数的均值。若该国只记录了两次,则取两次均值。不要三次全平均,也不要用单次读数。

Q8:能不能把多个国家的文件拼成一个大表?

可以,但工作量主要在变量对齐而非拼接本身。必须先建立"题号到语义"的映射,把主键、权重、单位、哨兵码四类差异收敛掉,再合并。直接按列名 concat 会产生静默错位。

Q9:STEPS 和 STEPS-aligned 有什么区别?

STEPS 指严格采用 WHO Instrument 的调查;STEPS-aligned 指本国调查但按 STEPS 的关键指标定义采集。目录不标注这个区别,只能靠研究页的 Scope Notes 判断实际采集了哪些测量。

Q10:为什么目录里有些国家出现了好几次,年份却很接近?

可能是同一国家的不同地区分别成册(如密克罗尼西亚的 Kosrae、Yap、Pohnpei 三册),也可能是同一轮调查分期发布。看标题里的地名后缀与研究编号的数字部分即可区分。

Q11:没有 Step 3 的轮次还能用吗?

能用,但要限定研究问题。这类轮次仍可回答行为危险因素与体格指标的问题;不能回答糖尿病、血脂异常、盐摄入的问题。

Q12:STEPS 的数据能不能用于商业产品的训练?

访问条件第 4 条明确限非商业、非营利公共卫生用途。商业训练需要事先与 WHO 沟通另行授权,不能默认允许。

术语表

术语 含义
STEPS STEPwise approach to NCD risk factor surveillance,分步法非传染性疾病危险因素监测
Step 1 问卷阶段,采集人口学、烟草、酒精、饮食、体力活动、疾病史
Step 2 体格测量阶段,血压、身高、体重、腰围、臀围、心率
Step 3 生化测量阶段,血糖、血脂、尿钠与尿肌酐
core items 各步的核心题,各国强烈建议纳入
expanded items 各步的扩展题,用于细化某一主题
optional module 主题超出主危险因素范围的可选模块,共 13 个
Instrument 通用问卷本体,2024 年 9 月版提供四语版本
Q-by-Q Question-by-Question Guide,逐题释义指南
show card 展示卡,供受访者对照选项的图示卡
eSTEPS WHO 的电子采集工具,运行于安卓平板
STEPS-aligned 按 STEPS 关键指标定义采集但非严格使用其 Instrument 的调查
PSU 初级抽样单元,多阶段整群抽样的第一层
stratum 抽样层
wstep1 / 2 / 3 分步分析权重,分别对应问卷、体格、生化人群
sentinel code 哨兵码,用 77/88/99 及其三位形式表示"不知道/拒绝/缺失"
DDI Data Documentation Initiative,社会科学数据元数据标准
NCD Microdata Repository WHO 的 NCD 微数据仓库,STEPS 的官方存放点
NCD-RisC NCD Risk Factor Collaboration,危险因素池化建模协作
age-standardization 年龄标化,消除人口年龄结构差异后比较患病率
GPAQ Global Physical Activity Questionnaire,STEPS 体力活动模块的题源
fact sheet 事实表,WHO 提供的单轮结果汇总模板
data book 数据本,WHO 提供的单轮详细表格模板

附录 A:分步法问卷结构

步骤 模块 题号前缀 core 内容 expanded 内容
Step 1 人口学 C 年龄、性别、受教育年数 最高学历、族裔、婚姻、就业、家庭收入
Step 1 烟草 T 目前吸烟、每日吸烟、无烟烟草 戒烟尝试、二手烟暴露、电子烟
Step 1 酒精 A 是否饮酒、近 30 天、单次大量 使用障碍、自酿与走私酒
Step 1 饮食 D 果蔬天数与份数、盐摄入 控盐认知与行为
Step 1 体力活动 P 工作、交通、休闲三域活动 久坐时间
Step 1 疾病史 H 血压血糖血脂史、心血管事件、生活方式建议 传统医者、用药细节、筛查
Step 2 体格 M 血压三次读数、身高、体重、腰围 臀围、心率
Step 3 生化 B 空腹血糖、总胆固醇、尿钠、尿肌酐 甘油三酯、HDL
可选 模块 MH/S/CX 等 一国的实际纳入情况见研究页 Scope Notes —

附录 B:变量与主键

项 特立尼达和多巴哥 2024 阿富汗 2018 说明
研究编号 TTO_2024_STEPS_v01 AFG_2018_STEPS_v01 国家三码 + 年份 + 版本
样本量 4,052 3,955 DDI caseQnty
变量数 207 180 DDI varQnty
主键 id pid 文件内唯一,跨轮无键
分层 stratum 1–15 stratum 取值范围因国而异
PSU psu 1–114 psu 同上
权重 wstep1/2/3 wstep1/2/3 三步分设
地理 仅城乡类字段 province/district/village 粒度差异显著
年龄范围 18–69 见研究页 Universe 有 25–64 的旧口径
生化单位 标签 mg/dl 标签 mg/dl 需按分布复核

附录 C:与 GHO 的分工速查

问题 去 GHO 去 STEPS
某国 2019 年年龄标化高血压率 是 否(多数国家无对应轮次)
某国某轮受访者的实际血压分布 否 是
吸烟与血糖在个体层面的关联 否 是
200 国的 30 年趋势 是 否
某省的城市农村差异 视指标而定 视该轮是否含地理变量
复现某论文的全国患病率 先查此 后查此(注意口径)

附录 D:数据可获取程度核对表

本表回答"到底公开到什么程度",是这一条最需要说清的部分。

内容 公开程度 证据
目录列表与分册数 完全公开 集合页无需登录,显示 152 条
研究描述(抽样、应答率、Scope Notes、日期) 完全公开 研究描述页无需登录
变量清单 完全公开 数据字典页无需登录
变量级统计量(有效/无效计数、min/max/mean) 完全公开 DDI 导出无需登录
值标签与取值范围 完全公开 DDI 的 valrng 与 catgry
个体数据文件 须注册并逐轮申请 取数页跳转登录;徽标为 Licensed
数据再分发 受限于访问条件第 4 条 非商业、非营利公共卫生用途
批量化 API 不提供 无 API 端点,仅逐轮导出

一句话结论:元数据层完全开放,记录层管制开放。 判断这件事能不能成稿的前提(有没有数据、结构是否一致、边界在哪),全部可以在门外验证;真正需要申请的是最后一跳。

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

事项 要求 常见错误
引用格式 国家 + 年份 + 实施机构 + WHO 支持 只引"WHO STEPS"而不写国家与年份
发表前沟通 告知 WHO 计划中的出版物 录用后才联系
共署名 向协调人提供共同署名机会 忽略,或口头提及未留痕
用途限定 非商业、非营利公共卫生 用于商业模型训练
原始文件再分发 需单独判断,稳妥做法是不分发 直接放进公开仓库
结果发布 小样本亚组做抑制 发布个位数样本的亚组患病率
衍生开放数据 只发聚合结果与脚本 发清洗后的个体级衍生表
品牌使用 不得暗示 WHO 认可结论 在论文标题中使用 WHO 名义

编辑说明

核 验时间 2026-10-29。核验方式:直接抓取 NCD Microdata Repository 的 STEPS 集合全部分页(11 页,150 条卡片),解析研究编号、国家代号、年份与访问徽标;下载 4 份 DDI 导出(catalog 979、998、782、91)解析变量级统计量;抓取 WHO 的 STEPS 主页、Instrument 页、Manual 页与 Data 页;核对 GHO 指标页的方法学说明与 AJPH 2016 综述。

未覆盖的内容:没有申请任何一轮的个体数据,因此个体层面的分布、变量间相关、真实缺失形态均未核对;没有逐条核验 152 条记录的 Scope Notes,Step 3 覆盖率只有 4 个样本;没有核对各国伦理审批的存档情况;2026 年的新增轮次可能在本稿之后继续上线,以集合页当日计数为准。


相关数据集导航

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

  • mics — 共享标签:公共卫生与流行病学 / 调查数据 / 疾病监测
  • hydrolakes — 共享标签:公共卫生与流行病学 / 调查数据 / 全球健康
  • hydrobasins — 共享标签:公共卫生与流行病学 / 调查数据 / 全球健康
  • wuenic-immunization — 共享标签:公共卫生与流行病学 / 调查数据 / 疾病监测 / 全球健康
  • dhs-program — 共享标签:公共卫生与流行病学 / 调查数据 / 全球健康
  • amrnet — 共享标签:公共卫生与流行病学 / 疾病监测 / 全球健康
  • gbd-results — 共享标签:公共卫生与流行病学 / 疾病监测 / 全球健康
  • era5-single-levels — 共享标签:公共卫生与流行病学 / 疾病监测 / 全球健康
  • oisst-v2-1 — 共享标签:公共卫生与流行病学 / 疾病监测 / 全球健康
  • ibtracs — 共享标签:公共卫生与流行病学 / 疾病监测 / 全球健康

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

返回 AI-Ready 数据集