Hi Jeff, Thanks a lot for again for you help . When adding the proc corr numeric matrix code , I found that it is only adding star instead of two for significant . It is considering for example adding two star only when P- value <0.001 and one if it is equal to 0.001 which is not appropriate. If you look at the p-value in numeric matrix and the stars in the heat map , you see it is not the same significant., for example Height- RB vs Height- BRC. I tested with other data and it is the same. Can you please , help with fixing the ENTRYFOOTNOTE , please data work.Almtarfi_2; input Cult Biomass_BRC Biomass_RB yield_BRC Yield_RB Height_BRC Heigh_RB; CARDS; 1930 62.125 75.255 2563.16 2196.06 123.075 142.8 1933 60.62 77.91 2396.49 1965.79 106.233 124.325 1935 51.275 77.2 2317.14 2490.56 114.75 137.25 1940 63.31 73.025 2738.19 2888.38 142.85 169.5 ; run; proc format; value pvaldots 0-<0.0001 = '***' 0.0001-<0.001 = '**' 0.001-<0.05 = '*' 0.05-high =' ' other = ' '; run; * for P <0.05 and and ** for P <0.001 , *** for P <0.0001, and nothing when P > 0.05; /*Code below by Chris Hemedinger, found on the SAS blogs*/ ods trace off; /* Prepare the correlations coeff matrix: Pearson's r method */ %macro prepCorrData(in=,out=); /* Run corr matrix for input data, all numeric vars */ ods select none; ods noresults; ods output PearsonCorr=blah; proc corr data=&in. pearson outp=work._tmpCorr vardef=df; run; ods results; ods select all; proc sql noprint; select variable into :vlist separated by '|' from blah; quit; PROC CORR DATA=work.Almtarfi_2; VAR Cult Biomass_BRC Biomass_RB yield_BRC Yield_RB Height_BRC Heigh_RB; WITH Cult Biomass_BRC Biomass_RB yield_BRC Yield_RB Height_BRC Heigh_RB; RUN; /* prep data for heat map */ data &out.; keep x y r p; format p pvaldots.; set blah (rename=(variable=_name_)); *set work._tmpCorr(where=(_TYPE_="CORR")); array v{*} %do i = 1 %to %sysfunc(countw(%superq(vlist),|)); %scan(%superq(vlist),&i,|) %end;; array pval{*} %do i = 1 %to %sysfunc(countw(%superq(vlist),|)); p%scan(%superq(vlist),&i,|) %end;; x = _NAME_; do i = dim(v) to 1 by -1; y = vname(v(i)); r = v(i); p = pval(i); /* creates a lower triangular matrix */ if (i<_n_) then do; r=.;p=.; end; output; end; run; proc datasets lib=work nolist nowarn; delete _tmpcorr; quit; %mend; /* Create a heat map implementation of a correlation matrix */ ods path work.mystore(update) sashelp.tmplmst(read); proc template; define statgraph corrHeatmap; dynamic _Title; begingraph; entrytitle _Title; entryfootnote halign=left '*: P <0.05;**: P <0.001;***: P <0.0001;Blank: P > 0.05' / textattrs=(size=10pt); rangeattrmap name='map'; /* select a series of colors that represent a "diverging" */ /* range of values: stronger on the ends, weaker in middle */ /* Get ideas from http://colorbrewer.org */ range -1 - 1 / rangecolormodel=(cxD8B365 cxF5F5F5 cx5AB4AC); endrangeattrmap; rangeattrvar var=r attrvar=r attrmap='map'; layout overlay / xaxisopts=(display=(line ticks tickvalues)) yaxisopts=(display=(line ticks tickvalues)); heatmapparm x = x y = y colorresponse = r / xbinaxis=false ybinaxis=false name = "heatmap" display=all; textplot x=x y=y text=p / textattrs=(size=14pt); continuouslegend "heatmap" / orient = vertical location = outside title="Pearson Correlation"; endlayout; endgraph; end; run; /* Build the graphs */ ods graphics /height=600 width=800 imagemap; %prepCorrData(in=work.Almtarfi_2,out=work.Almtarfi_r); proc sgrender data=work.Almtarfi_r template=corrHeatmap; dynamic _title="Correlation matrix for all variables"; run;
... View more