SAS跨列求和:含缺失值时结果置为缺失的现成函数查询
SAS跨列求和:含缺失值则结果为缺失的便捷实现
SAS没有原生的内置函数能直接实现「仅当所有参与求和的列都无缺失值时返回求和结果,否则返回缺失值」的逻辑,但可以用更紧凑的写法替代你当前的IF-THEN代码:
方法1:用IFN函数简化为一行
IFN函数可在单行内完成条件判断与赋值,逻辑和原代码完全一致:
work = ifn(cmiss(of eTimeOffWork -- eNotAbleToDoJob) = 0, sum(of eTimeOffWork -- eNotAbleToDoJob), .);
先检查指定变量范围内是否无缺失值,满足条件则返回求和结果,否则返回缺失值(.)。
方法2:结合N与DIM函数适配变量范围变化
如果后续可能调整求和的变量范围,用DIM自动获取变量总个数,再通过N函数判断非缺失值数量是否等于总个数:
/* 获取变量范围的总个数 */ n_vars = dim(of eTimeOffWork -- eNotAbleToDoJob); /* 仅当所有变量都非缺失时求和 */ work = ifn(n(of eTimeOffWork -- eNotAbleToDoJob) = n_vars, sum(of eTimeOffWork -- eNotAbleToDoJob), .);
这种写法无需手动修改缺失值判断的阈值,适配性更强。
你的原代码逻辑是完全正确的,上述方法只是将多行分支语句简化为更简洁的单行写法。
内容的提问来源于stack exchange,提问作者jackahall
相关产品推荐
相关产品推荐

