I am trying to compute the Relative Strengh Index (RSI) of 500 stocks but on a monthly basis. I wrote the following code based on a paper found online, however, there are some mistakes but I do not know how to fix them. Moreover, there are some statements that I do not understand what "%do i=16 %to 7570;" stand for in the code.
data Project.MonthlyPrice; set RSI; by PERMNO; lprc = lag(prc); if prc>lprc then gain = prc-lprc; if prc<lprc then loss = lprc-prc; if first.PERMNO then do; gain = .; loss = .; end; retain months 0; months+1; if first.PERMNO then months = 1; if gain = . then gain = 0; if loss = . then loss = 0; retain sumgain 0; sumgain = sumgain + gain; retain sumloss 0; sumloss = sumloss + loss; if months=15 then do; AveGain = (sumgain-gain) / 14; AveLoss = (sumloss-loss) / 14; RS = AveGain / AveLoss; RSI = 100-100/(1+RS); end; drop sumgain sumloss; run; %macro calRSI(); %do i=16 %to 7570; data Project.MonthlyPrice; set RSI; lAveGain = lag1(AveGain); lAveLoss = lag1(AveLoss); if months = &i then do; AveGain = (lAveGain*13+gain)/14; AveLoss = (lAveLoss*13+loss)/14; RS = AveGain / AveLoss; RSI = 100-100/(1+RS); end; %end; %mend; data Project.MonthlyPrice; set RSI; run;