并行遍历两个列表

Looping through two lists in parallel

我有以下值

Time  Value
3      0.03

6      0.04

9      0.05

12      0.06

如你所见,它们分别以三步和一步移动。 如果我想为每个人应用以下公式

X=sum(X,2/value)

我该怎么办?

我试过如下:

data want;
array my_array{0-10} $ _temporary_;
X=0;
Do i=1 to 5;
My_array(i)=sum(x,2/value)*i;
X= =sum(x,2/value)*i;
End;
Total=X;
Run;

但是我没有循环遍历值,只是循环遍历时间(我从 1 到 4)。 我想每次应用上面的公式计算 X,以便在上面的 table 中多出一列,然后得到这些值的总和。

在 Kermit 在下面的回答中提供的示例中,预期输出(x 下的值应满足上述公式)如下:

time  value x  sum_x
 3    0.03 200 
 6    0.04 300 
 9    0.05 360 
 12   0.06 400 

如果我没理解错的话,时间会按季度设置,你想得到每次X的总和。下次,考虑在你的问题中给出预期的输出。

data stage1;
    do time=3 to 12 by 3;
        do value = 0.03, 0.04, 0.05, 0.06;
            x=(2/value)*time;
            output;
        end;
    end;
run;

proc sort data=stage1;
    by time value;
run;

data want;
    do _n_=1 by 1 until(last.time);
        set stage1;
        by time;
        sum_x=sum(sum_x, x);
        output;
    end;
run;
time  value x  sum_x
 3    0.03 200  200
 3    0.04 150  350
 3    0.05 120  470
 3    0.06 100  570
 6    0.03 400  400
 6    0.04 300  700
 6    0.05 240  940
 6    0.06 200  1140
 9    0.03 600  600
 9    0.04 450  1050
 9    0.05 360  1410
 9    0.06 300  1710
 12   0.03 800  800
 12   0.04 600  1400
 12   0.05 480  1880
 12   0.06 400  2280

评论后编辑

为什么要使用 do 循环?只需在 table.

中执行 element-wise 乘法
data want;
    set have;
    x=(2/value)*time;
    retain sum_x 0;
    sum_x=sum(sum_x, x);
    output;
run;

您的预期结果似乎与您对公式的解释不符。您可以使用两个数组来配对 TIME 和 VALUE 金额。

data want;
  array t [4] _temporary_ (3 6 9 12);
  array v [4] _temporary_ (0.03 0.04 0.05 0.06);
  do index=1 to dim(t);
    time=t[index];
    value=v[index];
    x=sum(x,2/value)*index;
    output;
  end;
run;

结果

Obs    index    time    value       x

 1       1        3      0.03      66.67
 2       2        6      0.04     233.33
 3       3        9      0.05     820.00
 4       4       12      0.06    3413.33