FAQ > 金融建模 > 建模问题 > 数组操作

Q:如何计算数组中符合某条件的个数?比如某列的值小于0    

  • A:
    1)可以用select的方式,将符合条件的数据取出来,再用length计算个数。

    //计算'zf'列大于0的天数
      setsysparam(pn_stock(),'SZ000001');
      r:=nday(100,'time',datetostr(sp_time()),'zf',stockzf3(),'ref_zf',ref(stockzf3(),1));
      r1:=select * from r where ['zf']>0 end;
      return length(r1);

    //计算'zf'列和'ref_zf'列同时大于0的天数
      setsysparam(pn_stock(),'SZ000001');
      r:=nday(100,'time',datetostr(sp_time()),'zf',stockzf3(),'ref_zf',ref(stockzf3(),1));
      r1:=select * from r where ['zf']>0 and ['ref_zf']>0 end;
      return length(r1);


    2)可以用countifof来统计,但这个只能统计单条件,例如:

    //分别统计了'zf'列大于0和'ref_zf'列大于0的个数
      setsysparam(pn_stock(),'SZ000001');
      r:=nday(100,'time',datetostr(sp_time()),'zf',stockzf3(),'ref_zf',ref(stockzf3(),1));
      return select countifof(['zf']>0) as '涨幅大于0',
             countifof(['ref_zf']>0) as '前一交易日涨幅大于0'
              from r end;