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

Q:如何将一个二维数组变成虚拟变量矩阵(哑变量矩阵)    

  • A:以上证50的所属申万一级行业为例,下面枚举两种实现方式,用户根据自己的数据情况选择:
    实现方法一:

      //取数:数据是一个二维数组
       stocks:=getbk('上证50');
       t:= select thisrow as '代码',
            spec(base(10029),thisrow) as '行业'
            from stocks end;
     //转为虚拟变量矩阵
       r:=zeros(t[:,'代码'] union2 array(),t[:,'行业']union2 array());
       for i:=0 to length(t)-1 do
         r[t[i,'代码'],t[i,'行业']]:=1;
       return r;

    数据展示:
    原数据t:

    虚拟变量矩阵:


    实现方法二:

    //取数:数据是一个hash表,即一维数组
      t:=getbk('上证50');
      t0:=nils(t);
      t0::=spec(base(10029),mrow);
      //直接调用get_dummies2生成虚拟变量矩阵
      return get_dummies2(t0);

    原数据t0:

    虚拟变量矩阵: