如何用SAS Proc SQL为每个客户筛选参考日期后首个到期合同
SAS Proc SQL 批量筛选每个客户的首个到期合同
可以通过**窗口函数ROW_NUMBER()**实现批量分组处理,按客户维度筛选出指定参考日期后首个到期的合同,代码如下:
proc sql; create table first_due_contracts as select Client, Contract, Due_date from ( select Client, Contract, Due_date, /* 按客户分组,对符合条件的到期日升序排序,生成行号 */ row_number() over (partition by Client order by Due_date asc) as rn from contracts /* 筛选到期日晚于参考日期的记录,SAS日期常量格式为DDMMMYYYY'd' */ where Due_date > '19AUG2024'd ) as subquery /* 取每个客户组内的第一条记录(即最早到期的合同) */ where rn = 1; quit;
代码说明
partition by Client:按客户分组,保证每个客户的合同单独计算排序逻辑order by Due_date asc:对每个客户符合条件的到期日从小到大排序,确保首个到期的合同排在首位- 日期条件:如果你的参考日期是字符串格式(如
'2024/08/19'),可以用input('2024/08/19', yymmdd10.)转换为SAS日期类型,替换'19AUG2024'd - 若存在多个合同在同一天到期且均为首个到期的情况,
ROW_NUMBER()会随机保留一条;如需保留所有同天到期的合同,可改用RANK()或DENSE_RANK()函数
内容的提问来源于stack exchange,提问作者Hanne DC
相关产品推荐
相关产品推荐

