BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
farrukh
Calcite | Level 5

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

1 ACCEPTED SOLUTION

Accepted Solutions
error_prone
Barite | Level 11

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;

View solution in original post

3 REPLIES 3
RW9
Diamond | Level 26 RW9
Diamond | Level 26

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;
error_prone
Barite | Level 11

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;
Astounding
PROC Star

The simplest possibility of all:  remove the VAR statement from PROC MEANS.  The default action is to process all numeric variables.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 1653 views
  • 1 like
  • 4 in conversation