SAS宏的特殊字符引用

From: 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.);

 

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
05-26
SAS是一种用于自动化执行SAS代码的工具。它允许用户将一组SAS语句组合成一个单独的可重用代码块,并使用变量来自定义代码块中的参数。 SAS由两部分组成:定义和调用。在定义中,用户编写一组SAS语句,其中包含变量。在调用中,用户使用%名称来调用,并为变量提供值。当SAS遇到调用时,它会展开定义并替换变量的值,然后执行展开后的代码。 以下是一个简单的SAS示例,用于计算两个数字的和: ``` %macro add_numbers(num1=, num2=); %let sum = %eval(&num1 + &num2); %put The sum of &num1 and &num2 is ∑ %mend; %add_numbers(num1=5, num2=10); ``` 在上面的示例中,`%macro`定义了一个名为`add_numbers`的,该接受两个参数`num1`和`num2`。定义中的`%let`语句使用`%eval`函数计算这两个数字的和,并将结果存储在名为`sum`的变量中。最后,`%put`语句将计算的和输出到SAS日志中。 在调用中,我们使用`%add_numbers`调用,并为`num1`和`num2`提供值。当SAS遇到调用时,它会展开定义并替换变量的值,然后执行展开后的代码。在这种情况下,展开后的代码将计算5和10的和,并将结果输出到SAS日志中。 SAS是一种非常强大的工具,可以让SAS用户更高效地编写代码。它可以用于自动化常见的数据处理、分析、报告生成和其他任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值