DATA Step, Macro, Functions and more

How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

Reply
Contributor
Posts: 55

How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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
Super Contributor
Super Contributor
Posts: 3,174

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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.
Super Contributor
Super Contributor
Posts: 3,174

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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.
Contributor
Posts: 55

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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
Super Contributor
Super Contributor
Posts: 3,174

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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.
Super Contributor
Super Contributor
Posts: 3,174

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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.
Contributor
Posts: 55

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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.
Super Contributor
Super Contributor
Posts: 3,174

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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.
Super User
Posts: 10,538

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

> 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.
New Contributor
Posts: 4

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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 ;
Super Contributor
Super Contributor
Posts: 3,174

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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.
New Contributor
Posts: 4

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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!
Super Contributor
Super Contributor
Posts: 3,174

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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.
Valued Guide
Posts: 2,175

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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
Super Contributor
Super Contributor
Posts: 3,174

Re: How to suppress: NOTE 49-169: The meaning of an identifier after a quoted..

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
Ask a Question
Discussion stats
  • 19 replies
  • 10496 views
  • 1 like
  • 8 in conversation