PROC SQL中CASE WHEN语句编写及结果赋值到Kod列的实现方法
你之前的语法报错是因为SELECT子句中的条件判断缺少CASE关键字,且不能直接在判断逻辑中写a.KOD = 'PLN'这类赋值语句,CASE WHEN仅用于返回对应值,需要配合列别名完成赋值。
方案1:一步生成最终Kod列(无需中间_TEMP列)
用COALESCE函数优先取关联得到的b.Kod,空值场景走自定义规则赋值,完整代码如下:
proc sql; create table COREP_CR as select distinct a.DATA_DANYCH as REPORTING_DATE, a.CRD_CCF, /* 核心补全逻辑:关联值为空时走货币规则赋值 */ coalesce(b.Kod, case when a.TYPE_ASSET = 'Futures' and a.Currency = 'PLN' then 'PL' /* 可在此处新增其他货币对应国家代码的判断分支 */ end ) as Kod, a.EXP_PIERWOTNA as EAD_PRE_CCF, a.ID, a.TYPE_ASSET, a.Currency from corep as a left join _work.country_corep as b on a.Kraj = b.Kraj group by calculated Kod, a.TYPE_ASSET, a.CRD_CCF, ORIGINAL_ASSET_CLASS, FINAL_ASSET_CLASS, PRODUCT_TYPE ; quit;
方案2:基于已有_TEMP列覆盖Kod空值
如果你已经生成了带_TEMP计算列的中间表,直接执行更新语句即可:
proc sql; /* 用_TEMP的值补全Kod的空值 */ update COREP_CR set Kod = _TEMP where Kod is null; /* 不需要保留_TEMP列可执行下面的删除语句 */ alter table COREP_CR drop column _TEMP; quit;
注意事项
- 分组时引用计算生成的列需要加
calculated关键字,否则会识别不到字段 - 如需补充其他货币对应国家代码的规则,直接在
CASE代码块中新增WHEN分支即可
内容的提问来源于stack exchange,提问作者Przemek Dabek
相关产品推荐
相关产品推荐

