You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS代码中SUM语句内*.、.B/.D/.Q等符号含义咨询

解读SAS代码片段:SUM( (list=.)*. , (list=.B)*. , (list=.D)*. , (list=.Q)*. )

先理清SAS的缺失值规则

SAS里的数值型缺失值分两种:

  • 通用缺失值:用.表示,是最常见的缺失值类型,无特定原因标记
  • 特殊缺失值:用.字母格式(比如.B、.D、.Q),用来区分不同原因的缺失(比如.B可能代表“空白输入”,.D代表“数据丢失”,具体含义由使用者自定义)

拆解代码里的每个部分

  1. 条件判断:list=. / list=.B等
    这是元素级的布尔判断:对list中的每个元素,检查是否等于指定缺失值,符合条件返回1(真),不符合返回0(假)。
    举个例子:如果list = [2, ., .B, 5],那么list=.的结果是[0,1,0,0],list=.B的结果是[0,0,1,0]。

  2. * .的作用
    这是把布尔结果转成特定值的技巧,利用SAS的数值运算规则:

    • 非0数乘缺失值.,结果还是.(比如1 * . = .)
    • 0乘任何数(包括缺失值),结果都是0(比如0 * . = 0)
      所以(list=.)*.的最终结果是:元素为通用缺失值.时输出.,否则输出0;同理(list=.B)*.是元素为.B时输出.,否则输出0。
  3. SUM()函数的最终计算
    SAS的SUM()函数会自动忽略缺失值,只对非缺失的数值求和。对list的每个元素来说:

    • 如果元素不属于这四类缺失值(.、.B、.D、.Q),四个参数都是0,求和结果为0
    • 如果元素属于其中一类缺失值,对应参数是.,其他三个是0,SUM会忽略这个.,最终结果还是0
      这种写法逻辑有点反常,大概率是代码意图出现了偏差——如果是想统计每个元素属于这四类缺失值的数量,正确写法应该去掉*.,直接写SUM( (list=.), (list=.B), (list=.D), (list=.Q) ),这样符合条件的元素会返回1,不符合返回0。

内容的提问来源于stack exchange,提问作者Kagaratsch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:25:32