【函数】SAS宏的特殊字符引用【转载】
原文地址 : 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宏的特殊字符引用【转载】的更多相关文章
- java中函数是值传递还是引用传递?
相信有些同学跟我一样,曾经对这个问题很疑惑.在网上也看了一些别人说的观点,评论不一.有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test ...
- ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)
1061: 从三个数中找出最大的数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 124[Submit][Status][We ...
- CTEX里的函数、符号及特殊字符
CTEX里的函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{a} \acute{a} \check{a} \grave{a} \tilde{a} \hat ...
- error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : er
转: http://blog.csdn.net/bill_ming/article/details/8150111 opengl的高级菜鸟问题 看了一本书<OpenGL三维图形系统开发与应用技术 ...
- C++内联函数与宏定义
用内联取代宏: 1.内联可调试: 2.可进行类型安全检查或自动类型转换: 3.可访问成员变量. 另外,定义在类声明中的成员函数自动转化为内联函数. 文章(一) 内联函数与宏定义 在C中,常用预处理语句 ...
- VS2015+OpenGL4.0开发编译时弹出错误:glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 _GetRegistrySysColors@8 中被引用
一.问题描述: VS2015+OpenGL4.0开发编译时弹出如下所示的错误: 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符 ...
- __inline定义的内联函数和宏的区别
转自:http://blog.csdn.net/lw370481/article/details/7311668 函数与宏 #define TABLE_COMP(x) ((x)>0?(x):0) ...
- [转]Python中函数的值传递和引用传递
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- C++内联函数、宏定义和普通函数的区别
C++内联函数.宏定义和普通函数的区别? 宏定义:在预处理阶段进行简单的文本替换,不会进行参数类型检查: 内联函数:在编译器的时候进行代码插入,编译器会在每次调用内联函数的地方直接将内联函数的内容展开 ...
随机推荐
- 根据时间段获取时间段内所有时间点(js)
Date.prototype.format=function (){var s='';s+=this.getFullYear()+'-';// 获取年份.s+=(this.getMonth()+1)+ ...
- android利用provider查询同一个数据库中没有对外暴露出来的表
[原创]转载请加本篇博客地址http://www.cnblogs.com/scarecrow-blog/p/6266042.html 个人感觉这是android provider 的一个漏洞, 废话少 ...
- 【springBoot】之快速构建一个web项目
基于maven,首先看pom文件 <parent> <groupId>org.springframework.boot</groupId> <artifact ...
- bzoj4865: [Ynoi2017]由乃运椰子
在线询问区间众数,传统的分块(记录块间众数和每个权值的出现次数)做法被卡空间(分块用的空间是O(块数*(块数+权值种类数))),因此考虑去掉出现次数较小的数,只用分块维护出现次数较大的数.设K为分界线 ...
- Kubernetes1.8以后kubelet连接api-server问题
Kubernetes1.8以后版本,kubelet命令去掉--api-servers选项,参考官方kubelet 1.8 --kubeconfig string Path to a kubeconfi ...
- Java NIO系列教程(五)Buffer
Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.交互图如下: 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被 ...
- 判断浏览器是否IE(IE11可用)
function isIE() { //ie? if (!!window.ActiveXObject || "ActiveXObject" in window) { ...
- Scrapy学习篇(一)之框架
概览 在具体的学习scrapy之前,我们先对scrapy的架构做一个简单的了解,之后所有的内容都是基于此架构实现的,在初学阶段只需要简单的了解即可,之后的学习中,你会对此架构有更深的理解.下面是scr ...
- HTTP 2.0 原理详细分析
HTTP 2.0是在SPDY(An experimental protocol for a faster web, The Chromium Projects)基础上形成的下一代互联网通信协议.HTT ...
- Mybatis 系列4-结合源码解析节点:typeAliases
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...