I want to use the code which is written below to generate monthly idiosyncratic skewness which is equal to skewness of residuals obtained each month by regressing rt on mkt, smb and hml using twelve months daily rt, mkt, smb and hml data from months beginning t-11 and ending month t. This code I get from some post in Stata forum. I am not getting what these two line (which is highlighted in red colour below in code) are telling and what -99 is representing. Please help me in understanding these lines. Thank you
* Change date to STATA format
gen date1=date(month,"DMY")
format date1 %td
drop month
rename date1 date
gen mdate= mofd(date)
format mdate %tm
* Calculate Raw Returns Returns
bysort stock_id (date) : gen rt_r =((pr[_n]-pr[_n-1])/pr[_n-1])
bysort stock_id (date) : gen mkt_r =((mk[_n]-mk[_n-1])/mk[_n-1])
gen rt=rt_r-rf
gen mkt=mkt_r-rf
gen mkt2 = mkt^2
* Generate monthly idiosyncratic skewness
capture program drop one_regression
program define one_regression
regress rt mkt mkt2
tempvar resid // no need to keep resid around after the program
predict `resid', resid
summ `resid', detail
gen double skewness = r(skewness)
gen obs = r(N)
end
bysort stock_id mdate (date): gen high = cond(_n==1, mdate, -99)
rangerun one_regression, by(stock_id) interval(mdate -11 high)
keep if mdate==high // <-- just to help reduce to 1 summary observation per mdate-stock combination
keep stock* mdate skewness obs // <-- keep summary variables
drop if mdate<ym(2002,6)
drop if mdate>ym(2003,5)
replace skewness =. if obs<200
drop obs
rename skewness idioskew
* Change date to STATA format
gen date1=date(month,"DMY")
format date1 %td
drop month
rename date1 date
gen mdate= mofd(date)
format mdate %tm
* Calculate Raw Returns Returns
bysort stock_id (date) : gen rt_r =((pr[_n]-pr[_n-1])/pr[_n-1])
bysort stock_id (date) : gen mkt_r =((mk[_n]-mk[_n-1])/mk[_n-1])
gen rt=rt_r-rf
gen mkt=mkt_r-rf
gen mkt2 = mkt^2
* Generate monthly idiosyncratic skewness
capture program drop one_regression
program define one_regression
regress rt mkt mkt2
tempvar resid // no need to keep resid around after the program
predict `resid', resid
summ `resid', detail
gen double skewness = r(skewness)
gen obs = r(N)
end
bysort stock_id mdate (date): gen high = cond(_n==1, mdate, -99)
rangerun one_regression, by(stock_id) interval(mdate -11 high)
keep if mdate==high // <-- just to help reduce to 1 summary observation per mdate-stock combination
keep stock* mdate skewness obs // <-- keep summary variables
drop if mdate<ym(2002,6)
drop if mdate>ym(2003,5)
replace skewness =. if obs<200
drop obs
rename skewness idioskew
