我有一个玩具数据集:
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
答案 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;