From: =?ISO-8859-1?Q?Daniel_Fern=E1ndez?= on
here my try:

proc sort data=have;
by L I ;
run;
data test;
do until (last.L and last.i);
set have ;
by L I ;
if (first.L and first.I) then b= .;
c= sum( a , b);
output ;
b= sum( a , b);
end;
run;
dm 'vt test';

Daniel Fernandez.
Barcelona.

2009/10/23 Muthia Kachirayan <muthia.kachirayan(a)gmail.com>:
> Kevin,
>
> I do not see why you need B to get C. It happens to be the cumulative values
> of A within I ignoring L. If my observation is correct then this works. I
> am not sure this is what you need.
>
> data test;
> input l i a ;
> cards;
> 1 1 10
> 2 1 20
> 3 1 30
> 1 2 20
> 2 2 30
> 3 2 40
> 1 3 30
> 2 3 40
> 3 3 50
> ;
> run;
>
> data need;
> do until(last.i);
> set test;
> by i;
> c = sum(c, a);
> output;
> end;
> run;
>
> proc print data = need;
> run;
>
>
>
> On Fri, Oct 23, 2009 at 10:51 AM, Kevin <kboswe1(a)lsu.edu> wrote:
>
>> Greetings All,
>>
>> I am dealing with what appeared to be a very simple procedure of
>> adding observations in a previous row; turns out it is beyond my
>> capabilities in SAS.
>> I have tried various attempts with retain statements, lags, ^first.x,
>> etc. I cant seem to get this seemingly simple process.
>>
>> I have a very simle dataset with 3 variables (L, i, and A). L and i
>> have many levels and A is a measured quantity. I am trying to
>> populate two new columns B and C.
>>
>> B is the sum of the previous obs of both A and B. Clearly for the
>> first L within each i there will be no value for B - therfore it is
>> 0. In the second L within each i, B is the sum of A and B from row 1
>> = 10, and so on within each i.
>>
>> C is the sum of A and the previous obs of C. Again, the first L
>> within each i is special, it is simply the value of A. That is in row
>> 1, C=A. In row 2, C (row2) =A (row2) and C (row1), and so on for each
>> L within each i.
>>
>> The table below represents the process of populating B and C in Excel-
>> I am trying to recreate in SAS.
>>
>> L i A B C
>> 1 1 10 - 10
>> 2 1 20 10 30
>> 3 1 30 30 60
>> 1 2 20 - 20
>> 2 2 30 20 50
>> 3 2 40 50 90
>> 1 3 30 - 30
>> 2 3 40 30 70
>> 3 3 50 70 120
>>
>>
>> I am sure there is a very simple procedure of handling this situation
>> and I would appreciate any thoughts.
>>
>> Cheers,
>> Kevin
>>
>