zoukankan      html  css  js  c++  java
  • 【函数】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.);

  • 相关阅读:
    python 获取当前路径
    python 执行结果输出为txt
    python def 定义函数
    python:浅析python 中__name__ = ‘__main__’ 的作用
    python 数组新增或删除元素
    python在Windows安装PIL的方法
    静态路由学习总结
    zookeeper客户端命令行操作
    kudu安装过程中可能出现的问题
    sudo: /etc/sudoers is world writable|给用户添加权限报错
  • 原文地址:https://www.cnblogs.com/yizhenfeng/p/5072995.html
Copyright © 2011-2022 走看看