基于Dealscan数据集按企业计算累计贷款的SAS代码优化问询
针对Dealscan累计贷款计算的SAS代码优化及perm_id使用说明
一、适配多企业场景的代码修改
原代码未按企业维度分组,会将所有企业的贷款金额混算到同一日期下,完全不符合多企业分析需求。需在关联条件、查询字段、分组逻辑中加入企业标识(比如你提到的perm_id),修改后的代码如下:
proc sql; create table loancumulative as select a.perm_id, a.startdate, sum(b.tranche_amount) as cumulative_tranche_amount /* 修改字段名,明确是累计值,避免与原字段混淆 */ from dealscan as a left join dealscan as b on a.perm_id = b.perm_id /* 限定仅关联同一企业的记录 */ and a.startdate >= b.startdate and a.startdate < b.maturity_date /* 这里替换为实际的到期日期字段名,原代码的enddate需确认是否对应maturity date */ group by a.perm_id, a.startdate order by a.perm_id, a.startdate; quit;
关键改动说明:
- 关联条件新增
a.perm_id = b.perm_id:确保仅对同一企业的贷款记录做累计,杜绝跨企业混算; - 查询字段加入
a.perm_id:输出结果可明确区分不同企业的累计数据; - 分组条件新增
a.perm_id:按「企业+日期」维度分组计算,每个企业的每日累计金额独立统计; - 字段名改为
cumulative_tranche_amount:直观体现这是累计值,避免与原始单笔tranche金额混淆。
注意:务必确认数据集里的到期日期字段名(比如是否是
maturity_date而非enddate),字段名不匹配会导致逻辑完全错误。
二、关于使用perm_id作为企业标识的问题
在Dealscan数据体系中,perm_id是Refinitiv分配的永久企业标识,相比companyid更适合作为企业唯一标识,原因如下:
companyid可能因企业更名、重组、数据录入误差等情况,出现多个值对应同一企业的问题;perm_id稳定性极强,同一企业在不同时期、不同业务条目中的perm_id保持一致,能更精准地聚合同一企业的所有贷款记录。
需做的前置检查:
- 确认数据集中
perm_id无大量缺失值,若存在缺失,需结合companyid或其他企业信息补全; - 校验是否存在同一企业对应多个
perm_id的异常,可通过简单代码排查:
proc freq data=dealscan; tables companyid*perm_id / nocol norow; run;
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

