Transfers data between structures of different sizes or types (but the same modes i.e. numerical or text) or where transfer is not from single structure to single structure.
||Format for values of
||Format for values of
||How to interpret factor values (
||Structures whose values are to be transferred; if values of several structures are to be transferred to one item in the
||Structures to take each set of transferred values; if several structures are to receive values from one item in the
EQUATE directive copies values from one set of data structures to another. For example, you may wish to copy the values from a one-way table into a variate, or from a matrix into a set of variates (one variate for each row, or for each column), or the other way round, from variates into a matrix. Alternatively, you may want to append values from several data structures into a single one. The only constraint is that the structures in the respective sets must all contain the same kind of values.
The general idea with
EQUATE is that the values in the structures in the
OLDSTRUCTURES list are copied into the structures in the
NEWSTRUCTURES list. Each item in
OLDSTRUCTURES list specifies a single data structure, or a single set of data structures, containing the values to be transferred. A single structure can be a factor, or a text, or any one of the structures that contain numbers (scalar, variate, rectangular matrix, diagonal matrix, symmetric matrix or table). If you want to give a set of structures you must put them into a pointer. As already mentioned, all the structures in the set must contain the same kind of values: that is, they must all be texts, or all factors, or must all contain numbers (but they need not all be the same kinds of numerical structure – they could, for example, be a mixture of variates and matrices).
The corresponding entry in the
NEWSTRUCTURE list indicates where the transferred data are to be placed. It is either a single structure or a pointer to a set of structures; the structures must be of a type suitable to store the values to be transferred.
Except with a format Genstat ignores where each structure within a set from the
OLDSTRUCTURES list ends and another one begins: that is, it treats the set as being a concatenated list of values. Similarly, it treats the structures in each
NEWSTRUCTURES set as an unstructured list of positions that are to receive values. The old values are repeated as often as is necessary to traverse all the new positions.
You can use the
NEWFORMAT options to control how the old values and new positions are traversed. The setting for each of these is a variate whose values are interpreted as follows:
(a) a positive integer n means take the next n values (
OLDFORMAT) or fill the next n positions (
(b) a negative integer –n means skip the next n values or positions;
(c) a missing value
* means skip to the end of the structure.
As usual, Genstat recycles when it runs out of values. That is, if the contents of one of the variates is exhausted before all the
NEWSTRUCTURES positions have either been filled or skipped, then that variate is repeated.
If you are transferring values between factors, Genstat will check that each value to be transferred is valid for the factor in the
NEWSTRUCTURES list. By default, Genstat will try to match the values using the levels of the factors, but you can set option
FREPRESENTATION=labels to match by their labels, or
FREPRESENTATION=ordinals to match them merely according to the ordinal position in the levels vector of each factor.
The values of factors that have labels can be copied into texts. In addition, values of texts can be copied into factors, provided all the strings are valid labels for the factor concerned.
Factor values can also be copied into variates; the
FREPRESENTATION option controls whether Genstat uses the levels or the ordinal values.
Any restrictions on vectors in an
EQUATE statement are ignored.
Commands for: Calculations and manipulation.
" Example 1:4-3-1a " OPEN '%GENDIR%/Examples/GuidePart1/EMPLOYEE.DAT'; CHANNEL=2; FILE=input " Read values for the first 6 employees, in series, into Name1, Grade1 and Hours1." TEXT [NVALUES=6] Name1 FACTOR [NVALUES=6; LEVELS=3] Grade1 VARIATE [NVALUES=6] Hours1 READ [PRINT=data,errors; CHANNEL=2; SERIAL=yes] Name1,Grade1,Hours1 " Read values for the final 4 employees, in series, into Name2, Grade2 and Hours2." TEXT [NVALUES=4] Name2 FACTOR [NVALUES=4; LEVELS=3] Grade2 VARIATE [NVALUES=4] Hours2 READ [PRINT=data,errors; CHANNEL=2; SERIAL=yes] Name2,Grade2,Hours2 " Use EQUATE to put information about all the employees into single vectors Name, Grade and Hours." TEXT [NVALUES=10] Name FACTOR [NVALUES=10; LEVELS=3] Grade VARIATE [NVALUES=10] Hours EQUATE !P(Name1,Name2),!P(Grade1,Grade2),!P(Hours1,Hours2);\ NEWSTRUCTURES=Name,Grade,Hours PRINT Name,Grade,Hours CLOSE 2; FILE=input