Sample 43043: Hiding special characters within an indirect macro variable reference
A macro quoting function is needed to mask special characters that may be
contained within a macro variable's value. When dealing with indirect
referencing (when a macro variable is in the form of &&x&i) it can get
a become a little difficult.
%SUPERQ masks all special characters and mnemonic operators at macro
execution but prevents further resolution of the value. This function
insures that all special characters are masked. When using this function
the ampersand is not to be used when referencing the macro variable.
This sample demonstrates how to use %SUPERQ with a macro variable that is
referenced indirectly.
These sample files and code examples are provided by SAS Institute
Inc. "as is" without warranty of any kind, either express or implied, including
but not limited to the implied warranties of merchantability and fitness for a
particular purpose. Recipients acknowledge and agree that SAS Institute shall
not be liable for any damages whatsoever arising out of their use of this material.
In addition, SAS Institute will provide no support for the materials contained herein.
/** In this first step a different macro variable is created for each
observation. Notice that CALL SYMPUTX is used that was new starting
with SAS 9.0. **/
data _null_;
input department $;
call symputx('val'||trim(left(_n_)),department);
cards;
Testing
R&D
TS
;
/** This macro uses indirect referencing to resolve the macro variables **/
%macro test;
%do i=1 %to 3;
/**Produces a warning on 2nd macro variable due to the &D**/
%put &&val&i;
/**Does not produce a warning on 2nd macro variable**/
%put %superq(val&i);
%end;
%mend test;
%test
These sample files and code examples are provided by SAS Institute
Inc. "as is" without warranty of any kind, either express or implied, including
but not limited to the implied warranties of merchantability and fitness for a
particular purpose. Recipients acknowledge and agree that SAS Institute shall
not be liable for any damages whatsoever arising out of their use of this material.
In addition, SAS Institute will provide no support for the materials contained herein.
/** Results from the log **/
Testing
Testing
WARNING: Apparent symbolic reference D not resolved.
R&D
R&D
TS
TS
This sample illustrates how to use a macro quoting function to mask special characters within an indirect macro variable reference.
| Date Modified: | 2011-04-22 13:53:00 |
| Date Created: | 2011-04-22 10:29:23 |
Operating System and Release Information
| SAS System | Base SAS | z/OS | | |
| Z64 | | |
| OpenVMS VAX | | |
| Microsoft® Windows® for 64-Bit Itanium-based Systems | | |
| Microsoft Windows Server 2003 Datacenter 64-bit Edition | | |
| Microsoft Windows Server 2003 Enterprise 64-bit Edition | | |
| Microsoft Windows XP 64-bit Edition | | |
| Microsoft® Windows® for x64 | | |
| OS/2 | | |
| Microsoft Windows 95/98 | | |
| Microsoft Windows 2000 Advanced Server | | |
| Microsoft Windows 2000 Datacenter Server | | |
| Microsoft Windows 2000 Server | | |
| Microsoft Windows 2000 Professional | | |
| Microsoft Windows NT Workstation | | |
| Microsoft Windows Server 2003 Datacenter Edition | | |
| Microsoft Windows Server 2003 Enterprise Edition | | |
| Microsoft Windows Server 2003 Standard Edition | | |
| Microsoft Windows Server 2003 for x64 | | |
| Microsoft Windows Server 2008 | | |
| Microsoft Windows Server 2008 for x64 | | |
| Microsoft Windows XP Professional | | |
| Windows 7 Enterprise 32 bit | | |
| Windows 7 Enterprise x64 | | |
| Windows 7 Home Premium 32 bit | | |
| Windows 7 Home Premium x64 | | |
| Windows 7 Professional 32 bit | | |
| Windows 7 Professional x64 | | |
| Windows 7 Ultimate 32 bit | | |
| Windows 7 Ultimate x64 | | |
| Windows Millennium Edition (Me) | | |
| Windows Vista | | |
| Windows Vista for x64 | | |
| 64-bit Enabled AIX | | |
| 64-bit Enabled HP-UX | | |
| 64-bit Enabled Solaris | | |
| ABI+ for Intel Architecture | | |
| AIX | | |
| HP-UX | | |
| HP-UX IPF | | |
| IRIX | | |
| Linux | | |
| Linux for x64 | | |
| Linux on Itanium | | |
| OpenVMS Alpha | | |
| OpenVMS on HP Integrity | | |
| Solaris | | |
| Solaris for x64 | | |
| Tru64 UNIX | | |