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

Hello I am new to SAS and am trying to figure out why my code is erroring out.

 

 

 

WARNING: Apparent symbolic reference BEGYR not resolved.
NOTE: Line generated by the invoked macro "YEARLY_BUILD".
264         data responses_&begyr.;   set outlib.responses_&begyr.;   IF value ^= '' THEN value = UPCASE(value);    ELSE value
                           _                               _
8                                                          The SAS System                               10:41 Monday, April 17, 2017

                           22                              200
                           200
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, (, /, ;, _DATA_, _LAST_, _NULL_. 

ERROR 200-322: The symbol is not recognized and will be ignored.

264      ! data responses_&begyr.;   set outlib.responses_&begyr.;   IF value ^= '' THEN value = UPCASE(value);    ELSE value
                                                           _
                                                           22
264      ! =UPCASE(value);   IF questionid = 85 THEN questiondescription =

1 ACCEPTED SOLUTION

Accepted Solutions
TheShark
Obsidian | Level 7

Without seeing the code around the error it looks like you're calling a macro with a variable inside. If that's the case you don't need the period after begyr.

 

 

Try this and let us know if you get further,

 data responses_&begyr;   set outlib.responses_&begyr;

View solution in original post

5 REPLIES 5
TheShark
Obsidian | Level 7

Without seeing the code around the error it looks like you're calling a macro with a variable inside. If that's the case you don't need the period after begyr.

 

 

Try this and let us know if you get further,

 data responses_&begyr;   set outlib.responses_&begyr;
Rsadiq
Calcite | Level 5

It still seems to be saying the same error even after taking out the period.

 

 

8                                                          The SAS System                               10:51 Monday, April 17, 2017

                           22                             200
                           200
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, (, /, ;, _DATA_, _LAST_, _NULL_. 

ERROR 200-322: The symbol is not recognized and will be ignored.

264      ! data responses_&begyr;   set outlib.responses_&begyr;   IF value ^= '' THEN value = UPCASE(value);    ELSE value
                                                          _
                                                          22
264      ! =UPCASE(value);   IF questionid = 85 THEN questiondescription =
WARNING: Apparent symbolic reference BEGYR not resolved.
ERROR: Libref OUTLIB is not assigned.

 

 

The code where the error seems to be appearing is


%let pgm = s300_MHR_ALL_Qtrs_Pull ;

%MACRO yearly_build;

 data responses_&begyr;
  set outlib.responses_&begyr;
  IF value ^= '' THEN value = UPCASE(value);
   ELSE value =UPCASE(value);
  IF questionid = 85 THEN questiondescription = 'When wearing your hearing aid, can you hear people speaking without them sounding mumbled?';
   ELSE questiondescription = questiondescription;
  resp_yr_qtr = "&begyr.";
 run;

TomKari
Onyx | Level 15

If the macro variable &begyr doesn't have a value, the statement

data responses_&begyr.;

is illegal because a SAS dataset name can't contain a &.

 

It's impossible for us to tell what &begyr should be, as that's business logic. However, suppose it should be 2016.

 

If you put the statement

 

%let begyr = 2016;

 

immediately after the %MACRO statement, your code will compile correctly. You need to figure out how this macro variable is supposed to be set.

 

Tom

TheShark
Obsidian | Level 7

Here is a snippet from one of my saved macros, when calling the macro and passing 'dataset', in your case, begyr, it should look similar to this,

 

/*Split Dataset by number of observations*/
/*Usage, %SPLIT (DATASETNAME,OBS) - Example %SPLIT (FINAL,100000)*/

%macro split(dataset,splitby);
 
data _null_;
	set &dataset nobs=num;

I'm calling the variable dataset by using &dataset within the macro. So yours would be like this,

 

/*Split Dataset by number of observations*/
/*Usage, %SPLIT (DATASETNAME,OBS) - Example %SPLIT (FINAL,100000)*/

%macro split(begyr,splitby);
 
data _null_;
	set &begyr nobs=num;

more stuff blah blah

end the macro
%mend split;

call the macro and assign 2016 to 'begyr'
%SPLIT (2016,100)
Tom
Super User Tom
Super User

The first message is the key one. The others are just the side effects from that.

WARNING: Apparent symbolic reference BEGYR not resolved.

You have not defined the macro variable BEGYR so you end up with a DATA statement that looks like:

 data responses_&begyr.;

Which is invalid since you cannot use & in a member name.

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

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
  • 5 replies
  • 8891 views
  • 0 likes
  • 4 in conversation