|
proc format;
value $TckName
'^DJI'='Dow Jones'
'^IXIC'='NASDAQ'
'000001.SS'='Shanghai'
'399001.SZ'='Shenzhen'
;
run;
%macro ReadStockData(Ticker, FromDate, ToDate);
%local ImpNum;
%let Ticker=%sysfunc(upcase(&Ticker));
/** Add a proxyserver= option here if you need to run this from behind a firewall **/
FileName YaHoo url "http://ichart.finance.yahoo.com/table.csv?s=&Ticker";
data Temp;
label Index_Name='Index Name'
Date='Date'
Open='Open'
High='High'
Low='Low'
Close='Close'
Volume='Volume'
Adj_Close='Adjusted Close'
;
attrib
Index_Name length=$11
Date length=8 informat=yymmdd10. format=mmddyy10.
High Low Close Volume Adj_Close length=8 format=best25.
;
Index_Name=put("&Ticker",$TckName.);
infile YaHoo dlm=',' missover firstobs=2 dsd ;
/** The ?? modifier suppresses error/notes when reading invalid data **/
input
Date : ?? yymmdd10.
Open : ?? comma15.
High : ?? comma15.
Low : ?? comma15.
Close : ?? comma15.
Volume : ?? comma15.
Adj_Close : ?? comma15.
;
if &FromDate <= Date <= &ToDate and Adj_Close>0 then output;
run;
FileName YaHoo clear;
proc sql noprint;
select count(*) into :ImpNum
from Temp;
quit;
%if %sysevalf(&ImpNum >0) %then %do;
proc sort data=Temp;
by Date;
run;
data Temp (drop=PreClose);
label Index_Name='Index Name'
Year='Year'
Month='Month'
Date="Date"
Day='Week Day'
Adj_Close='Adjusted Close Price'
Return='Return'
;
format Date mmddyy10. Adj_Close comma15.4 Return percentn9.2;
;
set Temp (keep=Index_Name Date Adj_Close);
retain PreClose 0;
Year=Year(Date);
Month=Month(Date);
Day=strip(put(Date,downame.));
if _n_=1 then do;
PreClose=Adj_Close;
Return=.;
end;
else do;
Return=(Adj_Close-PreClose)/PreClose;
PreClose=Adj_Close;
end;
if Return ne . then output;
run;
proc append base = Commbined_Stock_Data
data = Temp;
run;
quit;
%end;
proc sql;
drop table Temp;
quit;
%mend ReadStockData;
%ReadStockData(000001.SS, '01JAN2015'd, '16MAY2016'd)
%ReadStockData(399001.SZ, '01JAN2015'd, '16MAY2016'd)
%ReadStockData(^DJI, '01JAN2015'd, '16MAY2016'd)
%ReadStockData(^IXIC,'01JAN2015'd, '16MAY2016'd) |
|