/* 2018.03.12. SAS GRAPH */ /* SASHELP CLASS */ proc print data=sashelp.class; run; data xclass; input nem $ 1. kor korcsop mag kg; cards; 1 15 2 154 58 2 16 3 154 53 1 15 2 160 60 1 15 2 153 57 1 14 2 159 58 2 15 2 150 49 2 16 3 162 60 1 16 3 168 64 2 17 3 170 59 2 13 1 149 53 2 14 2 152 53 1 15 2 170 70 1 14 2 174 72 1 13 1 168 67 2 12 1 146 46 1 12 1 145 47 2 12 1 150 50 2 12 1 149 50 1 13 1 151 54 2 15 2 162 56 1 16 3 177 74 2 14 2 160 60 ; run; /* valtozok kepzese */ data xclass; set xclass; if nem="1" then nem_csop="Ferfi"; else nem_csop="No"; if korcsop=1 then kcs="12-13 év"; else if korcsop=2 then kcs="14-15 év"; else kcs="16-17 év"; run; /***************************** * Tasks \ Statistics \ Data Exploration a ket diszkret valtozo eloszlasa mozaic ploton */ options validvarname=any; ods noproctitle; ods graphics / imagemap=off; proc freq data=WORK.XCLASS; ods select MosaicPlot; tables nem_csop*kcs / plots=mosaicplot(square); run; ods graphics / imagemap=on; /*********************************** * Folytonos valtozok eloszlasa */ options validvarname=any; ods noproctitle; ods graphics / imagemap=on; /* Scatter plot matrix macro */ %macro scatterPlotMatrix(xVars=, title=, groupVar=); proc sgscatter data=WORK.XCLASS; matrix &xVars / %if(&groupVar ne %str()) %then %do; group=&groupVar legend=(sortorder=ascending) %end; diagonal=(histogram kernel normal); title &title; run; title; %mend scatterPlotMatrix; /* Pairwise scatter plot macro */ %macro pairwiseScatterplot(xVar=, yVar=, title=, groupVar=); proc sgscatter data=WORK.XCLASS; plot (&yVar)*(&xVar) / %if(&groupVar ne %str()) %then %do; group=&groupVar legend=(sortorder=ascending) %end; ; title &title; run; title; %mend pairwiseScatterplot; /* Histogram and box plot template */ proc template; define statgraph histobox; dynamic AVAR; begingraph; entrytitle "Distribution of " eval(catq('q', colname(AVAR))); layout lattice / rows=2 columndatarange=union rowgutter=0 rowweights=(0.75 0.25); layout overlay / yaxisopts=(offsetmax=0.1) xaxisopts=(display=none); layout gridded / columns=2 border=on autoalign=(topright topleft); %let _lft = halign=left; %let _rgt = halign=right; entry &_lft "Mean"; entry &_rgt eval(strip(put(mean(AVAR), best.))); entry &_lft "Std Dev"; entry &_rgt eval(strip(put(stddev(AVAR), best.))); entry &_lft "N"; entry &_rgt eval(strip(put(n(AVAR), best.))); entry &_lft "Min"; entry &_rgt eval(strip(put(min(AVAR), best.))); entry &_lft "Max"; entry &_rgt eval(strip(put(max(AVAR), best.))); endlayout; histogram AVAR /; endlayout; layout overlay /; BoxPlot Y=AVAR / orient=horizontal; endlayout; endlayout; endgraph; end; run; %scatterPlotMatrix(xVars=kor mag kg, title="Scatter plot matrix", groupVar=); %pairwiseScatterplot(xVar=mag, yVar=kor, title="kor vs mag"); %pairwiseScatterplot(xVar=kg, yVar=kor, title="kor vs kg"); %pairwiseScatterplot(xVar=kor, yVar=mag, title="mag vs kor"); %pairwiseScatterplot(xVar=kg, yVar=mag, title="mag vs kg"); %pairwiseScatterplot(xVar=kor, yVar=kg, title="kg vs kor"); %pairwiseScatterplot(xVar=mag, yVar=kg, title="kg vs mag"); proc sgrender data=WORK.XCLASS template=histobox; dynamic AVAR='kor'; run; proc sgrender data=WORK.XCLASS template=histobox; dynamic AVAR='mag'; run; proc sgrender data=WORK.XCLASS template=histobox; dynamic AVAR='kg'; run; /******************************* * Folytonos valtozo eloszlasa diszkret valtozo csoportjaiban */ options validvarname=any; ods noproctitle; ods graphics / imagemap=on; /* Histogram (one-way or two-way) */ %macro DEHisto(data=, avar=, classVar=); %local i numAVars numCVars cVar cVar1 cVar2; %let numAVars=%Sysfunc(countw(%str(&avar), %str( ), %str(q))); %let numCVars=%Sysfunc(countw(%str(&classVar), %str( ), %str(q))); %if(&numAVars>0 & &numCVars>0) %then %do; %if(&numCVars=1) %then %do; %let cVar=%scan(%str(&classVar), 1, %str( ), %str(q)); proc sql noprint; select count(distinct &cVar) into :nrows from &data; quit; /* One-way histogram */ proc univariate data=&data noprint; var &avar; class &cVar; histogram &avar / nrows=&nrows normal(noprint) kernel; inset mean std n / position=ne; run; %end; %else %do; /* One-way histogram of each class variable */ %do i=1 %to %eval(&numCVars); %let cVar=%scan(%str(&classVar), &i, %str( ), %str(q)); proc sql noprint; select count(distinct &cVar) into :nrows from &data; quit; proc univariate data=&data noprint; var &avar; class &cVar; histogram &avar / nrows=&nrows normal(noprint) kernel; inset mean std n / position=ne; run; %end; /* Two-way histogram */ %let cVar1=%scan(%str(&classVar), 1, %str( ), %str(q)); %let cVar2=%scan(%str(&classVar), 2, %str( ), %str(q)); proc sql noprint; select count(distinct &cVar1) into :nrows from &data; quit; proc sql noprint; select count(distinct &cVar2) into :ncols from &data; quit; proc univariate data=&data noprint; var &avar; class &cVar1 &cVar2; histogram &avar / nrows=&nrows ncols=&ncols normal(noprint) kernel; inset mean std n / position=ne; run; %end; %end; %mend DEHisto; %DEHisto(data=WORK.XCLASS, avar=kg, classVar=kcs); proc sort data=WORK.XCLASS out=WORK.TempSorted4877; by kcs; run; proc boxplot data=WORK.TempSorted4877; plot (kg)*kcs / boxstyle=schematic; run; proc datasets library=WORK noprint; delete TempSorted4877; run; /******************************** * Tasks \ Statistics \ Summary statistics * mag ~ kcs */ ods noproctitle; ods graphics / imagemap=on; proc means data=WORK.XCLASS chartype mean std min max median n nmiss stderr vardef=df clm alpha=0.05 skewness kurtosis p5 q1 q3 p95 qmethod=os; var mag; class kcs; run; proc univariate data=WORK.XCLASS vardef=df noprint; var mag; class kcs; histogram mag / normal(noprint) kernel; inset mean std min max median n nmiss stderr skewness kurtosis p5 q1 q3 p95 / position=ne; run; proc sort data=WORK.XCLASS out=WORK.TempSorted2236; by kcs; run; proc boxplot data=WORK.TempSorted2236; plot (mag)*kcs / boxstyle=schematic; inset mean stddev min max nobs / position=nw; run; proc datasets library=WORK noprint; delete TempSorted2236; run; /********************************* * Tasks \ Statistics \ Distribution analysis * normalis (vagy mas) eloszlasra valo illeszkedes */ ods noproctitle; ods graphics / imagemap=on; /*** Exploring Data ***/ proc univariate data=WORK.XCLASS; ods select Histogram; var mag; class nem_csop; histogram mag / normal kernel; inset n mean median std skewness kurtosis / position=ne; run; proc univariate data=WORK.XCLASS normal; ods select Histogram GoodnessOfFit QQPlot; var mag; /*** Checking for Normality ***/ histogram mag / normal(mu=est sigma=est); qqplot mag / normal(mu=est sigma=est); inset normaltest pnormal mean median std skewness kurtosis n / position=nw; run; /********************************* * Tasks \ Graph \ Bar chart * freq ~ kcs * nem_csop * Gyakorisagi oszlopdiagram */ ods graphics / reset width=6.4in height=4.8in imagemap; proc sgplot data=WORK.XCLASS; title height=14pt "Gyakorisági oszlopdiagram"; footnote2 justify=left height=12pt "2018. március 12."; vbar kcs / group=nem_csop groupdisplay=cluster datalabel; yaxis grid; run; ods graphics / reset; title; footnote2; /******************************* * Átlag-szórás ábra * Tömeg átlag +/- SE csoportonként * kg ~ kcs*nem_csop */ ods graphics / reset width=6.4in height=4.8in imagemap; proc sgplot data=WORK.XCLASS; title height=14pt "Testtömeg átlag +/- SE csoportonként"; footnote2 justify=left height=12pt "2018. március 12."; vbar kcs / response=kg group=nem_csop groupdisplay=cluster datalabel limitstat=stderr stat=mean; yaxis grid; run; ods graphics / reset; title; footnote2;