Hi,
I wanted to run data audit( descriptive checks using either proc means/summary), where i want to automate the process.
I had a data set, executed Proc Contents and segregated data for numeric and character variables. I am stuck on how to pass the variable name to Proc means. Please help
You can extract the variable names form sashelp.vcolum and save them in a macro variable and use that variable in proc means:
proc sql noprint;
select Name
into :num_vars separated by " "
from sashelp.vcolumn
where LIBNAME = "SASHELP" and MemName = "CLASS" and lowcase(Type) = "num"
;
select Name
into :char_vars separated by " "
from sashelp.vcolumn
where LIBNAME = "SASHELP" and MemName = "CLASS" and lowcase(Type) = "char" and lowcase(Name) ^= "name"
;
quit;
%put &num_vars;
%put &char_vars;
proc means data=sashelp.class mean;
class &char_vars;
var &num_vars;
run;
You may want to provide specific examplpes - code/test data (form of a datastep). There are of course many ways to address a problem, but probably the simplest in this case is to forget getting lists of variables and do:
proc means...; var _numeric_; ... run;
There is also a _character_ version. Basically that means a list of all numeric or character variables.
If its more complicated then maybe call execute:
data _null_; set sashelp.vcolumn (where=(libname="WORK" and memname="ABC")); if type="char" then call execute('proc freq...;'); else call execute('proc means...;'); run;
You can extract the variable names form sashelp.vcolum and save them in a macro variable and use that variable in proc means:
proc sql noprint;
select Name
into :num_vars separated by " "
from sashelp.vcolumn
where LIBNAME = "SASHELP" and MemName = "CLASS" and lowcase(Type) = "num"
;
select Name
into :char_vars separated by " "
from sashelp.vcolumn
where LIBNAME = "SASHELP" and MemName = "CLASS" and lowcase(Type) = "char" and lowcase(Name) ^= "name"
;
quit;
%put &num_vars;
%put &char_vars;
proc means data=sashelp.class mean;
class &char_vars;
var &num_vars;
run;
The simplest possibility of all: remove the VAR statement from PROC MEANS. The default action is to process all numeric variables.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.