Compares the distinct values contained in two data structures.

### Options

`FREPRESENTATION` = string token |
How to represent factors in a comparison between two factors (`levels` , `labels` , `ordinals` ); default `leve` |
---|---|

`LFACTORIAL` = scalar |
Limit on number of factors or variates in the terms formed from a `LEFT` formula; default `*` i.e. none |

`RFACTORIAL` = scalar |
Limit on number of factors or variates in the terms formed from a `RIGHT` formula; default `*` i.e. none |

`TOLERANCE` = scalar |
Tolerance to use when comparing numerical values; default 10^{-6} |

`SUBSTITUTE` = string token |
Whether to substitute dummies within `LEFT` or `RIGHT` pointers and formulae (`yes` , `no` ); default `no` |

### Parameters

`LEFT` = identifiers |
First structures in each comparison |
---|---|

`RIGHT` = identifiers |
Second structures in each comparison |

`CONTAINS` = scalars |
Returns 1 or 0 according to whether or not `LEFT` contains `RIGHT` |

`EQUALS` = scalars |
Returns 1 or 0 according to whether or `LEFT` and `RIGHT` contain exactly the same distinct set of items |

`INCLUDEDIN` = scalars |
Returns 1 or 0 according to whether or not `LEFT` is included in `RIGHT` |

`DISTINCT` = scalars |
Returns 1 or 0 according to whether or not `LEFT` and `RIGHT` are distinct |

### Description

`SETRELATE`

can compare the distinct values of any numerical structure (scalar, variate, table, matrix, diagonal matrix or symmetric matrix) with another numerical structure or with a factor. It can compare a factor either with another factor, or with a variate or a text. It can compare a text with another text, or two pointers. Finally, it can compare two formulae.

The `LEFT`

and `RIGHT`

parameters specify the structures to compare. The other parameters provide the results of the comparison as scalars containing the values 0 or 1. `CONTAINS`

is set to 1 if the `LEFT`

structure contains every (distinct) value in the `RIGHT`

structure. `EQUALS`

returns 1 if the sets of distinct values in the `LEFT`

and `RIGHT`

structures are identical. `INCLUDEDIN`

equals 1 if the `RIGHT`

structure contains every (distinct) values in the `LEFT`

structure. `DISTINCT`

equals 1 if the `LEFT`

and `RIGHT`

structures are have a null intersection, i.e. they have no values in common.

When comparing two factors, the `FREPRESENTATION`

option specifies whether to use levels, labels or ordinal values. (The ordinal values are formed representing the levels, in numerical order, by the numbers 1, 2 and so on.) By default levels are used.

When comparing pointers and formulae, the `SUBSTITUTE`

option controls whether any dummies that they contain are substituted by the data stuctures to which they point, before the comparison is made. Note, if any of those data structures is a dummy, it too is replaced, and so on until we reach a data structure that is *not* a dummy. However, if the original dummy (or any of the dummies to which it points) is unset, the original dummy is retained.

The `LFACTORIAL`

and `RFACTORIAL`

options can be used to set a limit on number of factors or variates in the terms formed from a `LEFT`

or `RIGHT`

formula, respectively; by default there are no limits.

The `TOLERANCE`

option defines the tolerance to be used when comparing numbers. The default value 10^{-6} should be suitable, however, unless the numbers are very small.

Options: `FREPRESENTATION`

, `LFACTORIAL`

, `RFACTORIAL`

, `TOLERANCE`

, `SUBSTITUTE`

.

Parameters: `LEFT`

, `RIGHT`

, `CONTAINS`

, `EQUALS`

, `INCLUDEDIN`

, `DISTINCT`

.

### Action with `RESTRICT`

`SETRELATE`

ignores any restrictions on `LEFT`

or `RIGHT`

vectors.

### See also

Directives: `SETALLOCATIONS`

, `SETCALCULATE`

, `SET2FORMULA`

, `CALCULATE`

.

Commands for: Calculations and manipulation.

### Example

" Examples 1:4.3.2 and 1:4.3.3 " " Examinations passed by three students " TEXT Jim,Kim,Tim; VALUES=\ !t(Art,English,French,Geography,History,\ 'Information technology',Maths,Music,Science,Spanish),\ !t('Business studies',English,French,Geography,History,\ Maths,Music,'Resistant materials',Science,Spanish),\ !t('Business studies',English,French,Geography,History,\ 'Resistant materials') " Compare Jim with Kim: neither set of exams is a subset of the other" SETRELATE Jim; Kim; CONTAINS=Kim_subset_of_Jim;\ EQUALS=Jim_same_as_Kim; INCLUDEDIN=Jim_subset_of_Kim PRINT [ORIENTATION=across; RLWIDTH=20]\ Kim_subset_of_Jim,Jim_same_as_Kim,Jim_subset_of_Kim;\ DECIMALS=0 " but Tim's exams are a subset of Kim's." SETRELATE Kim; Tim; CONTAINS=Tim_subset_of_Kim;\ EQUALS=Kim_same_as_Tim; INCLUDEDIN=Kim_subset_of_Tim PRINT [ORIENTATION=across; RLWIDTH=20]\ Tim_subset_of_Kim,Kim_same_as_Tim,Kim_subset_of_Tim;\ DECIMALS=0 " All exams passed by any of the students " SETCALCULATE All_exams = Jim .OR. Kim .OR. Tim PRINT All_exams; JUSTIFICATION=left " Exams passed by both Jim and Kim " SETCALCULATE Jim_and_Kim = Jim .AND. Tim PRINT Jim_and_Kim; JUSTIFICATION=left " Exams passed by Kim but not Tim " SETCALCULATE Kim_not_Tim = Kim - Tim PRINT Kim_not_Tim; JUSTIFICATION=left " Exams passed by only one student " SETCALCULATE One_student = (Jim - (Kim .OR. Tim))\ .OR. (Kim - (Jim .OR. Tim))\ .OR. (Tim - (Jim .OR. Kim)) PRINT One_student; JUSTIFICATION=left