A Decreasing Sort
Sorting in Stata is reasonably efficient - a million random
values can be put in increasing order in <3 seconds with
sort x
However the sort command doesn't have a inverse option to sort
from high to low. You might be led to the -gsort- command:
gsort -x
but that does a decreasing sort in an inefficient manner - it
sorts increasing on x, then sorts increasing on minus _n.
Essentially it is doing:
sort x
gen long sortvar = -_n
sort sortvar
drop sortvar
That works, but it takes about 3 times as long as just sorting
on x because sorting on -_n is the worst case sort. Better to
negate x yourself before an increasing sort:
generate negx = -x
sort negx
which is almost as fast as the increasing sort. There is no
similar solution for a decreasing sort on an alphabetic
variable.
Also recall that there are no promises about the order
of records within a group a records that match on the sort
criteria, unless you add the -stable- option.
Although there is a Statalist posting claiming otherwise, it
appears to me that the only additonal memory required for a sort
is for a list of pointers to the records - probably 8 bytes times
the number of obervations.
Daniel Feenberg