For the majority of data management I do in SPSS, the brunt of the work is likely done in under 10 different commands. DO REPEAT is one of those commands, and I figured I would show some examples of its use.
In its simplest form,
DO REPEAT simply iterates over a list of variables and can apply computations to those variables. So say in a survey you had a skip pattern, and the variables A, B, C should not be answered if someone has a value of 1 for Skip, but your current dataset just has missing data as system missing. We can use
DO REPEAT to iterate over the variables and assign the missing value code.
DO REPEAT v = A B C. IF Skip = 1 v = 9. END REPEAT.
Note this is not a great example, as you could simply use a
DO IF Skip = 1. and nest a
RECODE in that do if, but hopefully that is a clear example to start. One of the other tricks to
DO REPEAT is that you can specify a counter variable to iterate over at the same time. So say you had a variable X that took integer values of 1 to 4. If you want to make dummy codes for say a regression equation, using such a counter makes short work of the process. (The
VECTOR command creates the 4 original dummy variables.)
VECTOR X(4,F1.0). DO REPEAT Xn = X1 TO X4 /#i = 1 TO 4. COMPUTE Xn = (X = #i). END REPEAT.
A final trick I often find use for is to make a list of strings instead of a list of variables. For instance, say I had a list of addresses and I wanted to specifically pull out people on Main, 1st, or Central. You could do:
COMPUTE Flag = 0. IF CHAR.INDEX(Street,"Main") > 0 Flag = 1. IF CHAR.INDEX(Street,"1st") > 0 Flag = 2. IF CHAR.INDEX(Street,"Central") > 0 Flag = 3.
But it is much easier to just submit your own list of strings to
COMPUTE Flag = 0. DO REPEAT str = "Main" "1st" "Central" /#i = 1 TO 3. IF CHAR.INDEX(Street,str) > 0 Flag = #i. END REPEAT.
You can similarly submit arbitrary lists of numeric values as well. With much longer lists you can see how much more expedited this code is. Anytime I find myself writing a series of very similar
IF statements, or chaining many variables together in one statement, I often rewrite the code to use