%macro volatility;
%do i = 1 %to 504089;
%put &i;
data a.temp1;
set d.nacdslink2;
if _N_=&i;
run;
proc sql;
create table a.temp2 as
select a.*, b.date, abs(b.prc) as price, b.ret
from a.temp1 a, crsp.dsf b
where a.permno=b.permno and b.date<a.date and b.date>=intnx('day', a.date, -180) and abs(prc)>0
order by permno, date;
quit;
proc means data=a.temp2 noprint;
var ret;
output out=a.temp3 std=volatility;
run;
data a.temp3;
merge a.temp1 a.temp3(keep=volatility);
run;
data d.volatility;
set d.volatility a.temp3;
run;