SAS表标记前30天日期记录的代码问题排查
SAS日期区间标记代码问题修正
错误原因
你写的前序30天标记逻辑存在两处问题:
- 语法错误:判断60天前日期节点时,漏写了
intnx函数,仅保留了函数参数部分("day","&sysdate"d,-60,"same"),SAS无法识别这段表达式,直接导致运行报错。 - 逻辑重叠:两个区间的判断都包含了
intnx("day","&sysdate"d,-30,"same")这个临界日期点,会导致临界日期的记录同时被两个标记变量置为1,不符合区间互斥的要求。
修正后可运行代码
* 最近30天标记:覆盖[基准日-30天, 基准日]范围的记录; if created_date >= intnx("day","&sysdate"d,-30,"same") then Flag_30D = 1; else Flag_30D = 0; * 前序30天标记:覆盖[基准日-60天, 基准日-30天)范围的记录,与近30天区间无重叠; if created_date < intnx("day","&sysdate"d,-30,"same") and created_date >= intnx("day","&sysdate"d,-60,"same") then Flag_P30D = 1; else Flag_P30D = 0;
补充说明
如果业务规则要求临界日期(即刚好距离基准日30天的记录)归属于前序30天区间,只需要把两个判断条件中对应临界值的不等号方向互换即可,保证两个相邻区间无重叠、无断档。
内容的提问来源于stack exchange,提问作者willd9
相关产品推荐
相关产品推荐

