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.
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.