Marlen
Marlen

Reputation: 9

Is there a way to flip the order of observations in Stata?

Is it possible to create a backwards counting variable in Stata (like the command _n, just numbering observations backwards)? Or a command to flip the data set, so that the observation with the most recent date is the first one? I would like to make a scatter plot with AfD on the y-axis and the date (row_id) on the x-axis. When I make the plot however, the weeks are ordered backwards. How can I change the order?

This is the code:

generate row_id=_n
twoway scatter AfD row_id || lfit AfD row_id

Here are the data set and the plot: Data set

enter image description here

Upvotes: 0

Views: 1334

Answers (2)

Nick Cox
Nick Cox

Reputation: 37208

For your problem, plotting in terms of a daily date variable and -- if for some reason that is a good idea -- using xscale(reverse) are likely to be what you need, as well explained by @Wouter.

In general something like

gen long newid = _N - _n + 1 
sort newid 

will reverse a dataset.

Upvotes: 1

Wouter
Wouter

Reputation: 3261

Your date variable is a string variable, which is unlikely to get you the desired result if you sort on that variable.

You can create a Stata internal form date variable from your string variable:

gen date_num = daily(date, "MDY")
format date_num %td

The values of this new variable will represent the number of days since 1 Jan 1960.

If you create a scatter plot with this date variable on the x-axis, by default it will be sorted from min to max. To let it run from max to min you can specify option xscale(reverse).

If you still want to create an id variable by yourself you can choose one of these options (ascending and descending):

sort date_num
gen id = _n

gsort -date_num
gen id = _n

Upvotes: 2

Related Questions