BookmarkSubscribeRSS Feed
ctisseuil
Fluorite | Level 6

Hi, 

I do not manage to get column names from my dataset using proc sql.

What's wrong in the following example code ?

 

data work.birthday;
  input @01 employee_id   6.
        @08 last_name     $10.
        @19 birthday      date7.;
  format employee_id   6.
         last_name     $10.
         birthday      date7.;
  datalines;
  1247 Garcia     04APR54
  1078 Gibson     23APR36
  1005 Knapp      06OCT38
  1024 Mueller    17JUN53
;
proc print data=work.birthday;
  title2 'SAS Data Set work.BIRTHDAY';
run;

proc sql;
select * into :charlist separated by ' '
from dictionary.columns
where libname="work" and memname="birthday" 
;
quit;

 

 

 

3 REPLIES 3
FreelanceReinh
Jade | Level 19

Hi @ctisseuil,

  1. Write "select name ..." instead of "select * ..."
  2. Specify libname and memname values in UPPER CASE in the WHERE clause.
Patrick
Opal | Level 21

And adding to @FreelanceReinh : The values for libname and memname are always uppercase

where libname="WORK" and memname="BIRTHDAY"

 

Tom
Super User Tom
Super User

Do you want the full list of problems? Or just the problems with the part that is trying to gather variable names?

Let's start with the last step:

 

proc sql;
select * into :charlist separated by ' '
from dictionary.columns
where libname="work" and memname="birthday" 
;
quit;

Issues:

  • Add the NOPRINT option to the PROC SQL so the names are not also printed to the output window.
  • Specify the actual value you want to put into the macro variable.  This would only select the variable NAME if that happens to be the first variable that would get selected by the * shortcut for all varaibles.
  • Values of LIBNAME and MEMNAME are always uppercase in the DICTIONARY.COLUMNS.
  • Do you care what order the names appear in the list?
  • You also need to protect in case VALIDVARNAME option is set to ANY.  That means some names might have spaces in them.  You can use the NLITERAL() function for example  Or use some other character as the separator in the list for values.
proc sql noprint;
select nliteral(name)
  into :charlist separated by ' '
  from dictionary.columns
  where libname="WORK" and memname="BIRTHDAY"
  order by varnum 
;
quit;

 

SAS Innovate 2025: Call for Content

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!

Submit your idea!

SAS Enterprise Guide vs. SAS Studio

What’s the difference between SAS Enterprise Guide and SAS Studio? How are they similar? Just ask SAS’ Danny Modlin.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 3 replies
  • 898 views
  • 0 likes
  • 4 in conversation