DATA Step, Macro, Functions and more

re: macro

Accepted Solution Solved
Reply
Regular Contributor
Posts: 229
Accepted Solution

re: macro

 

Hi...I am trying to run the proc contents procedure on a number of datasets. The list of names for the datasets are selected from List2. I only want to run the proc contents for each dataset name that is stored in the tablelist. I have attached part of the log output at the end of the code. Any suggestion why I am getting the error. Thanks.

 

proc sql noprint;
	select distinct
		count(tbl)
		into : countlist separated by ' '
	from work.List2
	where List2.ct > 0;
quit;

%put &countlist;

proc sql noprint;
	select distinct
		tbl
		into : tablelist separated by ' '
	from work.List2
	where List2.ct > 0;
quit;

%put &tablelist;
%macro list1;
%local i;
%do i=1 %to &countlist;
%let Dn=%scan(&tablelist,&i);
	LTable="&Dn";

proc contents data=sqldb.&LTable varnum details;
run;

%end;
%mend;
%list1;

Log output:

1         %list1;
NOTE: Line generated by the invoked macro "LIST1".
71          LTable="&Dn";
            ______
            180

ERROR 180-322: Statement is not valid or it is used out of proper order.

WARNING: Apparent symbolic reference LTABLE not resolved.
&LTable
WARNING: Apparent symbolic reference LTABLE not resolved.
NOTE 137-205: Line generated by the invoked macro "LIST1".
71          proc contents data=sqldb.&LTable varnum details; run;
                                     _
                                     22
ERROR 22-322: Syntax error, expecting one of the following: ;, (, CENTILES, DATA, DETAILS, DIR, DIRECTORY, FMTLEN, LIB, MEMTYPE, 


              MT, MTYPE, NODETAILS, NODS, NOPRINT, ORDER, OUT, OUT2, SHORT, VARNUM. 

Accepted Solutions
Solution
‎10-11-2017 03:28 PM
Super User
Posts: 19,815

Re: re: macro

1. You should use PROC DATASETS or SASHELP.VTABLE instead to process all instead of one at a time.

 

For your current code, you forgot the %LET in front of the line with the error.

 

 

 

 

View solution in original post


All Replies
Solution
‎10-11-2017 03:28 PM
Super User
Posts: 19,815

Re: re: macro

1. You should use PROC DATASETS or SASHELP.VTABLE instead to process all instead of one at a time.

 

For your current code, you forgot the %LET in front of the line with the error.

 

 

 

 

Regular Contributor
Posts: 229

Re: re: macro

Hi Reeza.....thanks for the quick response. The missing %let was the problem...thanks once again.

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 93 views
  • 0 likes
  • 2 in conversation