信息速览
一份血压读数、一次空腹抽血、一张关于一周吃了几次水果的问答表,分散在三张不同的纸上,谁也看不出它们属于同一个人。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 段落都列出了同样的四条承诺:
- 致谢数据来源。
- 在发表前把计划中的出版物告知 WHO。
- 向调查协调人提供共同署名(co-authorship)的机会。
- 仅用于非商业、非营利的公共卫生目的。
这四条里,第 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 检索顺序建议
从一个具体问题出发,建议按下面的顺序找,可以少走弯路。
- 先明确问题是"要估计值"还是"要原始测量"。要估计值直接去 GHO 或 GBD,不必碰 STEPS。
- 若要原始测量,先确认目标国家在 97 个别内。这一查只需看目录列表。
- 再确认目标国家有没有做过需要的步骤。看研究页的 Scope Notes。
- 再确认需要的变量在这轮的有效值够不够。看 DDI 的变量级统计量。
- 以上都通过,再提交申请。
前四步全部不需要登录,通常能在半小时内完成。跳过前四步直接申请,是效率最低的路径。
§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 — 共享标签:公共卫生与流行病学 / 疾病监测 / 全球健康
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

