/* 在data步编译之前解除对宏变量&testval的屏蔽 */
data _null_;
/* 为数据集字符变量val赋值,期望的语句为:val='aaa'; */
/*val = &testval; 错误,在data步编译前未解除宏变量testval的屏蔽 */
val = %unquote(&testval); /* 正确,使用%unquote()在data步编译前解除了屏蔽 */
put 'VAL =' val; /* 在log打印数据集变量val的值 */
run;
/* 下面是去掉引号问题的简化版本 */
/*
%let val = aaa;
%let testval = %str(&val);
data work.temp;
val = "%unquote(&testval)";
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 &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(%'&val%');
data _null_;
val = &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(%'&val%');
data _null_;
val = %unquote(&testval);
put 'VAL =' val;
run;