Yes, you can discard them if you wish. You can leave them in if you want, because they don't interfere with anything in 10(2), but they are not needed and can be removed.
-
Login or Register
- Log in with
gen moy = month(dofm(mdate)) gen year = year(dofm(mdate)) // CREATE A "FISCAL YEAR" RUNNING FROM JULY THROUGH SUBSEQUENT JUNE gen fyear = cond(moy > 6, year, year-1) frame put stock_id fyear mcap bmr, into(mcap_bmr_work) frame change mcap_bmr_work collapse (count) n_mcap = mcap n_bmr = bmr (firstnm) mcap bmr, by(stock_id fyear) assert n_mcap <= 1 & n_bmr <= 1 // VERIFY UNIQUE VALUE OF MCAP AND BMR replace fyear = fyear + 1 // CHANGE THE FYEAR TO WHICH THEY WILL APPLY frame change default rename (mcap bmr) orig= frlink m:1 stock_id fyear, frame(mcap_bmr_work) frget mcap bmr, from(mcap_bmr_work) frame drop mcap_bmr_work drop mcap_bmr_work egen byte representative = tag(stock_id fyear) // MEDIAN SPLIT BASED ON JUNE VALUE OF mcap capture program drop one_year_median_split program define one_year_median_split xtile june_mcap_group = mcap, nq(2) exit end frame put stock_id fyear mcap if representative & !missing(mcap), into(median_split) // *** frame change median_split runby one_year_median_split, by(fyear) frame change default frlink m:1 stock_id fyear, frame(median_split stock_id fyear) // *** frget june_mcap_group, from(median_split) frame drop median_split drop median_split // NOW SPLIT AT 30TH AND 70TH PERCENTILES OF bmr capture program drop one_year_three_groups program define one_year_three_groups if _N > = 3 { _pctile bmr, percentiles(30 70) gen cut = `r(r1)' in 1 replace cut = `r(r2)' in 2 xtile march_bmr_group = bmr, cutpoints(cut) } else { gen march_bmr_group = . } exit end frame put stock_id fyear bmr if representative & !missing(bmr), into(three_groups) // *** frame change three_groups runby one_year_three_groups, by(fyear) verbose frame change default frlink m:1 stock_id fyear, frame(three_groups stock_id fyear) // *** frget march_bmr_group, from(three_groups) frame drop three_groups drop three_groups capture program drop one_weighted_return program define one_weighted_return if !missing(june_mcap_group, march_bmr_group) { egen numerator = total(mcap*rt) egen denominator = total(mcap) gen vw_mean_rt = numerator/denominator } exit end drop if missing(june_mcap_group, march_bmr_group) runby one_weighted_return, by(mdate june_mcap_group march_bmr_group) collapse (first) vw_mean_rt, by(mdate june_mcap_group march_bmr_group) drop if missing(vw_mean_rt) keep mdate june_mcap_group march_bmr_group vw_mean_rt isid june_mcap_group march_bmr_group mdate, sort by mdate june_mcap_group, sort: egen temp = mean(vw_mean_rt) by mdate (june_mcap_group), sort: gen SMB = temp[1] - temp[_N] drop temp by mdate march_bmr_group, sort: egen temp = mean(vw_mean_rt) by mdate (march_bmr_group): gen HML = temp[1] - temp[_N] drop temp // AND IF YOU WANT TO REDUCE TO ONE OBSERVATION PER MONTH label define june_mcap_group 1 "S" 2 "B" label define march_bmr_group 1 "L" 2 "M" 3 "H" label values june_mcap_group june_mcap_group label values march_bmr_group march_bmr_group decode june_mcap_group, gen (mcap_group) decode march_bmr_group, gen(bmr_group) drop june_mcap_group march_bmr_group egen groups = concat(mcap_group bmr_group) keep mdate groups SMB HML vw_mean_rt rename vw_mean_rt =_ reshape wide vw_mean_rt_, i(mdate) j(groups) string gen HML_new = (vw_mean_rt_SH + vw_mean_rt_BH)/2 - (vw_mean_rt_SL + vw_mean_rt_BL)/2 drop HML rename HML_new HML
capture program drop one_weighted_return program define one_weighted_return if !missing(june_mcap_group, march_bmr_group) { egen numerator = total(lagged_mcap*rt) egen denominator = total(lagged_mcap) gen vw_mean_rt = numerator/denominator } exit end drop if missing(june_mcap_group, march_bmr_group) xtset stock_id mdate gen lagged_mcap = L1.mcap runby one_weighted_return, by(mdate june_mcap_group march_bmr_group)
gen moy = month(dofm(mdate)) gen year = year(dofm(mdate)) // CREATE A "FISCAL YEAR" RUNNING FROM JULY THROUGH SUBSEQUENT JUNE gen fyear = cond(moy > 6, year, year-1) frame put stock_id fyear mcap bmr, into(mcap_bmr_work) frame change mcap_bmr_work assert moy == 3 if !missing(bmr) assert moy == 6 if !missing(mcap) collapse (count) n_mcap = mcap n_bmr = bmr (firstnm) mcap bmr, by(stock_id fyear) assert n_mcap <= 1 & n_bmr <= 1 // VERIFY UNIQUE VALUE OF MCAP AND BMR replace fyear = fyear + 1 // CHANGE THE FYEAR TO WHICH THEY WILL APPLY frame change default rename (mcap bmr) orig= frlink m:1 stock_id fyear, frame(mcap_bmr_work) frget mcap bmr, from(mcap_bmr_work) frame drop mcap_bmr_work drop mcap_bmr_work egen byte representative = tag(stock_id fyear)
gen moy = month(dofm(mdate)) gen year = year(dofm(mdate)) // CREATE A "FISCAL YEAR" RUNNING FROM JULY THROUGH SUBSEQUENT JUNE gen fyear = cond(moy > 6, year, year-1) frame put stock_id fyear mcap bmr, into(mcap_bmr_work) frame change mcap_bmr_work replace mcap = . if moy != 6 replace bmr = . if moy != 3 collapse (count) n_mcap = mcap n_bmr = bmr (firstnm) mcap bmr, by(stock_id fyear) assert n_mcap <= 1 & n_bmr <= 1 // VERIFY UNIQUE VALUE OF MCAP AND BMR replace fyear = fyear + 1 // CHANGE THE FYEAR TO WHICH THEY WILL APPLY frame change default rename (mcap bmr) orig= frlink m:1 stock_id fyear, frame(mcap_bmr_work) frget mcap bmr, from(mcap_bmr_work) frame drop mcap_bmr_work drop mcap_bmr_work egen byte representative = tag(stock_id fyear)
Comment