I want to do a looping, where it is tested row by row, if a variable x is 1 or not and if so, a variable y is changed.

My (very simplified) example:

x y y (after looping)

. 10 10

1 10 20

1 10 20

. 10 10

. 10 10

1 10 20

1 10 20

1 10 20

1 10 20

1 10 20

1 10 20

. 10 10

. 10 10

I know, that this can easily be done by a normal if condition, but I want it to be done by a loop, since my real problem can only be solved by a loop.

The problem is that the loops I have created so far, only can loop over locals or globals which work like

local i=1

while i<40{

2. replace y =20

3. local i = `i'+1

4.}

which would just be "repeat the command 40 times".

But what I want to do, is looping by testing a condition row by row, something like: If x[1] is 1, change y[1], if x[2] is 1, change y[2]. Once again, I know this could easily be done by:

replace y = 20 if x =1

But I need it to be done in a loop, something like:

local i=1

while x[`i']==1{

2. replace y=20

3. local i = `i'+1

4.}

The problem here is that Stata does only test only x[1} and does not adds up the `i' in x[`i'] by the third row of the while command.

Also

local i=1

while `i'==1{

2. replace y=20

3. local i = x[_n+1]

4.}

does not work. The `i' does not change like the third command of the while command says, but it stays 1.

Thus, at both while loops, either y is changed for all rows or for none.

I hope, it becomes clear, what I want to know. Basically, I want to loop not over upcounting locals or globals, but over row by row.

Thank you very much for your help!

Sebastian