FAQ > 金融建模 > 建模问题 > 语法相关

Q:NAN的判断与运算逻辑    

  • A:异常数值NAN
    1、Nan是由0/0产生,为异常数值,用户在使用数据参与运算前,一定要过滤掉这种异常数值。
    2、nan的运算逻辑是,任何数包括自己和其判定都为假,这是防止出错数据影响了计算
    3、判定nan正确的方式是使用isnan函数,因为nan<>nan;

    判断一个值是否为NAN只能用函数isNAN(value)
    下面提供NAN判断的几个应用范例:

    范例1:一维数组中判断出值为NAN的位置
    a:=array(1,2,nan,3,nan,9,nil,inf,10);
    return sselect thisrowindex from a where isnan(thisrow) end;
    //返回:
    2
    4

    范例2:一维数组中将值为NAN的替换为0
    a:=array(1,2,nan,3,nan,9,nil,inf,10);
      mfind(a,isnan(mcell),nil,0);
    return a;
    //返回:
    1
    2
    0
    3
    0
    9

    INF
    10

    范例3:二维数组中判断出值为NAN的位置
    a:=array((1,2,nan,3,8),(nan,9,nil,inf,10));
    return mfind(a,isnan(mcell),0);
    //返回:
    02
    10

    范例4:二维数组中将值为NAN的替换为0
    a:=array((1,2,nan,3,8),(nan,9,nil,inf,10));
      mfind(a,isnan(mcell),nil,0);
      return a;
    //返回:
    12038
    09INF10

    范例5:二维数组中将指定列中值为NAN的替换为0
    A:=array(("A":nan,"B":2,"C":'a'),("A":1,"B":nan,"C":nan),("A":1,"B":nan,"C":'c'));
      A[:,"B"]::=isnan(mcell)?0:mcell;//将列名为”B”的列中值为NAN的用0替代
      return A;
    //返回
    ABC
    NAN2a
    10NAN
    10c