在 SAS 程序上多次循环整个代码会导致错误
loop whole code many times on SAS program causes error
我的代码很长,大约有 5000 行。当我宏这个程序,并循环几次。它执行成功但是如果我将循环更改为 300 次,代码开始导致错误,我无法弄清楚为什么会导致,
%let Numberl=300;
%macro programall;
%do r=0 %to &numberl;
.
.
.
.
.
%end;
%mend Programall;
%Programall;
我假设睡眠功能可以解决这个问题
https://support.sas.com/documentation/cdl/en/lefunctionsref/63354/HTML/default/viewer.htm#p0a6vn2td7bjr2n1viy8y4lgvq61.htm
有没有人有类似的经历?
对不起我的英语
谢谢
循环内的代码可能没有重置它正在使用的重要宏变量,或者嵌套宏调用使用的宏变量在其 %macro
定义中未正确声明为 %local
.
编写宏代码时,请确保它使用的变量在顶部声明如下:
%macro foo(top=);
%local index piece1 piece2;
%do index = 1 %to ⊤
%let piece1 = …;
%end;
%mend;
故障发生的&r
是否有一个一致的具体值?如果是这样,您可能对 r
有错误的假设。
您可以在调用%programall
之前通过设置选项来查看正在生成的宏。这些选项将记录 大量 最详细级别的信息:
options mprint mtrace symbolgen;
您可以使用 mfile
将宏生成的实际代码保存到外部文件。
filename mfile 'c:\temp0-at-Thermopylae.sas';
options mprint mfile;
%programall
%options nomfile;
注意:问题可能出在生成的源代码中,或者出在它自己的生成过程中。您可以检查已保存的 .sas
文件是否存在问题,并单独提交文件的各个部分,以找出哪里出错了。
所以,我发现循环之间的代码中有这样的注释
*********GPA's something;
我起飞了 ' 然后开始 运行 完美。这是评论,但宏似乎作为字符串
谢谢
我的代码很长,大约有 5000 行。当我宏这个程序,并循环几次。它执行成功但是如果我将循环更改为 300 次,代码开始导致错误,我无法弄清楚为什么会导致,
%let Numberl=300;
%macro programall;
%do r=0 %to &numberl;
.
.
.
.
.
%end;
%mend Programall;
%Programall;
我假设睡眠功能可以解决这个问题 https://support.sas.com/documentation/cdl/en/lefunctionsref/63354/HTML/default/viewer.htm#p0a6vn2td7bjr2n1viy8y4lgvq61.htm
有没有人有类似的经历?
对不起我的英语
谢谢
循环内的代码可能没有重置它正在使用的重要宏变量,或者嵌套宏调用使用的宏变量在其 %macro
定义中未正确声明为 %local
.
编写宏代码时,请确保它使用的变量在顶部声明如下:
%macro foo(top=);
%local index piece1 piece2;
%do index = 1 %to ⊤
%let piece1 = …;
%end;
%mend;
故障发生的&r
是否有一个一致的具体值?如果是这样,您可能对 r
有错误的假设。
您可以在调用%programall
之前通过设置选项来查看正在生成的宏。这些选项将记录 大量 最详细级别的信息:
options mprint mtrace symbolgen;
您可以使用 mfile
将宏生成的实际代码保存到外部文件。
filename mfile 'c:\temp0-at-Thermopylae.sas';
options mprint mfile;
%programall
%options nomfile;
注意:问题可能出在生成的源代码中,或者出在它自己的生成过程中。您可以检查已保存的 .sas
文件是否存在问题,并单独提交文件的各个部分,以找出哪里出错了。
所以,我发现循环之间的代码中有这样的注释
*********GPA's something;
我起飞了 ' 然后开始 运行 完美。这是评论,但宏似乎作为字符串
谢谢