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 36 comments

## By Ruben Geert van den Berg on April 1st, 2018

Hi Lorena!

What if more than 1 (x1 to x3) is missing? I assume you don't want any sum in this case?

A very simple strategy is simply computing your sum, X. After doing so, throw in an IF command for each condition that sets X to $sysmis if the condition doesn't hold.

Using sum.2 is a nice shorthand for computing the sum only over 2 or more valid values.

The syntax below does just that. Please try it and see if the result is as desired.

Hope that helps!

Ruben

`*Create data example.`

data list free/id.

begin data

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

end data.

set seed 1.

do repeat #vars = x1 to x3.

compute #vars = trunc(rv.uniform(0,3)).

recode #vars(2 = -77).

end repeat.

execute.

missing values x1 to x3 (-77).

*Data are done. Now compute sums over at least 2 valid values.

compute x = sum.2(x1 to x3).

*If at least 1 missing and sum = 0, set to $sysmis.

`if(nvalid(x1 to x3) < 3 and sum(x1 to x3) = 0) x = $sysmis. execute.`