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.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.
Ready to level-up your skills? Choose your own adventure.