1. Home
  2. SORT directive

SORT directive

Sorts units of vectors according to an index vector.

Options

INDEX = vectors Variates, texts or factors whose values are to define the ordering; default is to use the first vector in the OLDVECTOR list
DIRECTION = string token Order in which to sort (ascending, descending); default asce
DECIMALS = scalar Number of decimal places to which to round before sorting numbers; default * i.e. no rounding

Parameters

OLDVECTOR = vectors or pointers Factors, pointers, texts or variates whose values are to be sorted
NEWVECTOR = vectors or pointers Structure to receive each set of sorted values; if any are omitted, the values are placed in the corresponding OLDVECTOR

Description

The SORT directive allows you to reorder the units of a list of vectors or pointers according to one or more “index” vectors. These can be specified explicitly using the INDEX option (and they need not be among the vectors actually sorted). If you omit the INDEX option, Genstat uses the first vector in the OLDVECTOR list. The DECIMALS option allows you to define the number of decimal places that are taken into account for an index variate: for example DECIMALS=0 would round each value to the nearest integer. If you do not set this, there is no rounding. The DIRECTION option controls whether the ordering is into ascending or descending order; by default DIRECTION=ascending.

The vectors or pointers whose values are to be sorted are listed by the OLDVECTOR parameter. The units of each structure are permuted in exactly the same way, into an ordering determined from the index vectors. The NEWVECTOR parameter allows you to specify new vectors to contain the sorted values, and thus keep the unsorted values in the original vectors. For example

SORT [INDEX=Name] Age,Income,Name,Sex; NEWVECTOR=A,*,N,S

would place the sorted values of Age, Name and Sex into A, N and S; as there is a null entry (*) corresponding to Income in the NEWVECTOR list, the sorted incomes would replace the original values of Income. Any undeclared vector in the NEWVECTOR list is declared implicitly to match the corresponding OLDVECTOR.

Options: INDEX, DIRECTION, DECIMALS.

Parameters: OLDVECTOR, NEWVECTOR.

Action with RESTRICT

You can restrict the index vector, or any of the oldvectors, to sort only a subset of the units. Each of the units that is not in the subset is left in its original position.

See also

Directive: CALCULATE.

Function: SORT

Commands for: Calculations and manipulation.

Example

" Example SORT-1: Use of the SORT directive"
VARIATE [VALUES=21,50,24,49,29,42,32,42,36,40] A
& [VALUES=3000,17500,5000,20000,7000,4500,12000,18000,15500,17500]  I
TEXT [VALUES=Clarke,Irving,Adams,Jones,Day,Good,Edwards,Baker,Hall,Field] N
FACTOR [LABELS=!T(male,female); VALUES=2,1,1,1,2,2,1,1,2,1] S

" sort A, I, N & S according to alphabetical order for N,
  storing sorted values in Age, Income, Name & Sex "
SORT [INDEX=N] OLDVECTOR=A,I,N,S; NEWVECTOR = Age,Income,Name,Sex
PRINT Name,Sex,Age,Income

" sort A, I, N & S according to ascending values of A,
  storing sorted values in Age, Income, Name & Sex "
SORT [INDEX=A] OLDVECTOR=A,I,N,S; NEWVECTOR=Age,Income,Name,Sex
PRINT Name,Sex,Age,Income

" sort A, I, N & S according to descending values of I,
  storing sorted values in Age, Income, Name & Sex "
SORT [INDEX=I; DIRECTION=descending] OLDVECTOR=A,I,N,S;\ 
  NEWVECTOR=Age,Income,Name,Sex
PRINT Name,Sex,Age,Income
Updated on June 18, 2019

Was this article helpful?