在SAS 9.4中使用多维创建变量

时间:2015-11-10 21:49:10

标签: multidimensional-array sas

我有一个玩具数据集:

 data step1;
     input var1 - var16;
     datalines;
     25000 26000 27000 28000 29000 30000 31000 32000 0.45 0.25 0.35 0.60 0.75 0.29 0.45 0.51
    ;
    run;

我正在尝试创建新变量。一种方法是单独进行,即

var17 = var1 - D*var9;
var18 = var1 - D*var10;
var19 = var2 - D*var11;
..
..

但这是时间密集的,容易出错。我想使用多维数组。我运行了以下代码。

创建新变量的代码是:

 data step2;
 set step1;
 array A{2,2,2} var9-var16;
 array C{2,2,2,4} var17 - var48;
 array B{2,4} var1-var8;

 D = 250;
 do f = 1 to 4;
   do i = 1 to 2;
      do j = 1 to 2;
         do m = 1 to 2;
            C{i,j,m,f} = B{j,f} - D*A{i,j,m};
            output;
         end;
      end;
    end;
 end;
stop;
run;

这次运行的代码但是给了我32行。但我想只在一行中创建新变量。那有什么不对?有没有其他方法可以实现我的目标?我正在使用SAS 9.4

1 个答案:

答案 0 :(得分:0)

根据您当前的问题框架,您需要删除STOP语句和OUTPUT语句。

  

STOP语句使SAS立即停止处理当前DATA步骤,并在当前DATA步骤结束后恢复处理语句。

     data step1;
     input var1 - var16;
     datalines;
     25000 26000 27000 28000 29000 30000 31000 32000 0.45 0.25 0.35 0.60 0.75 0.29 0.45 0.51
    ;
    run;

 data step2;
 set step1;
 array A{2,2,2} var9-var16;
 array C{2,2,2,4} var17 - var48;
 array B{2,4} var1-var8;

 D = 250;
 do f = 1 to 4;
   do i = 1 to 2;
      do j = 1 to 2;
         do m = 1 to 2;
            C{i,j,m,f} = B{j,f} - D*A{i,j,m};
         end;
      end;
    end;
 end;

run;