SAS 9.3 将带空格的变量传递给宏
SAS 9.3 passing a variable with spaces to a macro
我需要将包含空格的变量传递给宏。并使用这个变量来制作一些逻辑并在宏中建立一个新列。
我试过类似的方法:
%MACRO func(var);
if first.id then &var = 0;
retain &var;
if descr = %unquote(%str(%'&var%')) then &var = 1;
%MEND;
proc sort data=work.table5a;
by id;
run;
data temp;
set work.table5a;
by id;
%func(PLUTO)
%func(PAPERINO)
%func(BANDA BASSOTTI)
if last.id;
run;
错误是:
注意:行由宏变量"VAR"生成。
37班达巴索蒂
_____
180
错误 180-322:语句无效或使用顺序不正确。
如果我评论 %prova(BANDA BASSOTTI) 它有效。有什么建议吗?
谢谢
您正在使用 &var 创建一个变量名,如果您想要一个包含空格的变量名,您需要使用变量名文字,例如"BANDA BASSOTTI"n。我自己没有这样做过,似乎它使代码更丑陋且更难编写,但这样的事情似乎有效:
options validvarname=any;
%MACRO func(var);
retain "&var"n;
if first.id then "&var"n = 0;
if descr = "&var" then "&var"n = 1;
%MEND;
我需要将包含空格的变量传递给宏。并使用这个变量来制作一些逻辑并在宏中建立一个新列。
我试过类似的方法:
%MACRO func(var);
if first.id then &var = 0;
retain &var;
if descr = %unquote(%str(%'&var%')) then &var = 1;
%MEND;
proc sort data=work.table5a;
by id;
run;
data temp;
set work.table5a;
by id;
%func(PLUTO)
%func(PAPERINO)
%func(BANDA BASSOTTI)
if last.id;
run;
错误是:
注意:行由宏变量"VAR"生成。 37班达巴索蒂 _____ 180 错误 180-322:语句无效或使用顺序不正确。
如果我评论 %prova(BANDA BASSOTTI) 它有效。有什么建议吗?
谢谢
您正在使用 &var 创建一个变量名,如果您想要一个包含空格的变量名,您需要使用变量名文字,例如"BANDA BASSOTTI"n。我自己没有这样做过,似乎它使代码更丑陋且更难编写,但这样的事情似乎有效:
options validvarname=any;
%MACRO func(var);
retain "&var"n;
if first.id then "&var"n = 0;
if descr = "&var" then "&var"n = 1;
%MEND;