在SAS程序上多次循环整个代码会导致错误

时间:2019-05-02 21:13:04

标签: loops sas sas-macro

我有大约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

有人有类似的经历吗?

对不起我的英语

谢谢

2 个答案:

答案 0 :(得分:1)

循环内的代码可能无法重置正在使用的重要宏变量,或者嵌套的宏调用使用的宏变量在其%local定义中未正确声明为%macro。 / p>

在编写宏时,请确保在顶部声明其使用的变量,如下所示:

%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:\temp\300-at-Thermopylae.sas';
options mprint mfile;

%programall

%options nomfile;

注意:问题可能出在所生成的源代码中,或者在其自身的生成过程中。您可以检查保存的.sas文件中是否有问题,然后单独提交,以找出误入歧途的地方。

答案 1 :(得分:0)

所以,我发现循环之间的代码中有这样的注释

*********GPA's something;

我起飞了'然后开始运转完美。这是评论,但Macro似乎将其作为字符串

谢谢