如何在PROC SQL中实现表内NPV值与对应日期汇率相乘
问题根因
你现有代码的第二个PROC SQL步骤中,关联外币侧(a表)和PLN侧(b表)的条件仅包含ID,没有加入日期匹配逻辑,导致同一个ID下不同日期的记录交叉关联,最终出现单条NPV记录匹配到全表所有日期汇率的异常结果。
修正后代码
/* 第一步按日期+币种匹配汇率逻辑保持不变 */ proc sql; create table tmp_cirs_kurs as select a.*, b.KURS from tmp_cirs a left join kursy b on a.WALUTA=b.WALUTA and a.DATA_DANYCH=b.DATA_DANYCH ; quit; proc sql; create table cirs as select a.DATA_DANYCH, a.DATA_MATURY, a.DATA_START, a.ID, a.INSTRUMENT, a.WALUTA as WALUTA_REC, b.WALUTA as WALUTA_PAY, a.KURS as KURS_REC, b.KURS as KURS_PAY, a.NOMINAL_REC, b.NOMINAL_PAY, a.NPV as NPV_REC, a.NPV*a.KURS as NPV_REC_PLN, b.NPV as NPV_PAY, b.NPV*b.KURS as NPV_PAY_PLN from ( select * from tmp_cirs_kurs where WALUTA ne "PLN") as a left join ( select * from tmp_cirs_kurs where WALUTA eq "PLN") as b /* 新增日期匹配条件,仅关联同一业务日期下的记录 */ on a.ID=b.ID and a.DATA_DANYCH = b.DATA_DANYCH order by a.ID, a.DATA_DANYCH ; quit;
验证说明
- 修正后只会匹配同一ID、同一业务日期下的外币应收和PLN应付记录,不会出现跨日期的交叉关联
- 最终计算得到的PLN计价NPV均为对应业务日期汇率折算的结果,符合需求
内容的提问来源于stack exchange,提问作者user17322178
相关产品推荐
相关产品推荐

