BookmarkSubscribeRSS Feed
JMarkW
Fluorite | Level 6
I need to a way to suppress the SAS message:

NOTE 49-169: The meaning of an identifier after a quoted string may change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended.

I'm working with a batch interface that processes hundreds of millions of records. One of the macro variables contains a string of client data that may contain single and/or double quotes. SAS generates millions of useless warning messages that wastes disk and valuable time in the processing window.

Does anyone know a SAS solution like a system option to suppress this message?

Related note: http://support.sas.com/kb/3/353.html
21 REPLIES 21
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
Correct your code to insert a blank character - that's the solution I've used, given the condition and odd coding technique that brings on the warning.

Scott Barry
SBBWorks, Inc.
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
From my experience, it's better to address the "symptom" now then to have a real "problem" (as in error condition) in a later SAS release.

Scott Barry
SBBWorks, Inc.
JMarkW
Fluorite | Level 6
This is not code that SAS is complaining about, it is the data in a variable.

Unfortunately if SAS can not handle System of Record variables with quotes in them, the likely outcome will be to eliminate SAS as the language used. Message was edited by: JMarkW
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
Curiously - let's focus on the error at hand and leave the bigger fish to mgmt.

I have seen this error several times and each instance is due to a missing blank character in a SAS program between two SAS programming elements.

You will need to share your SAS-generated log output (completely intact) where the error exists to convince me otherwise.

Scott Barry
SBBWorks, Inc.
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
My suggestion is that you first review the complete SAS log, interrogating the SAS program syntax as revealed in the SAS log. Determine how exactly that code is constructed (or generated by other code - I've seen this too). And then if you still think there's a syntax-checking problem, post a reply with the SAS log output pasted in your reply with lines leading up to the error and also the error condition itself. If the code is contained within a macro, you'll want to explain as best as possible how the processing flows leading up to the error.

So, first, recommend some desk-checking while reading the error message followed by a post-reply with SAS code/log information, if needed.

Scott Barry
SBBWorks, Inc.
JMarkW
Fluorite | Level 6
This is highly restricted data and code. No examples

I saw a note that this maybe fixed in verison 9.2. I wonder if it was. I'm on 9.1.3.
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
If you believe that the message is being generated incorrectly and you SAS code syntax is correct, by all means, open a SAS support track to report the condition. Otherwise, as I mentioned, consider the warning in this release to be a "courtesy message", and treat the message as an indication that you might have some questionable code syntax and in some future release SAS may not be so forgiving - like I stated, "warning" today, "error" tomorrow (maybe).

Good luck with your "highly restricted" SAS code, regardless.

Scott Barry
SBBWorks, Inc.
ballardw
Super User
> This is highly restricted data and code. No
> examples
>
> I saw a note that this maybe fixed in verison 9.2.
> I wonder if it was. I'm on 9.1.3.

Probably not.

I have code that generated the same error message but the cause was not the data. I was writing a message to the log where I had a condition of interest about variables that were named like var1 through var50. The put statement looked something like this:
put "Condition was raised by var"i ;

Which would place a note in the log that looked like what I wanted:
Condition was raised by var23
instead of the 'Condition was raised by var 23' that would be generated by
put "Condition was raised by var" i ;

The lack of a space between the var" and the i was the source of the message.
In my case the solution was to create a string variable by concatenating "var" and i and modifying the code to look like:
put "Condition was raised by " string;

Warning message goes away.

I would look for any PUT or similar instructions combining fixed text and a variable. All you may need to do is place a space between the end of the quoted string and the variable.
pawright
Fluorite | Level 6
I have a similar problem, but it also seems to kill data step compilation. I've added trailing spaces wherever I see them, but still get the messages. Unfortunately, it is hard to see the spaces with this gadget's font:

1675 %put GENERATING ATTRIB STATEMENT AND ARGUMENTS: ;
1676 data
1677 _NULL_ / debug
1678 ;
1679 SET
1680 METADATA.IFSS_VARIABLES (
1681 where = (IFSS_VAR EQ 1)
1682 )
1683 end = end_of_dataset
1684 ;
1685 file
1686 'XXXXX/attrib_statement.sas'
1687 new
1688 ;
1689 name = upcase(strip(name)) ;
1690 name_len = length(strip(name)) ;
1691 label_len = length(strip(label)) ;
1692 length_str = strip(put(length,3.0)) ;
1693 length_str_len = length(strip(length_str)) ;
1694 format = strip(format) ;
1695 format_name_len = length(strip(format)) ;
1696 if (_N_ EQ 1) then put @1 'attrib' ;
1697 put @4 name $VARYING. name_len @ ;
1698 if (type EQ 'char' ) then put @40 'length=$' @ ;
1699 else put @40 'length=' @ ;
1700 put length_str $VARYING. length_str_len @ ;
1701 if (format NE ' ' ) then do ;

-----------------
49
NOTE 49-169: The meaning of an identifier after a quoted string may change in a future SAS release. Inserting white space between a quoted
string and the succeeding identifier is recommended.

1702 put @54 'format=' @ ;
1703 if (type EQ 'char' ) then put '$' @ ;
1704 put format $VARYING. format_name_len @ ;
1705 end ;
1706 put @96 "label='" label $VARYING. label_len "'" ;
1707 if (end_of_dataset) then put @1 ';' ;
1708 run ;
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
The message is not an ERROR but is a NOTE -- so I doubt that it is killing your DATA step compilation.

Suggest you add the line below to improve the diagnostics output generated to the log for desk-checking:

OPTIONS SOURCE SOURCE2 MACROGEN SYMBOLGEN MLOGIC;

Another suggestion is to correct the code syntax that is generating the note so it does not occur again.

Scott Barry
SBBWorks, Inc.
pawright
Fluorite | Level 6
Thanks, Scott. I was hoping to get your input.

Yes, I would like to eliminate the situation by adding the space. Unfortunately, I cannot find where I should put the space!
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
You will need to figure this one out yourself by using various SAS code commenting techniques to eliminate pieces of your program and determine how SAS responds with different / same behavior. Setting OPTIONS OBS=0; or using a well-placed STOP; statement may help speed the debugging process.

Scott Barry
SBBWorks, Inc.
Peter_C
Rhodochrosite | Level 12
look for places where you quote quotes as you seek to put quotes in the generated statements. The line I spot is log line 1706
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
To OP for consideration:

1) What SAS Version and OS environment and is SAS local or remote server accessed?
2) Suggest you review SAS.COM support website references to the NOTE 49-169 -- possibly using the Google advanced search argument: +"49-169" site:sas.com and you will see some discussion items.

Using SAS 9.1.3 SP4 on Windows, I pulled out possible contributing code of yours and created a stub DATA step -- I was unable to re-create your symptom.

Scott Barry

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!

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.

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
  • 21 replies
  • 23204 views
  • 8 likes
  • 10 in conversation