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.
Options
OLDFORMAT = variate |
Format for values of OLDSTRUCTURES ; within the variate, a positive value n means take n values, –n means skip n values and a missing value means skip to the next structure; default * i.e. take all the values in turn |
---|---|
NEWFORMAT = variate |
Format for values of NEWSTRUCTURES ; within the variate, a positive value n means fill the next n positions, –n means skip n positions and a missing value means skip to the next structure; default * i.e. fill all the positions in turn |
FREPRESENTATION = string token |
How to interpret factor values (labels , levels , ordinals ); default leve |
Parameters
OLDSTRUCTURES = identifiers |
Structures whose values are to be transferred; if values of several structures are to be transferred to one item in the NEWSTRUCTURES list, they must be placed in a pointer |
---|---|
NEWSTRUCTURES = identifiers |
Structures to take each set of transferred values; if several structures are to receive values from one item in the OLDSTRUCTURES list, they must be placed in a pointer |
Description
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 OLDFORMAT
and 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 (NEWFORMAT
);
(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.
Options: OLDFORMAT
, NEWFORMAT
, FREPRESENTATION
.
Parameters: OLDSTRUCTURES
, NEWSTRUCTURES
.
Action with RESTRICT
Any restrictions on vectors in an EQUATE
statement are ignored.
See also
Directive: CALCULATE
.
Procedures: APPEND
, STACK
, UNSTACK
, SUBSET
, VEQUATE
.
Commands for: Calculations and manipulation.
Example
" 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