Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • bysort reverse order

    Hi there

    -bysort- doesn't seem to allow sorting in reverse order:

    Code:
    sysuse auto, clear
    keep foreign length
    order foreign length
    bysort foreign (length): gen order = _n
    bysort foreign (-length): gen order_rev = _n
    However, -gsort- can sort in reverse order, so one could do this:

    Code:
    gsort foreign -length
    bysort foreign: gen order_rev = _n
    But is the order always stable when "bysorting" in this way?

    Thanks

  • #2
    gsort foreign -length
    bysort foreign: gen order_rev = _n
    Why are you sorting on foreign again? You should just use -by- in the second line

    gsort foreign -length
    by foreign: gen order_rev = _n
    If you have 2 or more equal values of length for a particular category of foreign, then sorting by both foreign and length can result in different sort orders across repeated sorts.

    Comment


    • #3
      -bysort- is just -by- and -sort- in one shot, and without the possibility of the option -, stable-.

      -gsort- does not have the option -,stable- either.

      You can easily replicate

      Code:
      sort x, stable
      by

      Code:
      gen n=_n
      sort x n
      You can easily replicate

      Code:
      gsort x -y
      by

      Code:
      gen minusy = -y
      sort x minusy
      In short, -gsort- and -bysort- and -sort, stable- are just convenience commands that you can replicate with one line more.

      Comment


      • #4
        A detail with @Joro Kolev's helpful answer: You need to use an appropriate variable type for each new variable. Thus with a big dataset any variable holding observation numbers may need to be long type. If the original was double its negation should be too to guarantee identical sort order.

        Comment

        Working...
        X