我想翻译以下代码片段,以便在Proc SQL for SAS中使用:
Nearby.Messages
.publish(googleApiClient, mPubMessage, options)
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
}
});
然而,PROC SQL无法识别IIF()。我可以实现if / else或某种CASE语句吗?这似乎都不适合我。
答案 0 :(得分:7)
使用case
:
UPDATE loan_tape
SET apples = (CASE WHEN apples <> 0.0 THEN apples ELSE 20.0 END)
实际上,请使用WHERE
:
UPDATE loan_tape
SET apples = 20.0
WHERE apples = 0.0 OR apples IS NULL;
这是在任何数据库中执行此操作的最佳方法,因为它限制了更新的行数(某些数据库仅在值更改时执行更新,但最好将此逻辑表示为过滤器)。
我还应该注意,在SQL(或任何语言)中与浮点数字进行相等比较是危险的。 SQL具有固定的点值(decimal
/ numeric
)。问题是非常非常非常接近于零的值倾向于&#34;外观&#34;像0 - 像0.000000000097。
答案 1 :(得分:2)
您还可以使用SAS IFN()
功能,该功能完全符合IIF()
在您的示例中所做的操作,从您的起点开始进行最小的更改。正如戈登所说,使用WHERE
子句可能更适合这项任务。
IFN
的文档页面:
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002604573.htm
答案 2 :(得分:-1)
使用case
UPDATE loan_tape
SET apples = case when apples <> 0.0 then apples else 20.0 end