1. Home
  2. GETLOCATIONS directive

GETLOCATIONS directive

Finds locations of an identifier within a pointer, or a string within a factor or text, or a number within any numerical data structure.

Options

CASE = string token Whether to treat the case of letters (small or capital) as significant when searching for a string (significant, ignored); default sign
TOLERANCE = scalar Tolerance for comparing numbers
SUBSTITUTE = string token Whether to substitute dummies within pointers in DATA or FIND (yes, no); default no

Parameters

DATA = identifiers Variates, scalars, matrices, tables, factors, texts or pointers to be searched
FIND = scalars, texts or pointers Numbers, strings or identifiers to be located in DATA
NLOCATIONS = scalars Saves the number of times that FIND occurs in DATA
LOCATIONS = variates or pointers Saves the locations where FIND occurs as one of the values in DATA, in a variate if DATA is a one-dimensional data structure like a variate or text, or in a pointer containing a variate for each dimension if DATA is a multi-dimensional data structure like a matrix or table
CLASSIFICATION = pointers Saves the classifying factors for a DATA table, in the same order as the corresponding variates in the LOCATIONS and LEVELS pointers
LEVELS = pointers Saves the levels of the classifying factors where FIND occurs as one of the values of a DATA table, the information is saved in a pointer containing a variate for each factor

Description

The GETLOCATIONS directive finds where a particular item occurs as one of the values stored by a Genstat data structure. So, for example, it can locate the lines within a text structure that are equal to a particular string, or it can locate the rows and columns of a matrix that hold a particular number, or it can locate the numbers of the suffixes where a pointer contains a particular identifier.

The item to find is specified by the FIND parameter, as a scalar (for a number), or a single-valued text (for a string of characters), or a single-valued pointer (for the identifier of a data structure). The data structure to search is supplied by the DATA parameter.

If the FIND pointer contains a dummy, GETLOCATIONS usually looks to see that dummy is contained in the DATA pointer. Alternatively, if you set option SUBSTITUTE=yes and the FIND pointer contains a dummy, it is replaced by the data structure to which it points. Then if that data structure is a dummy, it too is replaced, amd 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 same substitution is done on any dummies in the DATA pointer. So, when SUBSTITUTE=yes, GETLOCATIONS matches the structures to which the dummies (eventually) point, rather than the dummies themselves.

The number of times that FIND occurs in DATA can be saved, in a scalar, by the NLOCATIONS parameter. The locations where FIND occurs can be saved by the LOCATIONS parameter. These are saved in a variate if DATA is a one-dimensional structure i.e. a scalar, variate, text, factor or pointer. If DATA is a rectangular, diagonal or symmetric matrix, they are saved in a pointer containing two variates. The first saves the row locations, and the second saves the column locations. If DATA is a table, LOCATIONS saves a pointer with a variate for each factor classifying the table. Each variate stores the locations within the dimension classified by a particular factor. So, for example, with a two-way DATA table the first variate stores the row numbers, and the second variate stores the column numbers. The CLASSIFICATION parameter can save the factors in the same order as the LOCATIONS variates, in case you are unsure of which factor corresponds to each dimension. The LEVELS parameter provides an alternative to LOCATIONS for tables, storing the factor levels corresponding to the positions in each dimension, rather than the numbers of e.g. the rows or columns. If a DATA table has margins and the number to FIND occurs in one of them, a missing value will be stored for the corresponding location or level.

Options: CASE, TOLERANCE, SUBSTITUTE.

Parameters: DATA, FIND, NLOCATIONS, LOCATIONS, CLASSIFICAION, LEVELS.

Action with RESTRICT

GETLOCATIONS takes account of restrictions on DATA variates, factors or texts.

See also

Directives: TXFIND, TXPOSITION.

Functions: GETFIRST, GETLAST, GETPOSITION, POSITION.

Commands for: Calculations and manipulation.

Example

CAPTION 'GETLOCATIONS examples'; STYLE=meta
" factors "
FACTOR [LEVELS=!(0.1,0.2,0.3); VALUES=0.1,0.2,0.3] f
GETLOCATIONS DATA=f; FIND=0.2; NLOCATIONS=nloc; LOCATIONS=loc
PRINT nloc,loc
FACTOR [LEVELS=3; LABELS=!t(a,bcb,c); VALUES=1,2,3,2,1] f
GETLOCATIONS DATA=f; FIND=!t(bcb); NLOCATIONS=nloc; LOCATIONS=loc
PRINT nloc,loc
" matrices "
MATRIX [ROWS=3; COLUMNS=4; VALUES=1...5,2.01,7,8...11,2] rm
PRINT rm
GETLOCATIONS DATA=rm; FIND=2; NLOCATIONS=nloc; LOCATIONS=mloc
PRINT nloc,mloc[]; FIELD=8
GETLOCATIONS [TOLERANCE=0.1] DATA=rm; FIND=2; NLOCATIONS=nloc; LOCATIONS=mloc
PRINT nloc,mloc[]; FIELD=8
" pointers "
GETLOCATIONS DATA=!p(a,b,c); FIND=!p(b); NLOCATIONS=nloc; LOCATIONS=loc
PRINT nloc,loc
GETLOCATIONS DATA=!p(a,b,c,b,d,e); FIND=!p(b); NLOCATIONS=nloc; LOCATIONS=loc
PRINT nloc,loc
" texts "
GETLOCATIONS DATA=!t(aa,bcb,ccc); FIND=!t(bcb); NLOCATIONS=nloc; LOCATIONS=loc
PRINT nloc,loc
GETLOCATIONS [CASE=ignored] DATA=!t(aa,Bcb,ccc,bcB,dd,eee); FIND=!t(bCb);\
      NLOCATIONS=nloc; LOCATIONS=loc
PRINT nloc,loc
" variates "
VARIATE [VALUES=0.1,0.2,0.3] v
GETLOCATIONS DATA=v; FIND=0.2; NLOCATIONS=nloc; LOCATIONS=loc
PRINT nloc,loc
VARIATE [VALUES=0.1,0.2,0.3,0.2,0.1] v
GETLOCATIONS DATA=v; FIND=0.2; NLOCATIONS=nloc; LOCATIONS=loc
PRINT nloc,loc
Updated on March 7, 2019

Was this article helpful?