Hi @sai_prasad What is the question or perhaps a problem you are facing?
Hi, I am looking for a sas macros which will automatically does EDA like univariate analysis,Bivariate Analysis and Frequency plots for all the variables in the dataset .Please kindly suggest if you have any such available macros
%let path = D:\EDA\nnnn;
options symbolgen mprint;
%MACRO LEVELS(VAR=);
proc sql;
INSERT INTO dummytable
select "&var." as variable,count(distinct &var) as levels from &dsn.;
quit;
%mend Levels;
%macro freq_char(ds=,var=);
ods exclude all;
Proc freq data=&ds ;
table &var / missing nocum out=&var;
run;
ods exclude none;
proc export data=&var
outfile="&path\categorical_freq.xlsx" dbms=xlsx replace;
sheet="&var.";
run;
%mend freq_char;
%macro variable_analysis(dsn=);
proc contents data=&dsn out=variables;
run;
data variables(keep=name type);
set variables;
run;
data temp;
input variable $100. nlevels;
run;
PROC SQL;
CREATE TABLE DUMMYTABLE LIKE temp;
QUIT;
Data _null_;
Set variables;
Call Execute('%levels(var='||name||')');
Run;
proc sql;
create table var_analysis as
Select a.*,b.nlevels,max(b.nlevels) as total_levels from variables as a left join dummytable as b on a.name=b.variable;
quit;
data var_analysis;
set var_analysis;
level_percent=nlevels/total_levels;
if type=2 then variable_type="categorical";
else if type=1 and level_percent<0.01 then variable_type="categorical";
else variable_type="continous";
run;
ods output summary=nsummary;
proc means data=&dsn n nmiss min max mean std p1 p5 p10 p25 p50 p90 p95 p99 qrange skewness kurtosis stackods;
var _numeric_;
run;
data var_continious;
set var_analysis;
where variable_type="continous";
run;
proc sql;
create table cont_ana as select a.name,a.nlevels,b.* from var_continious as a left join nsummary as b on a.name=b.variable;
quit;
proc export data=var_analysis
outfile="&path\VariableAnalysis.xlsx" dbms=xlsx replace;
sheet="Variable_analysis";
run;
proc export data=nsummary
outfile="&path\VariableAnalysis.xlsx" dbms=xlsx replace;
sheet="Numeric_summary";
run;
proc export data=cont_ana
outfile="&path\VariableAnalysis.xlsx" dbms=xlsx replace;
sheet="Continious_summary";
run;
data var_cat;
set var_analysis;
where variable_type="categorical" and nlevels<500000;
run;
data _null_;
set var_cat;
call execute('%freq_char(ds=&dsn,var='||name||')');
run;
ods exclude all;
proc corr data=&dsn rank noprob;
ods output PearsonCorr=correlation;
run;
ods exclude none;
proc export data=correlation
outfile="&path\VariableAnalysis.xlsx" dbms=xlsx replace;
sheet="Numeric_correlation";
run;
ods excel file="&path\Correlation_plot.xlsx" ;
ods excel options(sheet_interval = 'proc' sheet_name = "Correlation_plot");
ods graphics on;
proc corr data=assignment plots(maxpoints=1000000)=matrix(histogram) ;
ods select matrixplot;
run;
ods excel close;
%mend variable_analysis;
%variable_analysis(dsn=sashelp.class);
data _null_;
length status $ 15.;
set t;
if sum(today(),-datepart(update_time)) eq 0 and sum(-timepart(update_time),time())/60 ge 30 then status=1;
else status=0;;
call symputx('db_chk',status,'g');
put _all_;
run;
%end;
%else
%do;
%global db_chk;
%let db_chk=0;
%end;
%put &db_chk.;
%mend chkdb_status;
%chkdb_status;
Data _Null_;
length
%do i=1 %to 12;
data _null_;
call sleep(60,30);
run;
%chkdb_status;
%if &db_chk.=1 %then %goto action;
%end;
%action:
%if &db_chk.=1 %then %do;
%sysexec("&path\&fname.bat");
%end;
%end;
%mend;
%test;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.