I'm trying to pass the string and gender="F" and tenure in ("01","02"). In this example the macro does nouthing. Something about passing the string is causing an error. An error message does not occur the first time I run the script to see an error message I have to run just the last line with run selection a second time. I can run
%turnoverTable(faculty, %str() );
%turnoverTable(faculty, %str(and tenure in ('01','02')) );
but not
%turnoverTable(faculty, %str(and gender="F" and tenure in ("01","02") );
%macro turnoverTable(tableName, additionalWhereClause);
/*do nouthing*/
%mend;
/*these work*/
%turnoverTable(faculty, %str() );
%turnoverTable(faculty, %str(and tenure in ('01','02')) );
/*this causes the error*/
/*I run it a second time to see the log blow up to see the erorr you have to run this line again using run selection*/
%turnoverTable(faculty, %str(and gender="F" and tenure in ("01","02") );
;*';*";*/;quit;run;
2 OPTIONS PAGENO=MIN;
3 %LET _CLIENTTASKLABEL='Program';
4 %LET _CLIENTPROCESSFLOWNAME='Process Flow';
5 %LET _CLIENTPROJECTPATH='';
6 %LET _CLIENTPROJECTPATHHOST='';
7 %LET _CLIENTPROJECTNAME='';
8 %LET _SASPROGRAMFILE='';
9 %LET _SASPROGRAMFILEHOST='';
10
11 ODS _ALL_ CLOSE;
12 OPTIONS DEV=PNG;
_________________________________
49
NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space
between a quoted string and the succeeding identifier is recommended.
13 GOPTIONS XPIXELS=0 YPIXELS=0;
14 FILENAME EGSR TEMP;
15 ODS tagsets.sasreport13(ID=EGSR) FILE=EGSR
16 STYLE=VCU_Report_Printing
17 STYLESHEET=(URL="redacted")
18 NOGTITLE
19 NOGFOOTNOTE
20 GPATH=&sasworklocation
21 ENCODING=UTF8
NOTE: Line generated by the macro variable "SASWORKLOCATION".
21 ") NOGTITLE NOGFOOTNOTE
21 ! GPATH="/saswork/SAS_workF1AB0000291E_redacted/SAS_work29A50000291E_redacted/"
_____________________________________
Unbalanced ()
%turnoverTable(faculty, %str(and gender="F" and tenure in ("01","02") );
has three ( and only two ) the second ) closes the %str function so you do not have a close for the parameter list.
%turnoverTable(faculty, %str(and gender="F" and tenure in ("01","02") ) );
The editor should have a find matching parentheses function
Unbalanced ()
%turnoverTable(faculty, %str(and gender="F" and tenure in ("01","02") );
has three ( and only two ) the second ) closes the %str function so you do not have a close for the parameter list.
%turnoverTable(faculty, %str(and gender="F" and tenure in ("01","02") ) );
The editor should have a find matching parentheses function
Thanks, Ballardw oddly the editor did not catch the unbalanced parameters. This solved the issue though.
@DavidPhillips2 wrote:
Thanks, Ballardw oddly the editor did not catch the unbalanced parameters. This solved the issue though.
It isn't an automatic function. You place the cursor on a ( and then with the proper key it should find the match. In the SAS Display Manger that is Ctrl+( or Ctrl+) keys. Hold Ctrl and press either of the ( or ) and the cursor moves to the matching key (and back, doesn't matter which of the () that you use). If it doesn't move then there isn't a match.
Because of the basic approach SAS has to code and especially with the macro language there can't really be a syntax check prior to submission for some forms of missmatched () and/or quotes.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.