Search code examples
sasproc-sql

SAS Apparent symbolic reference when there is a n ampersand in data


This appears to be an old problem but I haven't seen an answer that fully addresses it. Totally possible I just missed it.

I'm consuming data that has a text field called fullDescription that contains a string like (made up but fits the pattern): "00001234456 Wells Fargo DR FM AT&T PYMT 00987600"

I'm attempting to parse the data and dig out tidbits like "Wells Fargo" and "AT&T". However, when I manipulate "AT&T" SAS tries to read it as "AT" then the variable value for T. It stopped erroring (but still warns) when I instituted this line:

%LET description = %SYSFUNC(COMPRESS(%BQUOTE(&&fullDescription&row),'',P));

This, at least, returns "00001234456 Wells Fargo DR FM ATT PYMT 00987600" (missing ampersand) but still throws:

WARNING: Apparent symbolic reference T not resolved

I haven't figured out a way to prevent the warning. Is there a way to leave the ampersand in but not treat it as a variable? If that's not possible, can I cleanse it once and not get the error?


Solution

  • You are almost there, just add %nrstr() function when define the macro variable fullDescription.

    data _null_;
      call symputx('fullDescription','%nrstr(00001234456 Wells Fargo DR FM AT&T PYMT 00987600)');
    run;
    
    %LET description = %SYSFUNC(COMPRESS(%bquote(&fullDescription),'',P));
    %put &=description;
    

    This makes no warning anymore.