【函数】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++内联函数.宏定义和普通函数的区别? 宏定义:在预处理阶段进行简单的文本替换,不会进行参数类型检查: 内联函数:在编译器的时候进行代码插入,编译器会在每次调用内联函数的地方直接将内联函数的内容展开 ...
随机推荐
- Azure SQL 数据库仓库Data Warehouse (1) 入门
<Windows Azure Platform 系列文章目录> 在之前的项目中遇到了客户使用SQL数据仓库的场景,在这里记录一下 1.什么是SQL 数据库仓库 (SQL DW) SQL D ...
- 【Properties】获取Properties文件
获取Properties文件 package com.chinamobile.epic.tako.v2.query.commons; import org.springframework.core.i ...
- PAT 乙级 1077 互评成绩计算 (20)
在浙大的计算机专业课中,经常有互评分组报告这个环节.一个组上台介绍自己的工作,其他组在台下为其表现评分.最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平 ...
- PAT 乙级 1048 数字加密(20) C++版
1048. 数字加密(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求实现一种数字加密方法.首先固 ...
- 无法将当前工程转化成model 2.5/3.1:Cannot change version of project facet Dynamic Web Module to 2.5.
Description Resource Path Location TypeCannot change version of project facet Dynamic We ...
- 【ZZ】C++11之统一初始化语法 | 桃子的博客志
C++11之统一初始化语法 | 桃子的博客志 https://taozj.net/201710/list-initialize.html 在当前新标准C++11的语法看来,变量合法的初始化器有如下形式 ...
- 文档碎片及xml讲解
1.将数据渲染到页面的几种方式 1.字符串拼接 2.dom循环 3.模板 4.文档碎片 字符串拼接: 优势:只进行一次dom回流 缺点:原有的dom事件会消失 案例分析:原有list中有3个li,并且 ...
- go语言学习--map中键值得删除
测试 map1 中是否存在 key1: 在例子 8.1 中,我们已经见过可以使用 val1 = map1[key1] 的方法获取 key1 对应的值 val1.如果 map 中不存在 key1,val ...
- [UE4]自定义函数,快速增加输入参数的一种方法
- springmvc使用步骤
1.导包 2.在web.xml文件中配置前端控制器dispatchServlet 3.创建springmvc配置文件springmvc.xml 4.编写controller 5.在springmvc中 ...