You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:54:02