SAS中文论坛

标题: <求助>Macro [打印本页]

作者: shiyiming    时间: 2009-7-19 10:02
标题: <求助>Macro
%let val = aaa ;
%let testval = %str( %'&amp;val%' ) ;

data _null_ ;
  val = &amp;testval ;
  put 'VAL=' val ;
run ;

执行时提示error.如果改成如下:

data _null_ ;
  val = [color=#FF0000:q1hah3ri]%unquote[/color:q1hah3ri](&amp;testval) ;
  put 'VAL=' val ;
run ;

则没有问题了,各位能否解释一下为什么?谢谢!
作者: shiyiming    时间: 2009-7-19 12:22
标题: Re: <求助>Macro
%unquote()是去掉字符窜重重的单引号,如果不去掉引号就没有办法解析宏变量
作者: shiyiming    时间: 2009-7-19 12:55
标题: Re: <求助>Macro
呵呵,貌似不是这个意思哦。
作者: shiyiming    时间: 2009-7-23 17:48
标题: Re: <求助>Macro
谢谢MyLoveSas的问题!
以前遇到这种问题,看log总看不出到底错在哪里,现在终于知道了.以下是我看帮助自己攒的,要是不对请指正,谢谢.
[code:2kjvswv1]%let val = aaa;         /* 宏变量val赋值aaa */
%let testval = %str(%'&amp;val%'); /* 宏变量testval赋值为'&amp;val'(使用%str()在编译阶段屏蔽&amp;和',其中%'是在%str()中屏蔽'的特殊写法) */

/* 在data步编译之前解除对宏变量&amp;testval的屏蔽 */
data _null_;
        /* 为数据集字符变量val赋值,期望的语句为:val='aaa'; */
    /*val = &amp;testval;  错误,在data步编译前未解除宏变量testval的屏蔽 */
        val = %unquote(&amp;testval);        /* 正确,使用%unquote()在data步编译前解除了屏蔽 */
        put 'VAL =' val; /* 在log打印数据集变量val的值 */
run;

/* 下面是去掉引号问题的简化版本 */
/*
%let val = aaa;
%let testval = %str(&amp;val);
data work&#46;temp;
        val = &quot;%unquote(&amp;testval)&quot;;
run;
*/[/code:2kjvswv1]
作者: shiyiming    时间: 2009-7-26 12:44
标题: Re: <求助>Macro
查看了下,如果不unquote宏变量testval,则变量val 是数值型(BEST12.),而'aaa'显然不能成功进行转换。应该是这个原因。
作者: shiyiming    时间: 2009-7-28 22:42
标题: Re: <求助>Macro
下面是SAShelp的例子。同意楼上的说法。
可以加一条语句测试下:%put &amp;testval.;
结果是:'aaa'
The following program generates error messages in the SAS log because the value of TESTVAL is still masked when it reaches the SAS compiler.

%let val = aaa;
%let testval = %str(%'&amp;val%');

data _null_;
  val = &amp;testval;
  put 'VAL =' val;
run;

This version of the program runs correctly because %UNQUOTE explicitly unmasks the value of TESTVAL.

%let val = aaa;
%let testval = %str(%'&amp;val%');

data _null_;
  val = %unquote(&amp;testval);
  put 'VAL =' val;
run;

This program prints this to the SAS log:

VAL=aaa




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2