SAS学习笔记47 Macro Quoting
简单来说:Macro Quoting就是将具有特殊功能字符及字母组合的特殊功能隐藏掉。例如:让分号(;)不再表示一个语句的结束,而就是一个普普通通的字符;让GE不再表示大于等于的比较符,而就是两个普普通通的字母
%STR
%STR宏函数是专门用于隐藏特殊字符及字母组合的特殊功能,该宏函数可以隐藏以下所有的特殊字符及字母组合:
需要特别注意的是,如果在文本中出现不匹配的单引号、双引号、或者括号,则需要在其前面加一个%,用来标注该符号是不匹配的,单独的字符。%的意义类似于其他语言中的转义字符:斜杠(\)
%NRSTR
%NRSTR函数的功能与%STR函数是一样的,只不过在%STR的基础上,还能隐藏%和&两个Macro Trigger的功能,使其跟普通字符一样。NR为Not Resolved的简写,即不解析宏变量和宏程序(后文中带有NR的函数都是此意义)
Macro Function wih Quoting
具有Quoting功能的函数:%QSCAN、%QSUBSTR、%QSYSFUNC、%QUPCASE。这些具有Quoting功能的函数,能够隐藏返回结果中的特殊字符的功能。具体来说,可以隐藏以下特殊字符:
%QUOTE和%NRQUOTE
%STR(包括%NRSTR)只在程序编译的阶段起作用;在程序执行阶段是不起作用的。而%QUOTE函数(相对应的还有%NRQUOTE),是在程序执行阶段生效的
%QUOTE与%NRQUOTE两个函数的功能与%STR和%NRSTR两个函数的功能是一样的,只不过前两者是在程序执行阶段生效,而后两者是在程序编译阶段生效
%BQUOTE和%NRBQUOTE
%BQUOTE与%QUOTE,%NRBQUOTE与%NRQUOTE的生效阶段是一样的,都是在程序执行阶段生效。但是%BQUOTE和%NRBQUOTE,在%QUOTE和%NRQUOTE的基础上多了一个功能,即对于不匹配的引号或括号不需要使用多增加一个%(无论是%STR、%NRSTR、%QUOTE、%NRQUOTE如果有不匹配的引号,则必须要在不匹配的引号前添加%。%类似于转义字符的功能)
建议:一般情况下,都会使用%BQUOTE和%NRBQUOTE,基本不使用%QUOTE和%NRQUOTE
%SUPERQ
%SUPERQ宏函数比较特殊,其参数必须是宏变量的名字,而且不用&符号。该函数可以隐藏%NRBQUOTE函数可隐藏的特殊字符及字母组合。
但%NRBQUOTE如果参数为宏变量的引用,会在隐藏特殊字符功能前,先尝试解析其宏变量值中的宏引用或者宏变量的引用;而%SPUERQ函数则不会解析其参数宏变量值中的宏引用或者宏变量的引用
%UNQUOTE
%UNQUOTE顾名思义,就是将之前隐藏掉的功能重新激活,去除Quoting的作用
SAS学习笔记47 Macro Quoting的更多相关文章
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(5)SAS宏语言、SQL过程
SAS学习笔记之<SAS编程与数据挖掘商业案例>(5)SAS宏语言.SQL过程 1. 一个SAS程序可能包含一个或几个语言成分: DATA步或PROC步 全程语句 SAS组件语言(SCL) ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制
SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之<SAS编程与数据挖掘商业案例>(3)变量操作.观测值操作.SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(2)数据获取与数据集操作
SAS学习笔记之<SAS编程与数据挖掘商业案例>(2)数据获取与数据集操作 1. SET/SET效率高,建立的主表和建表索引的查询表一般不排序, 2. BY语句,DATA步中,BY语句规定 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(1)系统简介和编程基础
SAS学习笔记之<SAS编程与数据挖掘商业案例>(1)系统简介和编程基础 1. SAS系统简介 1.1 SAS是先编译后执行的语言,data步标志着编译的开始. 数据指针:当前内存缓存区, ...
- SAS学习笔记42 宏程序
Autocall Macro是由SAS提供的一些实现特定功能的Macro Program,可以在代码中直接使用 其中以Q开头的相比正常的多了隐藏特殊字符的功能(称之为Macro Quoting): K ...
- [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- CUBRID学习笔记 47 show
cubrid的中sql查询语法show c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . ...
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...
随机推荐
- Spark(四十六):Spark 内存管理之—OFF_HEAP
存储级别简介 Spark中RDD提供了多种存储级别,除去使用内存,磁盘等,还有一种是OFF_HEAP,称之为 使用JVM堆外内存 https://github.com/apache/spark/blo ...
- useReducer代替Redux小案例-2(八)
通过上节课的学习,用useContext实现了Redux状态共享的能力,这节课看一下如何使用useReducer来实现业务逻辑的控制.需要注意的是这节课的内容是接着上节课的,需要你把上节课的代码部分完 ...
- 分库分表 or NewSQL数据库?终于看懂应该怎么选!【转】
最近与同行科技交流,经常被问到分库分表与分布式数据库如何选择,网上也有很多关于中间件+传统关系数据库(分库分表)与NewSQL分布式数据库的文章,但有些观点与判断是我觉得是偏激的,脱离环境去评价方案好 ...
- linux中截取字段与#、$区别
1.Linux shell 截取字符变量的前8位 实现方法有如下几种: expr substr “$a” 1 8 echo $a|awk ‘{print substr(,1,8)}’ echo $a| ...
- 微信小程序wx.uploadFile的两个坑
-- setImage:function(e){ var _this = this //坑1 wx.chooseImage({ count: , sizeType: ['original', 'com ...
- How to: Secure Connection Strings When Using Data Source Controls
https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-3.0/dx0f3cf2(v=vs.85) When wo ...
- iptables 4张表 5条链
- 004-行为型-09-访问者模式(Visitor)
一.概述 它分离对象的数据和行为,使用Visitor模式,可以不修改已有类的情况下,增加新的操作. 主要解决:稳定的数据结构和易变的操作耦合问题. 注意事项:访问者可以对功能进行统一,可以做报表.UI ...
- eclipse默认指向WebContent目录修改为webRoot 设置说明【也适用于Eclipse启动MyEclipse项目】
转: eclipse默认指向WebContent目录修改为webRoot 设置说明 2014-07-02 17:42:58 落叶上的秋 阅读数 8618更多 分类专栏: Eclipse 问题 l ...
- declaration of 'int ret' shadows a parameter
定义的变量名称重复, 例如: int look_up_max(int m, int n) { int m; //... return m; }