抑制SAS中缺失值的log10错误

时间:2014-01-16 11:50:18

标签: error-handling sas

我有以下一些代码由某人提供,以确定手机号码是否以7开头:

if int(abs(mobile_telephone1)/10**int(log10(abs(mobile_telephone1)))) ne 7
    then do .....

这很好用,但是如果缺少值,我会收到大量的错误消息,我想知道是否有办法来抑制这个特定语句的错误消息?

2 个答案:

答案 0 :(得分:2)

您无法抑制特定功能(通常)的错误,但您可以在datastep之前禁用它们,然后在

之后重新应用它们
options errors=0 ;
data xyz ;
  /* some code */
run ;
options errors=25 ;

但是为什么不在没有冒任何错误的情况下更简单地做到这一点......

data xyz ;
  tel = 7123455678 ;
  chartel = put(tel,12.) ;
  if chartel =: '7' then istel = 1 ;
run ;

答案 1 :(得分:1)

为了更具体地回答您的问题(尽管Chris的解决方案绝对是可行的方法),您可以使用coalesce函数。

if log10(coalesce(mobile_telephone1,1)) ...

Coalesce返回第一个非缺失值。在这种情况下,当然0也是一个不可接受的结果,所以我使用1,因为它似乎无害。

此外,一个更好的基于数学的解决方案将是

if (mod(mobile_telephone1,1e10) - mod(mobile_telephone1,1e9) = 7e9) ...

不需要使用log10等,只需比较模数。