我想翻译以下代码片段,以便在Proc SQL for SAS中使用:
UPDATE loan_tape
SET apples = IIF(apples != 0.0, apples, 20.0)
Run Code Online (Sandbox Code Playgroud)
但是,PROC SQL无法识别IIF().我可以实现if/else或某种CASE语句吗?这似乎都不适合我.
用途case:
UPDATE loan_tape
SET apples = (CASE WHEN apples <> 0.0 THEN apples ELSE 20.0 END)
Run Code Online (Sandbox Code Playgroud)
实际上,使用WHERE:
UPDATE loan_tape
SET apples = 20.0
WHERE apples = 0.0 OR apples IS NULL;
Run Code Online (Sandbox Code Playgroud)
这是在任何数据库中执行此操作的最佳方法,因为它限制了更新的行数(某些数据库仅在值更改时执行更新,但最好将此逻辑表示为过滤器).
我还应该注意,在SQL(或任何语言)中使用浮点数进行相等比较是危险的.SQL具有固定点值(decimal/ numeric).问题是非常非常非常接近零的值倾向于"看起来"像0 - 类似于0.000000000097.