# Clean and Define - Group Operations

A Group operation contains one or many expression groups and each group contains one or many Clean/Define expressions. An expression group can have an optional filter describing which respondents that will be affected by the expressions within the group.

Three types of Clean/Define expressions are possible to define within a group:

- Set expression

Sets new values from an assignment expression (action). - Logical define expression

Fills categorical questions with data created from a logical expression (action). - Arithmetical define expression

Fills quantitative questions with data created from an arithmetical expression (action).

Each of these expressions can have an optional filter (condition) that will restrict the operation to respondents that satisfy the expression.

When combining group filters and expression conditions the following table shows the possible logical combinations.

Group filter | Expression condition | Result |

True | True | True |

True | False | False |

False | True | False |

False | False | False |

Not set | True | True |

Not set | False | False |

True | Not set | True |

False | Not set | False |

### Group Filter

*Filter*

*[!]\QuesList.SubqList.RowList = ValueList*

A normal filter expression including logical operators, parenthesis, intervals, lists, special codes and frequencies.

Set Expression

*Condition - If*

An optional condition can be set that will restrict the operation to respondents that satisfies the If expression.

Syntax

See Filter

Action - Then

An assignment expression that will set values (codes, quantities or special codes) to each respondent that satisfies the optional group filter and condition.

Syntax

[!]\QuesList.SubqList.Rowlist = [!,]ValueList

Or

\QuesList.SubqList.Rowlist = SpecialCode

*Left hand side*

A Question/Sub question/Row reference including intervals (,,) and lists (,). An exclamation mark states that all values on the right hand side will be removed instead of set.

*Right hand side*

A Special code or a value list containing one or many values that will be set. An exclamation mark states that all values (answers) will be removed prior to setting the given values.

*Special codes*

!? | Not asked |

- | Not answered |

!¤ | Non-existence |

*Value list*

v | Single value (code or quantity) |

v,v,…,v | Multiple values for M/RM. |

!,v,v,…,v | All answers will be removed prior to setting the new values (M/RM). The special case ”!,v” for all other data types is equal to “v” since only one value is possible. |

*Examples*

- Set \Q3.b to 10 for each respondent that satisfies (\Q1.a=1 AND \Q2.a.1=13:19)

<group filter=”\Q1.a=1”> <set condition=”\Q2.a.1=13:19” action=”\Q3.b=10”> </group>

- Remove all answers from \Q4.a.1 to \Q4.a.10 and then set \Q4.a.1 to \Q4.a.10 to 2, 3 and 4 for each respondent that satisfies (\Q10:Q12.a:b.1=1 | \Q13.a=5)

<set condition=”\Q10:Q12.a:b.1=1|\Q13.a=5” action=”\Q4.a.1,,10=!,2,3,4” />

- Set \Q1.a as ‘not asked’ for all respondents

<set action=”\Q1.a=!?” />

- Remove code 1 from \Q1.a for all respondents

<set action=”!\Q1.a=1” />

- Set all components in Q1 to Q5 to not answered

<set action=”\Q1,,Q5=-“ />

- Set all components in sub questions a, b, c and f in Q1 to not answered

<set action=”\Q1.a,,c,f=-” />

- Set rows 1, 10 and 12 in all sub questions in Q1 to not answered

<set action=”\Q1.1,10,,12=-“ />

Logical Define

*Condition - If*

An optional condition can be set that will restrict the operation to respondents that satisfies the If expression.

Syntax

See Filter

*Action - Then*

A logical expression that fills a categorical question with evaluated data (true/false).

Syntax

See Filter

*Location*

A reference to the categorical row that will have its data filled or updated.

*Examples*

- Evaluate \Q1.a=1 and fill the second row in \Q2.a with true/false values

<logic action=”\Q1.a=1” location=”\Q2.a.2” />

- Evaluate \Q3.b=10 for each respondent that satisfies (\Q1.a=1 AND \Q2.a.1=13:19) and fill the first row in \Q10.a with true/false values.

<group filter=”\Q1.a=1”> <logic condition=”\Q2.a.1=13:19” action=”\Q3.b=10” location=”\Q10.a.1” /> </group>

Arithmetical Define

*Condition - If*

An optional condition can be set that will restrict the operation to respondents that satisfies the If expression.

Syntax

See Filter

*Action - Then*

An arithmetical expression that fills a quantitative question with evaluated data.

Syntax

- N

Numeric value - [<[N]>]Address

Quantitative question: evaluates to a series of numerical answers.

Categorical question: evaluates to a series of codes (default) or to a series of categorical values (0/1).

<>Address means that non-answers should be kept.

<N>Address means that non-answers should be given the value N.

- serial

Fills a numeric question with a respondent index starting from 1. - Function

ABS(*expression*)absolute value,

NINT( *expression*)round to nearest integer,

MAX( *expression*)maximum value,

MIN( *expression*)minimum value,

INT( *expression*)convert to integer

Arithmetical operators: +, -, *, /, **

Parentheses can be used to override operator precedence.

*Location*

A reference to the quantitative row that will have its data filled or updated.

*Examples*

- Fill the second row in \Q2.a with 50 for all respondents.

<arithmetic action=”(2 + 3) * 10” location=”\Q2.a.2” />

- Fill the first row in \Q1.a with a respondent number ([1..N]).

<arithmetic action=”(2 + 3) * 10” location=”\Q1.a.1” />

- Evaluate INT(<10>\Q20.b.1 – 100) for each respondent that satisfies (\Q1.a=1 AND \Q2.a.1=3:9) and fill the first row in \Q10.a.

<group filter=”\Q1.a=1”> <arithmetic condition=”\Q2.a.1=3:9” action=”INT(<10>\Q20.b.1 – 100)” location=”\Q10.a.1” /> </group>