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

SAS数据集列数疑问:KEEP与ATTRIB列数不一致该以哪个为准?

SAS KEEP选项与ATTRIB语句的优先级问题

核心结论

以KEEP选项为准,最终生成的work."WC7I7AHE"n数据集只有5个列,就是KEEP列表里指定的"DMMCU"n、"DMITM"n、"DMVEND"n、"IBVEND"n、"IBVEND_1110"n。

原因解释

  • ATTRIB语句的作用是定义变量的属性(比如长度、格式、标签),它只是告诉SAS这些变量的规则,但不会强制把变量保留到输出数据集里。哪怕你用ATTRIB声明了N个变量,只要没在KEEP/RETAIN等保留规则里,最终数据集也不会包含它们。
  • DATA语句后的KEEP选项是SAS数据步里直接控制输出变量的筛选规则,优先级高于ATTRIB的定义。它会严格只保留列表内的变量,所有不在列表里的变量——不管有没有被ATTRIB定义、有没有被赋值——都会被排除在最终数据集之外。

你的代码示例

DATA  work."WC7I7AHE"n
         (keep = "DMMCU"n "DMITM"n "DMVEND"n "IBVEND"n "IBVEND_1110"n )
      ; 
   
   attrib "DMMCU"n length=$12 format=$12. label="Business Unit"
          "DMITM"n length=8 format=8. label="Item Number - Short"
          "DMVEND"n length=8 format=8. label="Supplier Number"
          "IBVEND"n length=8 format=8. label="Supplier Number"
          "IBVEND_1110"n length=8 format=8. label="Supplier Number"
          "IBITM"n length= 8
          "IBMCU"n length= $12
          ETLS_W2NX3KTY4 length= 8
          ; 

比如你代码里的"IBITM"n、"IBMCU"n、ETLS_W2NX3KTY4这三个变量,虽然被ATTRIB定义了属性,但因为不在KEEP列表里,最终数据集里不会出现它们。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:35:26