I am looking for a way to find 94th percentile in a recursive window. My goal is to find  the the 94th percentile of all previous observations of the variable “value” for each firm.


asrol can find percentiles in a rolling window or in a recursive window. To show its use, I generate a dataset of 50,000 observations, where there are 100 firms’ ids and 500 time periods.

 *Generate a dummy dataset
loc time = 500
loc panel = 100
local obs=`time' * `panel'
set obs `obs'
gen id=mod(_n,`panel')+1
bys id: gen year=_n
gen value =uniform()

*Use asrol to find the given percentile
bys id: asrol value, stat(median) perc(.94) window(year -100000 -1) gen(Perc94)


bys id: The calculations are performed for each firm separately.

asrol value: asrol is the command name and value is the variable for which the percentiles are calculated.

stat(median) perc(.94) : These two options are used together to find percentiles. When the option stat(median) is used, the default of perc(.5) is used. In all other cases, the option perc() needs to be used.

window(year -100000 -1) : This sets the window for including observations in the range. The first element of the window is year, which is a variable in the dataset. -100000 is the length of the back window; it is large enough to include all previous observations. The final value, -1, will exclude the current observation from the calculation.

gen(Perc94): This option is used to generate a new variable Perc94, which will contain the percentile values.