繁体   English   中英

运行 %let %put 语句(SAS 宏)时“检测到打开代码语句递归”

[英]'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM