2

I need to create a syntax loop that runs a series of transformation

This is a simplified example of what I need to do

I would like to create five fruit variables

  • apple_variable
  • banana_variable
  • mango_variable
  • papaya_variable
  • orange_variable

in V1

  • apple=1
  • banana=2
  • mango=3
  • papaya=4
  • orange=5

    First loop

    IF (V1={number}) {fruit}_variable = VX.

    IF (V2={number}) {fruit}_variable = VY.

    IF (V3={number}) {fruit}_variable = VZ.

    Run loop for next fruit

So what I would like is the scripte to check if V1, V2 or V3 contains the fruit number. If one of them does (only one can) The new {fruit}_variable should get the value from VX, VY or VZ.

Is this possible? The script need to create over 200 variables so a bit to time consuming to do manually

3 Answers 3

1

The first loop can be put within a DO REPEAT command. Essentially you define your two lists of variables and you can loop over the set of if statements.

DO REPEAT V# = V1 V2 V3
/VA = VX VY VZ.
if V# = 1 apple_variable = VA.
END REPEAT.

Now 1 and apple_variable are hard coded in the example above, but we can roll this up into a simple macro statement to take arbitrary parameters.

DEFINE !fruit (!POSITIONAL = !TOKENS(1)
             /!POSITIONAL = !TOKENS(1)).

DO REPEAT V# = V1 V2 V3
/VA = VX VY VZ.
if V# = !1 !2 = VA.
END REPEAT.

!ENDDEFINE.

!fruit 1 apple_variable.

Now this will still be a bit tedious for over 200 variables, but should greatly simplify the task. After I get this far I typically just do text editing to my list to call the macro 200 times, which in this instance all that it would take is inserting !fruit before the number and the resulting variable name. This works well especially if the list is static.

Other approaches using the in-built SPSS facilities (mainly looping within the defined MACRO) IMO tend to be ugly, can greatly complicate the code and frequently not worth the time (although certainly doable). Although that is somewhat mitigated if you are willing to accept a solution utilizing python commands.

Sign up to request clarification or add additional context in comments.

Comments

1

DO REPEAT is a good solution here, but I'm wondering what the ultimate goal is. This smells like a problem that might be solved by using the multiple response facilities in Statistics without the need to go through these transformations. Multiple response functionality is available in the old MULTIPLE RESPONSE procedure and in the newer CTABLES and Chart Builder facilities.

HTH, Jon Peck

Comments

0

combination of loop statements: for,while, do while with nested if..else and switch case will do the trick. just make sure you have your initial value and final value for the loop to go

let's say:

for (initial; final; increment)
{
 if (x == value) {
   statements;
}else{
  ...
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.