2016-12-16 104 views
0

我想创建一个标志,显示了一个1,当一个变量match_flg = total_match_flg,否则返回0。CASE WHEN语句没有返回一个错误

当我运行下面的代码

proc sql; 
create table xxxxxxx as 
    select*, 
    CASE 
    when match_flg = total_match_flg then 1 else 0 
    end as keep_flg 
quit; 

它返回所有1,并肯定在数据集中,该语句应该是false并返回一些0

我在做什么错了?

+1

发布一些示例数据。否则,我们真的无法帮助您调试此问题。 – Tom

+0

我忘记了包含“From xxxxxxx;”在“结束为”关键字之后,但是我的代码中含有它 –

+0

通常,在询问sql问题时,包含数据库/表结构非常重要,可以帮助人们确定您做错了什么。我希望这个评论能帮助你找到解决你的问题的方法。 http://stackoverflow.com/help/mcve – 2016-12-16 19:06:07

回答

2

是因为你没有用from语句读取任何数据吗? 我跑了类似的代码(添加了),它运行良好。

编辑:包括我的测试数据;

data test; 
    do i = 1 to 10; 
    match_flag = i; 
    total_match_flag = 10-i; 
    output; 
    end; 

    drop i; 
run; 

proc sql; 
    create table x as 
    select *, 
    case 
    when match_flag = total_match_flag then 1 else 0 
    end as keep_flg 
    from test; 
quit; 

作为旁注,案例可能会笨拙地使用。请查看IFC/IFN功能。 http://www.lexjansen.com/wuss/2012/28.pdf