1. 条件判断函数ifc与ifn的实战应用在ADaM数据集构建过程中条件判断是最基础也最频繁使用的操作之一。SAS提供了两个非常实用的函数来处理这类需求ifc用于字符型变量ifn用于数值型变量。这两个函数看似简单但在实际临床数据分析中能解决80%的条件赋值问题。我经常遇到这样的场景需要根据原始数据中的某个标志变量比如DSYN是来创建新的分类变量比如ENRLFL。用传统if-then语句需要写多行代码而ifc函数一行就能搞定ENRLFL ifc(DSYN是, Y, N); /* 如果DSYN等于是ENRLFL赋值为Y否则为N */数值型场景更常见的是创建分析用的0/1标志变量。比如下面这段处理不良事件数据的代码就用ifn函数将是/否转换为1/2data ae1; set raw.ae(rename(AEDYNAE1 AEDQYNAE2 AESYNAE3)); if AE1^NA! then AE1N ifn(AE1是, 1, 2); if AE2^NA! then AE2N ifn(AE2是, 1, 2); keep USUBJID AE: ; run;这里有个实用技巧先用rename批量修改变量名再用通配符keep保留相关变量代码既简洁又易于维护。特别注意对NA!这类特殊缺失值的处理避免误判。2. 智能取值函数coalesce与coalescec的妙用处理临床数据时经常遇到同一个信息存储在多个变量的情况。比如受试者的种族信息可能在ETHNIC和ETHNICO两个变量中都有记录这时候coalescec函数就是最佳选择ETHNIC coalescec(ETHNICO, ETHNIC); /* 优先取ETHNICO的值如果为空则取ETHNIC的值 */日期类变量的处理更为典型。在项目实践中中止日期可能记录在DSEXDAT而完成日期在DSENDAT。用coalescec配合input函数可以智能选择有效日期EOSDT input(coalescec(DSEXDAT, DSENDAT), yymmdd10.);经验分享coalesce系列函数在处理SDTM到ADaM的转换时特别有用。我建议在以下场景优先考虑使用多个来源的相同信息合并优先使用特定表单的数据处理可能存在的空值或缺失值3. 缺失值处理7种武器全解析缺失值处理是ADaM构建的核心环节之一。SAS提供了一套完整的工具集每个函数都有其特定用途n函数统计数值型非缺失值个数valid_cnt n(age, weight, height);nmiss函数统计数值型缺失值个数missing_cnt nmiss(age, weight);cmiss函数通用缺失值计数器支持字符型total_missing cmiss(sex, age, weight);missing函数判断是否缺失1缺失if missing(randno) then arm 筛选失败;not missing函数判断非缺失1非缺失if not missing(height) then bmi weight/(height/100)**2;call missing批量置空if age13 then call missing(weight, sex);实战建议在计算BMI这类衍生变量时我习惯先用nmiss检查必需变量是否齐全if nmiss(weight, height)0 then BMI round(weight/(height/100)**2, 0.1); else call missing(BMI);4. 字符串处理三剑客kscan、scan与compress字符串处理是ADaM数据集构建中的高频操作这三个函数能解决大部分文本处理需求。kscan函数特别适合处理中文文本比如从50mg试验组中提取剂量信息TRTSEQP kscan(ARM, 2, 组); /* 从ARM变量中以组为分隔符提取第2部分 */scan函数的经典用法是拆解复合信息比如从2023-01-15 14:30中提取时间部分time_part scan(datetime, 2, );compress函数可能是最强大的字符串处理工具特别是它的修饰符系统/* 只保留数字 */ dose_num compress(TRTSEQP, , kd); /* 移除所有非字母字符 */ pure_text compress(text, , a);修饰符组合技巧kd只保留数字ka只保留字母dka保留数字和字母l处理中文时保留汉字5. 高级应用catx与whichc的配合使用在创建复合键或生成特定格式的变量时catx函数表现出色。比如连接日期和时间变量AE01SDTM catx(T, AESTDAT, AESTTIM); /* 用T连接日期和时间自动处理空格 */whichc函数在创建分组变量时特别高效可以替代繁琐的if-then-else链TRT01PN whichc(TRT01P, 50mg安慰剂组, 100mg安慰剂组, 50mg试验组, 100mg试验组);choosec函数则是数值到字符的智能转换器TRTGR1 choosec(TRTGR1N, 50mg交叉组, 100mg交叉组);在实际项目中我经常将这些函数组合使用。比如先用whichc确定位置再用choosec生成对应的描述文本最后用catx拼接其他信息形成完整的分析变量。6. 性能优化与调试技巧经过多个项目的实战检验我总结出几个提升SAS代码效率的关键点compress函数的o修饰符在循环中处理固定模式时能显著提升性能clean_var compress(raw_var, 123, o);避免重复计算对同一个变量的多次操作可以先创建中间变量使用keep/drop优化IO只读取和保留必要的变量日志检查特别关注WARNING信息可能揭示潜在的数据问题分步验证复杂的数据转换建议拆解为多个data步每步验证结果在调试方面我习惯在关键步骤后添加proc print查看中间结果确保每个函数的输出符合预期。对于复杂的字符串操作可以先用小样本测试确认无误后再应用到完整数据集。