Sas 为什么我的宏中有不平衡的引号?

Sas 为什么我的宏中有不平衡的引号?,sas,sas-macro,Sas,Sas Macro,我有一个宏,其中包含一些注释,因为我擅长编写代码文档。出于某种原因,当我运行这个宏时,我会得到一个挂起的引号。为什么? 复制此项的测试宏: %macro testme; * Comment that is in my macro that doesn't work; proc freq data=sashelp.class; run; %mend testme; %testme; 第一次执行时,它完全失败,第二次执行时,它给了我一条消息错误:此%MEND语句没有匹配的%MACRO语句。在S

我有一个宏,其中包含一些注释,因为我擅长编写代码文档。出于某种原因,当我运行这个宏时,我会得到一个挂起的引号。为什么?

复制此项的测试宏:

%macro testme;
* Comment that is in my macro that doesn't work;
proc freq data=sashelp.class;
run;

%mend testme;

%testme;

第一次执行时,它完全失败,第二次执行时,它给了我一条消息
错误:此%MEND语句没有匹配的%MACRO语句。

在SAS宏语言中,单行注释的处理方式与基本SAS语言中的处理方式不同。具体而言:

*something;
不是SAS宏语言中的注释!它将提交给常规SAS,并将成为评论。。。但是SAS宏解析器不会忽略它,这就是问题所在。它标记它,这使它不会忽略引号字符

您需要使用“PL/1”样式的注释(即块注释)使其正常工作;或者干脆不要使用撇号(即在注释中使用
而不是


有关更多信息,请参阅。

您可能希望包含搜索引擎友好性的确切错误消息:
错误:此%MEND语句没有匹配的%MACRO语句。
实际上-没有。您没有收到错误消息:您什么也没有得到(因为它还没有到达字符串的末尾!)。啊,是的,但是在第二次提交时(这很可能发生在交互式会话中)您收到了该消息。
%macro testme;
/* Comment won't break things now!*/
proc freq data=sashelp.class;
run;

%mend testme;

%testme;