* sample data;
data stock_quote ;
format stock $3. date date9. quote 8.2;
informat date date9.;
input stock $ date quote;
datalines;
AAA 1JAN2007 1.20
BBB 1JAN2007 1.23
CCC 1JAN2007 2.21
AAA 2JAN2007 1.22
BBB 2JAN2007 1.24
CCC 2JAN2007 2.20
AAA 3JAN2007 1.29
BBB 3JAN2007 1.28
CCC 3JAN2007 2.18
AAA 4JAN2007 1.31
BBB 4JAN2007 1.27
CCC 4JAN2007 2.16
;
run;
* create cross product of stocks by date;
proc sql;
create table quotes as
select a.date, a.stock as stock1, b.stock as stock2, a.quote as quote1, b.quote as quote2
from stock_quote a, stock_quote b
where a.date = b.date
and a.stock > b.stock
order by a.stock, b.stock;
quit;
* compute pearson's correlation;
proc corr data = quotes outp=correlations noprint;
by stock1 stock2;
var quote1 quote2;
quit;
* display correlations > 0.9;
proc sql;
select stock1, stock2, quote1 as correlation
from correlations
where _type_='CORR'
and _name_='quote2'
and quote1 > 0.9; /* select only correlations > 0.9 */
quit;