In SPSS, `IF`

is a conditional `COMPUTE`

command. It calculates a (possibly new) variable but only for those cases that satisfy some condition(s). This tutorial walks you through some typical examples of the `IF`

command.

## Example 1 - Replace Missing Values

With the syntax below we'll first create some test data. Next we'll set the existing variable `score`

to `100`

for all respondents (only one in this case) having a missing value on `score`

. An alternative here is RECODE `score (missing = 100)`

. The effect becomes visible after sorting the cases in a more conventient way.This is because `IF`

is technically a transformation.

## SPSS IF Syntax Example 1

***1. Create test data.**

data list free/gender score.

begin data

0 80 1 85 0 90 1 95 0 '' 1 105 0 110 1 115

end data.

***2. Replace missing value with 100.**

if missing(score) score = 100.

***3. Sort cases.**

sort cases gender.

## Example 2 - Score Groups

Next, we'll create score groups. Respondents scoring under 100 points get a `1`

(‘low score’). The others get a `2`

(‘high score’). We'll demonstrate three ways to do so. The third may seem a little weird. It's explained in Compute A = B = C.

## SPSS IF Syntax Example 2

***1. Create score groups option 1.**

if score lt 100 group_a = 1.

if score ge 100 group_a = 2.

exe.

***2. Create score groups option 2.**

recode score (100 thru hi = 2) (else = 1) into group_b.

exe.

***3. Create score groups option 3.**

compute group_c = (score ge 100) + 1.

exe.

## Example 3 - Gender-Score Groups

Now we'll create score groups for female and male respondents separately. At this point we can't use a simple `RECODE`

anymore. This is because the conditions now involve two variables, `gender`

and `score`

. A simple approach here is using four `IF`

statements. Each holds two conditions (gender and score). A faster but more difficult equivalent here is a single `COMPUTE`

command.

## SPSS IF Syntax Example 3

***1. Gender-score groups option 1.**

if score lt 100 and gender eq 0 group_d = 1.

if score ge 100 and gender eq 0 group_d = 2.

if score lt 100 and gender eq 1 group_d = 3.

if score ge 100 and gender eq 1 group_d = 4.

exe.

***2. Gender-score groups option 2.**

compute group_e = 2 * gender + (score ge 100) + 1.

exe.

## Difference Between IF and DO IF

Very similar to the `IF`

commands we showed is `DO IF-ELSE IF-END IF`

. Apart from the latter usually requiring more syntax, there's an important difference between the two. This occurs when conditions are not mutually exclusive. This means that a single case may satisfy two or more conditions simultaneously. In this case, the following happens

- With
`IF`

the**last condition that holds prevails**. Since`IF`

statements are completely separate commands, later ones simply overwrite the results of previous ones. - With
`DO IF-ELSE IF-END IF`

the**first condition that holds prevails**. The trick is in`ELSE IF`

. The “ELSE” here means “*if the preceding condition(s) don't hold, only then...*”

The final syntax example demonstrates this difference between `IF`

and `DO IF-ELSE IF-END IF`

.

## SPSS IF Syntax Example 4

***1. Three score groups with DO-IF.**

compute group_f = 1.

do if score ge 100.

compute group_f = 3.

else if score ge 90.

compute group_f = 2.

end if.

***2. Sort cases.**

sort cases score.

***3. Equivalent IF statements don't work.**

compute group_g = 1.

if score ge 100 group_g = 3.

if score ge 90 group_g = 2.

exe.

## This tutorial has 34 comments

## By Simmy on April 28th, 2017

It worked - thank you Ruben - really appreciate it!!

Have a lovely weekend :)

## By Ruben Geert van den Berg on April 28th, 2017

Hi Simmy!

Try replacing

IF x=1 COMPUTE TOT = SUM(y) .

with

IF (x=1) TOT = tot + y.

Hope that helps!

## By Simmy on April 27th, 2017

Hi Ruben - thanks for your quick reply. I am not very advanced with SPSS syntax - I tried the below but it doesn't seem to work... can you see where I am going wrong? Thank you!!!

COMPUTE TOT= 0 .

DO REPEAT x = A1 A2 A3 A4 A5 / y = B1 B2 B3 B4 B5 .

IF x=1 COMPUTE TOT = SUM(y) .

END REPEAT PRINT .

EXECUTE .

## By Ruben Geert van den Berg on April 26th, 2017

Hi Simmy!

You could first calculate the sum as 0 for all cases. Then use DO REPEAT: you'll loop over both variable lists in parallel. If Ax = 1, add Bx to the sum.

Does that make any sense?

## By Simmy on April 26th, 2017

Hi Ruben, I was wondering if you can use nested IF functions to calculate a variable? A simplified example would be with the following variables

A1 A2 A3 A4 A5

B1 B2 B3 B4 B5

I want to calculate a sum of B variables but only if the corresponding A value is 1 so for one case A1 and A4 are 1 so I want to add B1 and B4 for another case A2 and A5 are 1 so I want to add B2 and B5 - please let me know if that makes sense and if you think it might be possible- thank you!