原文地址  :  http://blog.chinaunix.net/uid-675476-id-2076827.html

在SAS宏中,字符串是用双引号括起来的,但如果字符串中要包含双引号或百分号等特殊字符就要使用单引号来对字符串中的特殊字符逃逸。比如:
%let test = ‘”A” is the first character !’;

但如果字符串中包含单引号,则上述方法便失效了。所以更一般的,SAS提供了%str和%nrstr来对特殊字符转义。其中%str可以转义逗号,单双引号,左右小括号,波浪号,分号,空格,尖角号等,而%nrstr除了可以转义%str能够转义的特殊符号,还可以转义与(&)符号和百分号。具体的使用方法如:
%let test=%str(“A” is the first character!);

需要注意的是,当使用%str时,如果引用的字符串包含有不匹配的单双引号,括号,必须使用百分号转义,如:
%let test=%str(I%’m consultant.);

当然,笔者为了怕出错误,%str中凡是遇到特殊字符都用百分号转义了,如:
%macro doit;
X “%str(copy %”a%” %”b%”)”;
%mend doit

最为特殊的符号是百分号本身,如果要在%str中包含百分号,同时又不让SAS将其及其后%的字符看成是宏名或宏调用,请用百分号对百分号进行转义,也就是用两个百分号来表示一个百分号,如:
%let test = %str(%“%%%” is a special character!);

测试一下:
data _null_;
put “&test”;
run;

Log窗口是不是打印出来”%” is a special character!字样了呢?

%str和%nrstr对常量是有效的,如果是变量的话,%str和%nrstr则不会对变量的内容进行转义。这种情况下,我们需要%bquote和%nrbquote,这两个statement则专门在宏扩展之后,宏执行的时候对变量对应的内容进行转义,比如:

%let test = %str(%”%%);
%macro dd(h=);
data _null_;
%let a = %nrbquote(%substr(&h.,1,1));
put “&a.”;
run;
%mend dd;
%dd(h=&test.);

【函数】SAS宏的特殊字符引用【转载】的更多相关文章

  1. java中函数是值传递还是引用传递?

    相信有些同学跟我一样,曾经对这个问题很疑惑.在网上也看了一些别人说的观点,评论不一.有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test ...

  2. ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

    1061: 从三个数中找出最大的数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][We ...

  3. CTEX里的函数、符号及特殊字符

    CTEX里的函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{a}   \acute{a}   \check{a}   \grave{a}   \tilde{a}   \hat ...

  4. error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : er

    转: http://blog.csdn.net/bill_ming/article/details/8150111 opengl的高级菜鸟问题 看了一本书<OpenGL三维图形系统开发与应用技术 ...

  5. C++内联函数与宏定义

    用内联取代宏: 1.内联可调试: 2.可进行类型安全检查或自动类型转换: 3.可访问成员变量. 另外,定义在类声明中的成员函数自动转化为内联函数. 文章(一) 内联函数与宏定义 在C中,常用预处理语句 ...

  6. VS2015+OpenGL4.0开发编译时弹出错误:glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 _GetRegistrySysColors@8 中被引用

    一.问题描述: VS2015+OpenGL4.0开发编译时弹出如下所示的错误: 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符 ...

  7. __inline定义的内联函数和宏的区别

    转自:http://blog.csdn.net/lw370481/article/details/7311668 函数与宏 #define TABLE_COMP(x) ((x)>0?(x):0) ...

  8. [转]Python中函数的值传递和引用传递

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  9. C++内联函数、宏定义和普通函数的区别

    C++内联函数.宏定义和普通函数的区别? 宏定义:在预处理阶段进行简单的文本替换,不会进行参数类型检查: 内联函数:在编译器的时候进行代码插入,编译器会在每次调用内联函数的地方直接将内联函数的内容展开 ...

随机推荐

  1. yii 生成条码并上传到图片服务器(zimg)

    工具: 生成条码和二维码 https://github.com/codeitnowin/barcode-generator 配置:

  2. Redis环境安装

    Windows下: 到https://github.com/MicrosoftArchive/redis/releases下载: 下载完成后一步一步安装就行. 然后在安装一个可视化工具:https:/ ...

  3. PL/SQL Developer 使用小技巧

    1.PL/SQL Developer记住登陆密码 在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码: 设置方法:tools- ...

  4. mongodb 安装(官方说明链接)

    这里面有很全的 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/ 先截个图吧,都是标准的流程,按照操作,是可以安 ...

  5. 申请免费通配符证书(Let's Encrypt)并绑定IIS

    申请免费通配符证书(Let's Encrypt)并绑定IIS 2018-05-25 18:01 by Giant Liu, 800 阅读, 4 评论, 收藏, 编辑 什么是 Let’s Encrypt ...

  6. ALGO-149_蓝桥杯_算法训练_5-2求指数

    AC代码: #include <stdio.h> int main(void) { int n,m,sum; int i,j; scanf("%d %d",&n ...

  7. window7环境MySql5.7 zip安装配置教程

    1.将zip压缩包解压到一个目录下,并改名为mysql5.7 我的是放在D:\web\mysql5.7下 2.修改my-default.ini文件 下面几项是必填的,否则无法启动 basedir = ...

  8. Java学习——this、this()、super 和 super()的使用

    编写程序:说明 this.super 和 super()的用法.程序首先定义 Point(点)类,然后创建点的子类 Line(线)),最后通过 LX7_3 类输出线段的长度. package Pack ...

  9. 得到body相对定位的插件

    相对body定位的插件 function offset(ele){ //该元素到父级水平定位的距离 var le=ele.offsetLeft; //该元素到父级垂直定位的距离 var to=ele. ...

  10. folly无锁队列,尝试添加新的函数

    1. folly是facebook开源的关于无锁队列的库,实现过程很精妙.folly向队列中添加节点过程,符合标准库中的队列的设计,而取出节点的过程,则会造成多个线程的分配不均.我曾经试着提供一次 取 ...