[英]Composing a SQL statement with SAS MACRO code, using %put and cats
[英]'Open code statement recursion detected' when running %let %put statement (SAS Macro)
当我运行以下命令时,它工作正常:
%let mname = ABC<2>;
%put &mname;
ABC<2>
%let mname2 = %scan("&mname.", 2, '<>');
%put &mname2;
2
但是,当我将 mname2 更改为以下内容时,它会给出错误:
%let mname2 = %scan("&mname.", 1, '<');
%put &mname2;
ERROR: Open code statement recursion detected.
知道是什么原因造成的吗?
由于您在传递给 %SCAN() 函数的值周围添加了引号,然后只选择了其中一个引号作为输出,因此您生成了不平衡的引号。
在常规 SAS 代码(和大多数编程语言)中,为了让编译器能够区分变量名或关键字与字符串文字之间的区别,您可以在字符串周围添加引号
但是宏处理器语言是不同的。 对于宏处理器来说,一切都是一个字符串,它只是寻找 & 或 % 触发器来判断是否有任何需要操作的东西。
49 %let mname = ABC<2>;
50 %put &=mname;
MNAME=ABC<2>
51 %put %scan(&mname,1,<>);
ABC
52 %put %scan(&mname,2,<>);
2
如果您认为 %SCAN() 函数可能会返回不平衡的引号或其他可能需要宏引用的内容,请改用 %QSCAN() 函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.