1. 项目概述为什么SDTMIG是临床数据标准化的基石如果你在临床数据管理、统计编程或者临床运营的圈子里待过一阵子肯定对CDISC临床数据交换标准协会这个名字不陌生。它就像这个行业里的“世界语”让不同国家、不同申办方、不同CRO合同研究组织之间的数据能够互相理解顺畅交流。而在CDISC这套庞大的标准体系中SDTM研究数据制表模型无疑是其核心骨架它定义了临床试验数据最终提交给监管机构比如FDA、NMPA时的标准结构和格式。我们今天要深入学习的SDTMIG全称是“SDTM实施指南”你可以把它理解为SDTM这个“宪法”的“实施细则”。特别是3.2版本它不仅是当前许多项目正在使用的版本更是理解SDTM框架从基础到进阶的关键一环。为什么说学习SDTMIG 3.2至关重要因为在实际工作中你很少会直接去“创造”一个SDTM数据集你的工作起点往往是五花八门、结构各异的原始数据比如来自EDC系统的病例报告表数据、实验室的检测结果、中心化读片的评估记录等等。SDTMIG就是那张精确的“施工图纸”它告诉你如何把这些原材料原始数据加工、转换、组装成符合SDTM标准的成品数据集。它规定了每个领域如人口学DM、不良事件AE、实验室检查LB应该包含哪些变量、这些变量叫什么名字标准的8字符短名、它们的类型和长度、以及数据应该以什么样的结构来呈现。掌握它意味着你拿到了把杂乱数据变得规整、可被全球监管机构审阅的“钥匙”。无论你是负责建库的数据管理员、进行数据转换的统计程序员还是需要审阅数据质量的临床研究员深入理解SDTMIG 3.2都是提升专业能力、确保项目合规性的必经之路。2. SDTMIG 3.2核心框架与设计哲学拆解2.1 三层模型结构从理论到实践的桥梁CDISC标准体系是一个层次分明的结构理解这一点能让你看清SDTMIG所处的位置。最顶层是理论基础Theoretical Foundation它定义了最核心的概念模型比如“观察”是什么它包含哪些基本属性谁、什么、何时、何地等。这一层比较抽象但它是所有标准的基石。中间层就是SDTM模型本身。它基于理论基础定义了一套用于描述临床试验数据的通用框架和规则。比如它规定了数据应该以“主题-观察”的形式组织每个观察都有一系列标准变量来描述它像--TESTCD, --TEST, --ORRES等。SDTM模型是稳定的不针对特定研究类型。最底层也是我们直接打交道的就是SDTMIG。它把SDTM这个通用框架具体化到不同的研究类型和数据类型上。SDTMIG 3.2主要针对一般人类临床试验。它做了几件关键事第一它定义了一系列标准领域如DM人口学、AE不良事件、VS生命体征等每个领域对应一类特定的数据。第二它为每个领域制定了详细的变量清单明确哪些是必须的Req、哪些是条件必需的Exp、哪些是可选的Perm。第三它提供了大量的示例展示真实数据如何映射到标准变量上。所以简单说SDTM是“道”SDTMIG是“术”我们通过学习“术”来领悟和践行“道”。2.2 通用观察类与特定领域类数据组织的两种逻辑这是SDTMIG中非常精妙的设计直接影响你如何构建数据集。SDTM将所有的数据归类为不同的“观察类”而观察类又分为两大类通用观察类这类数据集的结构是高度一致的因为它们遵循同一个模板。核心包括事件类Events记录在时间点上发生的事如不良事件AE、医疗史MH。干预类Interventions记录在时间点上给予受试者的治疗或处理如合并用药CM、暴露EX。发现类Findings通常是通过测量或评估得到的结果可以发生在多个时间点如生命体征VS、实验室检查LB、心电图EG。它们的共同特点是拥有一套相同的通用变量比如--TESTCD测试代码、--TEST测试名称、--ORRES原始结果、--STRESC标准化结果等。这使得程序处理这类数据集时可以使用通用逻辑。特定领域类这类数据集的结构是为特定目的量身定制的不严格遵循上述类的模板。最典型的就是特殊目的类如人口学DM它描述的是受试者的基本特征每个受试者一条记录变量是固定的如年龄、性别、种族。试验设计类如试验元素TE、试验入选TI、试验访视TV等它们描述的是试验方案本身的结构而不是收集的受试者数据。关系类RELREC用于描述不同数据集之间记录的关联关系这是一个非常实用且重要的类。理解这种分类能帮助你在看到一堆原始数据时快速判断它应该被归入哪个领域以及这个领域大致应该长什么样。2.3 变量角色与命名规则解码8字符短名的秘密SDTMIG中的所有变量都有一个严格的8字符短名。这个命名规则背后是清晰的逻辑两个字母的领域前缀如DM中的变量都以DM开头AE中的变量都以AE开头。两个字母的变量角色后缀这是关键它定义了变量的用途。--SEQ序列号唯一标识数据集内的一条记录。--GRPID组ID标识属于同一逻辑组的多条记录如一组生命体征测量。--SPID赞助方定义的标识符。--TESTCD测试代码简短的、机器可读的测试名称如“SYSBP”代表收缩压。--TEST测试名称人类可读的测试全称如“Systolic Blood Pressure”。--ORRES原始结果收集到的原始数据值。--STRESC/--STRESN标准化结果字符型/数值型将ORRES标准化后的值用于分析和报告。--STAT未执行/缺失记录的状态。--REASND未执行/缺失的原因。--LOC测量位置。--DTC日期/时间ISO 8601格式。--DY研究日相对于参考点如首次给药的天数。注意--代表两个字母的领域前缀。当你看到--TESTCD时在实际数据集中它会变成AETESTCD在AE域或LBTESTCD在LB域。理解这个通配符表示法是阅读SDTMIG文档的基本功。3. 核心领域深度解析与实操映射要点3.1 基石领域DM人口学与CO评论DM域是每个受试者的“身份证”它是所有其他数据的锚点。关键变量包括USUBJID唯一受试者标识符这是整个数据库中最关键的变量是链接所有领域数据的钥匙。通常由研究编号、中心编号和受试者编号组合而成。BRTHDTC出生日期用于计算年龄。AGE、AGEU年龄及单位通常从BRTHDTC和知情同意日期或筛选日期计算得出。SEX性别、RACE种族、ARMCD/ARM治疗组代码/名称等。实操心得USUBJID的生成规则必须在项目启动时就明确并严格执行任何不一致都会导致数据无法链接。AGE的计算逻辑使用哪个参考日期也需在数据管理计划中预先定义。CO域是一个灵活的“备注栏”用于存放那些无法归入其他标准领域的、重要的文本型评论或说明。例如受试者脱落的原因详情、方案偏离的具体描述等。它的结构简单主要包含COSPID赞助方标识、CAT类别、SCAT子类别和COVAL评论内容。3.2 安全性与耐受性核心AE不良事件与CM合并用药AE域是安全性评价的核心其映射的准确性直接关系到监管审阅。关键点在于AETERM报告术语与AEDECOD字典衍生术语AETERM是研究者报告的原话而AEDECOD是使用MedDRA等医学术语词典编码后的标准术语。这是质量控制的重中之重。时间变量AESTDTC开始日期、AEENDTC结束日期的收集和推导。对于仍在进行的事件AEENDTC可以为空。严重性AESEV、与试验药物的关系AEREL、导致脱落/死亡等标志AEOUT。CM域记录受试者在试验期间服用的所有非试验用药品。需要特别注意CMTRT药品名称的标准化同样重要常使用WHO-DD等词典编码得到CMDECOD。CMINDC适应症是理解为何用药的关键。时间变量CMSTDTC,CMENDTC对于分析药物相互作用至关重要。注意事项AE和CM的时间记录经常不完整如只记了月份。SDTM要求尽可能精确不精确的部分可以缺失但已记录的部分必须符合ISO 8601格式如“2023-04”表示2023年4月。编程时需要大量的日期处理和数据清洗逻辑。3.3 疗效与评估关键VS生命体征、LB实验室检查与EG心电图这些都属于“发现类”领域结构高度相似是学习通用观察类的绝佳样板。LB域实验室检查映射详解识别测试原始数据中每一个实验室检测项目如“白细胞计数”、“丙氨酸氨基转移酶”都需要映射到LBTESTCD和LBTEST。SDTMIG附录中提供了常见的标准测试列表但很多项目需要自定义。结果处理LBORRES存放原始结果如“1000”或“阳性”。LBSTRESC和LBSTRESN是标准化后的结果用于统计。“1000”可能需要处理为“1000”并在LBSTRESC中标记“”而LBSTRESN可能设为1000或一个用于排序的衍生值如1000.1。“阳性/阴性”通常标准化为“POSITIVE/NEGATIVE”和1/0。单位标准化LBORRESU是原始单位LBSTRESU是标准单位。所有结果必须转换到标准单位才能比较和分析如将mg/dL统一为mmol/L。正常值范围LBNRIND正常范围指示符是关键变量通过比较LBSTRESN与LBSTNRLO正常值低限和LBSTNRHI正常值高限得出值为“LOW”, “NORMAL”, “HIGH”。这些正常值范围通常来自中心实验室提供的参考值。VS域和EG域逻辑类似但有其特点。VS域中血压分为收缩压SYSBP和舒张压DIABP两条记录。EG域中一份心电图会产生多个测量参数如心率、PR间期、QTc间期这些参数通常作为多条记录存放在同一个EGSEQ下并通过EGTESTCD区分。4. 高级主题与复杂场景实现方案4.1 试验设计模型Trial Design Model的构建试验设计模型是一组描述试验方案本身而非受试者数据的特殊领域。对于简单的平行组试验可能不需要创建所有设计域但对于复杂的交叉设计、滴定设计或适应性设计它们就至关重要。TA试验方案定义试验的整体信息。TE试验元素定义试验中的基本处理单元如“安慰剂口服给药4周”、“试验药物10mg口服给药4周”。TV试验访视定义方案中计划的所有访视及其顺序。TI试验入选定义试验的入选期。TS试验总结存放试验的各类总结信息如方案标题、入选标准等文本。实操过程通常统计程序员会根据方案文档手动或通过工具创建这些数据集。例如构建TE域时需要将每个唯一的“治疗剂量途径持续时间”组合定义为一个ETCD元素代码。这些设计域一旦建立就可以通过TM试验组别和SV受试者访视等域将受试者的实际数据如EX CM与方案设计关联起来从而准确计算暴露剂量、判断方案偏离等。4.2 补充限定符与值级元数据这是SDTM中用于处理复杂数据关系的强大机制。补充限定符SUPPQUAL数据集当一个领域需要添加非标准的、特定于某个变量的额外信息时就使用SUPP域。例如在AE域中每个严重不良事件都需要记录详细的“叙述”这个长篇文本不适合放在主AE域里因为主域是行结构每行一个AE。这时就可以创建一个SUPPAE数据集它包含USUBJID,IDVAR关联变量名如“AESEQ”,IDVARVAL关联变量值即具体的AESEQ序号,QNAM限定符名称如“AENARR”,QLABEL限定符标签,QVAL限定符值即叙述文本。关系RELREC数据集用于明确记录两个数据集之间多条记录的关联关系。例如一个严重不良事件AE中的一条记录可能同时导致了住院MH中的一条记录和使用急救药物CM中的一条记录。RELREC数据集就可以用USUBJID,RELID关系标识,RDOMAIN相关域,IDVAR,IDVARVAL等变量清晰地描述这种“一对多”或“多对多”的复杂关系。核心环节实现生成SUPP数据集和RELREC数据集通常是数据转换程序的最后步骤之一。它要求编程人员能清晰识别出哪些信息是“附加的”、哪些记录间存在“交叉引用”的逻辑关系。这部分工作非常考验对数据本身和试验方案的理解深度。4.3 自定义非标准域的使用原则尽管SDTMIG定义了大量标准域但总有一些数据无法完美匹配。这时可以创建自定义域通常以X、Y、Z开头如QP代表生活质量问卷。创建自定义域必须遵循的原则优先使用标准域首先检查所有标准域和SUPPQUAL确实无法容纳再考虑自定义。遵循SDTM模型自定义域也必须基于“主题-观察”模型使用标准的变量角色如--TESTCD, --ORRES。完整定义元数据在Define-XML文件中必须对这个自定义域及其每一个变量进行详细的定义和说明让审阅者能够理解。保持一致性如果多个研究有同类数据自定义域的结构应保持一致。5. 从原始数据到SDTM实战映射流程与常见陷阱5.1 数据映射规范CRT-DDS的编写在实际项目编程前必须有一份详细的《数据映射规范》。这份文档是数据管理员、统计程序员和临床医生共同协作的蓝图。它通常以表格形式呈现至少包含以下列原始数据集/变量来源数据的名称和变量名。原始变量描述/值来源数据的含义或取值。目标SDTM域映射到的SDTM域名称。目标SDTM变量映射到的SDTM标准变量短名。映射与转换规则这是核心需要详细描述如何转换。例如“将出生日期BRTHDAT与筛选日期VISDAT相减计算整数年龄存入AGE。单位AGEU统一为‘YEARS’。” 或者“将实验室结果标记‘’的在LBSTRESC中保留‘’在LBSTRESN中取检测限值。”备注/问题记录映射中的不确定之处或需要澄清的问题。编写一份清晰、无歧义的映射规范能节省大量后期编程和调试时间也是保证数据质量的第一道关口。5.2 典型数据转换的编程实现要点以创建一个LB域为例编程逻辑以SAS为例通常包含以下步骤/* 1. 读取原始实验室数据 */ data raw_lab; set raw.laboratory; /* 可能涉及多个原始数据集需要合并 */ run; /* 2. 生成USUBJID (假设规则为 STUDYID || ‘-’ || SITEID || ‘-’ || SUBJID) */ data lab1; set raw_lab; length USUBJID $40; USUBJID catx(-, studyid, siteid, subjid); run; /* 3. 映射测试项目生成LBTESTCD和LBTEST */ proc format; value $testmap WBC WBC ALT ALT /* ... 其他映射 */ ; value $testnamemap WBC White Blood Cell Count ALT Alanine Aminotransferase /* ... 其他映射 */ ; run; data lab2; set lab1; LBTESTCD put(lab_test_code, $testmap.); LBTEST put(lab_test_code, $testnamemap.); /* 处理原始结果 */ LBORRES strip(lab_result); LBORRESU strip(lab_unit); run; /* 4. 结果标准化清洗、转换单位、计算标准结果和标志 */ data lab3; set lab2; length LBSTRESC $20; LBSTRESN .; /* 示例处理数值型结果 */ if not missing(LBORRES) and notanyalpha(compress(LBORRES, )) then do; /* 提取数字部分 */ num_result input(compress(LBORRES, ), best.); /* 单位转换例如从 mg/dL 到 mmol/L (以血糖为例系数0.0555) */ if upcase(LBORRESU) MG/DL and LBTESTCDGLUC then do; LBSTRESN num_result * 0.0555; LBSTRESC put(LBSTRESN, best8.); LBSTRESU mmol/L; end; else do; /* 无需转换 */ LBSTRESN num_result; LBSTRESC LBORRES; LBSTRESU LBORRESU; end; /* 判断正常范围 */ if not missing(LBSTRESN) then do; if LBSTRESN LBSTNRLO then LBNRIND LOW; else if LBSTRESN LBSTNRHI then LBNRIND HIGH; else LBNRIND NORMAL; end; end; /* 处理字符型结果如阳性、阴性 */ else if upcase(LBORRES) in (POSITIVE, POS) then do; LBSTRESC POSITIVE; LBSTRESN 1; LBNRIND HIGH; /* 假设阳性为异常 */ end; else if upcase(LBORRES) in (NEGATIVE, NEG) then do; LBSTRESC NEGATIVE; LBSTRESN 0; LBNRIND NORMAL; end; run; /* 5. 添加其他必需变量DOMAIN, --SEQ等 */ proc sort datalab3; by USUBJID LBDTC LBTESTCD; run; data final_lb; set lab3; by USUBJID; retain LBSEQ; if first.USUBJID then LBSEQ 0; LBSEQ 1; DOMAIN LB; LBCAT CHEMISTRY; /* 根据测试类型分类 */ /* 添加VISITNUM, VISIT, LBDTC等时间变量... */ run;5.3 质量检查与验证清单生成SDTM数据集后必须进行严格的质量检查。以下是一份核心的检查清单检查类别具体检查点方法与目的结构合规性数据集名称、变量名、标签、类型、长度是否符合SDTMIG。使用开源工具如Pinnacle 21 Community Validator或商业软件进行机器验证核对Define-XML。数据完整性关键标识变量USUBJID, --SEQ是否唯一、非空。编程检查重复键值和缺失值。USUBJID必须能关联所有领域。值域一致性分类变量如SEX, RACE, AEREL的值是否在控制术语Controlled Terminology范围内。比对NCI Thesaurus发布的CDISC CT文件。逻辑一致性跨域逻辑关系是否正确。如AE的严重程度AESEV与导致住院MH或死亡DS的记录是否关联。编写交叉检查程序。例如检查所有AEOUTFATAL的AE在DS域中是否有对应的DSTERMDEATH且DSDECODDEATH的记录并且通过RELREC或时间逻辑关联。时间线合理性各领域内及跨领域的时间变量--DTC逻辑是否合理。如用药开始CMSTDTC不应晚于用药结束CMENDTC不良事件开始AESTDTC不应晚于试验结束日期。进行时间序列的全局检查找出异常日期如未来日期和逻辑矛盾。与原始数据一致性SDTM数据是否忠实反映了原始数据无信息丢失或错误转换。针对关键变量和关键受试者进行原始数据与SDTM数据的逐条比对Proc Compare。6. 常见问题、排查技巧与版本过渡指南6.1 典型错误与解决方案实录问题USUBJID不一致导致数据无法合并。现象在合并DM和AE数据时发现大量记录无法匹配。排查检查两个数据集中USUBJID的生成规则是否完全一致。常见错误一个域用了带前导零的中心编号另一个域没带或者日期、字符串处理时多了空格。解决在项目初期就固化USUBJID的生成算法并写成一个标准的宏或函数在所有数据转换程序中调用确保源头一致。问题实验室异常标志LBNRIND计算错误。现象统计学家报告异常值比例与临床审查感觉不符。排查首先检查LBSTRESN用于比较的数值是否正确特别是对于含有“”、“”标志的结果其LBSTRESN是否被赋予了合理的数值用于排序和比较。其次检查LBSTNRLO和LBSTNRHI正常值范围是否正确导入是否区分了性别、年龄组。解决建立详细的LBSTRESN衍生规则文档。与数据管理团队确认正常值范围来源的准确性。编程时加入逻辑检查如if LBSTRESN . then LBNRIND ;。问题SUPPQUAL数据集结构错误。现象验证软件报错提示SUPP数据集变量缺失或IDVARVAL类型不匹配。排查检查SUPP数据集的必需变量RDOMAIN,IDVAR,IDVARVAL,QNAM,QLABEL,QVAL是否齐全。确保IDVARVAL的值与其指向的主数据集变量如AESEQ的类型字符/数值一致。QVAL的长度是否足够容纳文本。解决使用SDTMIG中附录的SUPP数据集模板作为编程起点。仔细核对IDVAR指定的变量在主数据集中确实存在且名称完全一致。6.2 SDTMIG 3.2 与 3.3/3.4 的主要差异点虽然3.2版本仍被广泛使用但了解其与后续版本的差异有助于应对不同项目要求。新领域引入3.3版本引入了**FA发现评估**域用于系统评估类数据如肿瘤影像学评估RECIST这比之前用自定义域或SUPPQUAL处理要规范得多。变量变更一些变量的属性如长度、标签或控制术语有更新。例如DS疾病事件域中关于死亡原因的变量表述更加精细。指导原则细化后续版本对时间变量的处理、缺失数据的表示、自定义域的创建等提供了更详细的指导和示例。Define-XML版本SDTMIG 3.2通常对应Define-XML 1.0而新版本对应Define-XML 2.0后者元数据描述能力更强。过渡建议对于新项目建议直接从最新的稳定版本如SDTMIG 3.4开始。如果维护一个3.2版本的老项目重点是保持内部一致性除非有明确的升级需求。在阅读指南时务必确认你手头文档的版本号因为细节差异可能导致实施上的不同。6.3 工具链与学习资源推荐验证工具Pinnacle 21 Community免费版是入门和日常检查的必备工具它能快速识别出大部分合规性问题。企业级项目可能会使用Pinnacle 21 Enterprise或其它专业验证软件。编程环境SAS是行业传统主流但R如admiral包、Python如cdisc库等开源工具链也在快速发展。核心文档CDISC官网发布的SDTM Implementation Guide 3.2PDF是根本。SDTM Model文档帮助理解底层逻辑。Define-XML Specification学习如何描述元数据。CDISC Controlled Terminology定期更新的术语包。学习路径从DM、AE、VS、LB这几个最常用的领域入手亲手完成一次从原始数据到SDTM的映射和编程理解整个过程。然后扩展到CO、SUPPQUAL和试验设计模型。多阅读FDA等监管机构发布的数据标准审阅意见能让你最直接地了解实践中哪些地方容易出错这是提升实战能力的捷径。最后参与实际项目是巩固知识的最佳方式每一个数据问题的排查和解决都会让你对SDTMIG的理解加深一层。