**[D] sort** -- Sort data

__Syntax__

__so__**rt** *varlist* [*in*] [**,** **stable**]

__Menu__

**Data > Sort**

__Description__

**sort** arranges the observations of the current data into ascending order
based on the values of the variables in *varlist*. There is no limit to
the number of variables in the *varlist*. Missing numeric values (see
missing) are interpreted as being larger than any other number, so they
are placed last with **. < .a < .b < ... < .z**. When you sort on a string
variable, however, null strings are placed first and uppercase letters
come before lowercase letters.

The dataset is marked as being sorted by *varlist* unless **in** *range* is
specified. If **in** *range* is specified, only those observations are
rearranged. The unspecified observations remain in the same place.

__Option__

**stable** specifies that observations with the same values of the variables
in *varlist* keep the same relative order in the sorted data that they
had previously. For instance, consider the following data:

x b
3 1
1 2
1 1
1 3
2 4

Typing **sort x** without the **stable** option produces one of the following
six orderings.

x b | x b | x b | x b | x b | x b
1 2 | 1 2 | 1 1 | 1 1 | 1 3 | 1 3
1 1 | 1 3 | 1 3 | 1 2 | 1 1 | 1 2
1 3 | 1 1 | 1 2 | 1 3 | 1 2 | 1 1
2 4 | 2 4 | 2 4 | 2 4 | 2 4 | 2 4
3 1 | 3 1 | 3 1 | 3 1 | 3 1 | 3 1

Without the **stable** option, the ordering of observations with equal
values of *varlist* is randomized. With **sort x, stable**, you will
always get the first ordering and never the other five.

If your intent is to have the observations sorted first on **x** and then
on **b** within tied values of **x** (the fourth ordering above), you should
type **sort x b** rather than **sort x, stable**.

**stable** is seldom used, and, when specified, causes **sort** to execute
more slowly.

__Examples__

Setup
**. sysuse auto**
**. keep make mpg weight**

Arrange observations into ascending order based on the values of **mpg**
**. sort mpg**

Same as above, but for observations with the same values of **mpg**, keep
them in the same relative order in the sorted data as they had previously
**. sort mpg, stable**

List the 5 cars with the lowest **mpg**
**. list make mpg in 1/5**

List the 5 cars with the highest **mpg**
**. list make mpg in -5/L**

Arrange observations into ascending order based on the values of **mpg**, and
within each **mpg** category arrange observations into ascending order based
on the values of **weight**
**. sort mpg weight**

List the 8 cars with the lowest **mpg**, and within each **mpg** category with
the lowest **weight**
**. list in 1/8**

Arrange observations into alphabetical order based on the value of **make**
**. sort make**

For most purposes, this method of sorting is sufficient. It is possible
to override Stata's sort logic. See **[U] 12.4.2.5 Sorting strings**
**containing Unicode characters** for information about ordering strings in a
language-sensitive way. We do not recommend that you do this.