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

SAS Proc SQL中含未知日标识的日期与固定日期的比较方法咨询

现有代码的问题

  • 语法错误:Scan(Date_A,2,'-',best10.)存在参数嵌套错误,best10.是input()的入参,不应放在scan()的参数列表中,同时整段where条件的括号未闭合。
  • 逻辑疏漏:仅比较月份未校验年份,会出现2019-12这类更早年份的Date_B被误判为大于2020-11的Date_A的问题。
  • 类型不兼容:Date_B为带UN的字符串类型,直接和日期类型的Date_A比较会触发隐式类型转换报错。

可行实现方案

核心逻辑是先通过scan(Date_B,3,'-')判断日部分是否为UN,分分支处理比较规则,代码示例如下:

proc sql;
select A.DATE format=yymmdd10. as Date_A, 
       B.DATE as Date_B
from A.TABLE, B.TABLE
where 
    /* Date_B日为UN时,仅比较年月 */
    (scan(B.DATE,3,'-') = 'UN' 
     and input(cats(scan(B.DATE,1,'-'),scan(B.DATE,2,'-')),best8.) < input(cats(scan(A.DATE,1,'-'),scan(A.DATE,2,'-')),best8.))
    /* Date_B为完整日期时,转成SAS日期后直接比较 */
    or (scan(B.DATE,3,'-') ne 'UN' 
        and input(B.DATE,yymmdd10.) < A.DATE);
quit;

优化提示

如果A.DATE已经是SAS原生日期类型,可以把年月比较逻辑替换为input(put(A.DATE,yymmn6.),best6.),不需要再做字符串切割,运行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:03