У меня есть такой набор данных
data have;
do i = 1 to 1000;
y = ranuni(0);
x1 = y ** 2;
x2 = x1 ** 3;
x3 = x2 - x1/2;
output;
end;
run;
Я строю корреляционную матрицу так:
proc corr
data = have
out = correlation_matrix
(where = (_TYPE_ = "CORR"))
noprint;
run;
Я попытался вслух придумать какой-нибудь код, который мог бы достичь чего-то похожего на то, что я ищу, синтаксис или логика верны, но я пытаюсь описать, что я ищу
proc sort
data = correlation_matrix
by _NAME_;
run;
data _temp;
set correlation_matrix;
array col[*] _numeric_;
by _NAME_;
do i = 1 to dim(col);
if col(i) > 0.6 then do;
%let list = append(vname(col));
end;
run;
И из матрицы корреляции я ищу способ вернуть пары, которые имеют корреляцию 60% или выше некоторого порога, пары, которые я затем буду использовать для построения матриц графика рассеяния / гистограммы, подобных этой
proc contents;
data = high_correlation_pairs
out = contents
noprint;
run;
proc sort
data = contents
nodupkey;
by name;
run;
proc sql noprint;
select name INTO: highly_correlated_pairs
separated by " "
from contents
;
quit;
ODS GRAPHICS /
IMAGEMAP=OFF;
OPTIONS VALIDVARNAME=ANY;
PROC SGSCATTER
DATA=have;
TITLE "Scatter Plot Matrix";
FOOTNOTE;
MATRIX &highly_correlated_pairs
/
DIAGONAL=(HISTOGRAM )
START=TOPLEFT
NOLEGEND
;
RUN;
TITLE; FOOTNOTE;
Я просто не уверен, как выбрать переменные из матрицы, у которых есть пара с корреляцией более 60%, это может даже на NAME вернуть столбцы с corr более 60%