Hello everybody; I have chosen SAS for technical analysis which I have used for writing my thesis. I wrote codes which have been shown below. I want to rewrite them to make them simple and well-structured such as a semi-professional programmer. However, I have not enough knowledge about programming. Here are my codes: ***********************************
*STEP 1: ROUNDING TIME;
***********************************
;
data Sampledata87_RT;
set Sampledata87;
TRD_EVENT_TIME = INPUT(TRD_EVENT_TM,time16.);
TRD_EVENT_ROUNDED = ROUND(TRD_EVENT_TIME,'00:30't);
TRD_EVENT_ROUFOR = PUT(TRD_EVENT_ROUNDED,hhmm.);
***********************************
*STEP 2: CALCULATING INTRADAY VOLUME;
***********************************
;
CountedVOLUME = TRD_PR*TRD_TUROVR;
***********************************
*STEP 3: CALCULATING NORMALIZED VOLUME;
***********************************
;
*Denominator
/*Sort by TRD_STCK_CD and temporal variables.*/;
proc sort data=Sampledata87_RT out=Sampledata87_SumVol;
by TRD_EVENT_DT;
run;
/*Sum VOLUME until the last of each TRD_STCK_CD is reached.*/
data Sampledata87_SumVolSo;
set Sampledata87_SumVol;
by TRD_EVENT_DT
TRD_STCK_CD notsorted;
format TRD_STCK_CD $5.;
informat TRD_STCK_CD $5.;
retain tmp_volume_sum;
tmp_volume_sum + CountedVOLUME;
if last.TRD_STCK_CD then do;
DailyVolume = tmp_volume_sum;
call missing(tmp_volume_sum);
end;
drop tmp_:;
run;
*The numerator
/*Sum VOLUME until the last of each TRD_STCK_CD is reached.*/;
data Sampledata87_SumVolSo;
set Sampledata87_SumVolSo;
by TRD_EVENT_DT
TRD_STCK_CD
TRD_EVENT_ROUFOR notsorted;
retain tmp_intradayvolume_sum;
tmp_intradayvolume_sum + CountedVOLUME;
if last.TRD_EVENT_ROUFOR then do;
IntradayVolume = tmp_intradayvolume_sum;
call missing(tmp_intradayvolume_sum);
end;
drop tmp_:;
run;
* Another way for calculating daily volume based on data set;
/*
proc sql noprint;
create table sums as
select TRD_STCK_CD, TRD_EVENT_DT, sum(CountedVOLUME) as volume_sum
from Sampledata87_SumVolSo
group by TRD_STCK_CD, TRD_EVENT_DT;
create index TRD_STCK_CD on sums;
quit;
data Sampledata87_SumVolSo02;
set Sampledata87_SumVolSo;
by TRD_EVENT_DT
TRD_STCK_CD notsorted;
volume_sum = .;
if last.TRD_STCK_CD then
set sums key=TRD_STCK_CD;
run;
*/;
*Approach 1: Calculating Daily Volume by Data set;
*Division for calculating adjusted volume in approach 1;
proc sort data=sampledata87_sumvolso out=sampledata87_sumvolso;
by TRD_STCK_CD TRD_EVENT_DT;
run;
data sampledata87_adjvol;
do until(last.TRD_STCK_CD);
do until(last.TRD_EVENT_DT);
set sampledata87_sumvolso;
by TRD_STCK_CD TRD_EVENT_DT;
if first.TRD_STCK_CD then
n=0;
if first.TRD_EVENT_DT then
n+1;
if n>1 then
do;
if not missing(IntradayVolume) then
adjusted_volume=divide(IntradayVolume,temp);
else call missing(adjusted_volume);
end;
if last.TRD_EVENT_DT then
temp=dailyvolume;
output;
end;
end;
drop temp n;
run;
proc sort data = sampledata87_adjvol;
by TRD_EVENT_DT TRD_STCK_CD;
run;
*Approach 2: Calculating daily volume by merging tables;
*Changing name & format of table 2 for coordination;
data sampledata87_02;
set sampledata87_02;
Options VALIDVARNAME=ANY;
rename
instrument = TRD_STCK_CD
Trade_Date = TRD_EVENT_DT;
run;
*Merging tables;
proc sort data=Sampledata87_sumvolso; by TRD_EVENT_DT TRD_STCK_CD; run;
proc sort data=Sampledata87_02; by TRD_EVENT_DT TRD_STCK_CD; run;
data Sampledata87_02_Mer;
merge Sampledata87_sumvolso Sampledata87_02;
by TRD_EVENT_DT TRD_STCK_CD;
keep TRD_EVENT_DT TRD_EVENT_TM TRD_STCK_CD TRD_EVENT_ROUNDED TRD_EVENT_ROUFOR CountedVOLUME Volume IntradayVolume;
run;
*Division for calculating normalized volume in approach 2;
proc sort data=Sampledata87_02_Mer out=Sampledata87_02_Mer;
by TRD_STCK_CD TRD_EVENT_DT;
run;
data Sampledata87_02_Mer;
do until(last.TRD_STCK_CD);
do until(last.TRD_EVENT_DT);
set Sampledata87_02_Mer;
by TRD_STCK_CD TRD_EVENT_DT;
if first.TRD_STCK_CD then
n=0;
if first.TRD_EVENT_DT then
n+1;
if n>1 then
do;
if not missing(IntradayVolume) then
adjusted_volume=divide(IntradayVolume,temp);
else call missing(adjusted_volume);
end;
if last.TRD_EVENT_DT then
temp=volume;
output;
end;
end;
drop temp n;
run;
proc sort data = Sampledata87_02_Mer;
by TRD_EVENT_DT TRD_STCK_CD;
run;
***********************************
STEP 4: REGRESSING DUMMY VARIABLES ON NORMALIZED VOLUME VARAIBLE USING AUTOMATICLLY GENERATING DUMMY VARIABLE METHOD
***********************************
;
* Regression with dummy variables in approach 1;
* Regressing dummy variables on normalized volume variable using calculated volume;
proc genmod data=Sampledata87_adjvol;
class TRD_EVENT_ROUFOR / param=effect;
model adjusted_volume = TRD_EVENT_ROUFOR / noscale;
ods select ParameterEstimates;
run;
* Regression with dummy variables in approach 2;
* Regressing dummy variables on normalized volume variable using merged table;
proc genmod data=Sampledata87_02_mer;
class TRD_EVENT_ROUFOR / param=effect;
model adjusted_volume = TRD_EVENT_ROUFOR / noscale;
ods select ParameterEstimates;
run;
Please help me to think this out. Thank you in advance for your help.
... View more