loops - 在 SAS 程序上循环整个代码多次导致错误
问题描述
我有一个大约 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
有没有人有类似的经历?
对不起我的英语
谢谢
解决方案
循环内的代码可能不会重置它正在使用的重要宏变量,或者存在嵌套宏调用正在使用未%local
在其%macro
定义中正确声明的宏变量。
每次编写宏时,请确保它使用的变量在顶部声明,如下所示:
%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
文件是否存在问题,并单独提交部分文件,以便找到出错的地方。
推荐阅读
- python - 如何检查数据框中是否有整数并在其前面添加单词
- java - 如何在 Java 中显示与 MCP 保持纵横比的图像
- openstack - 重新执行 openstack-ansible setup-openstack.yml 失败
- python - 如何将 joblib.Parallel 用于带有某些条件的循环?
- apache-kafka - spring kafka流使用功能样式使用来自多个主题的消息不起作用
- sql-server - SQL Server VS AWS RDS SQL Server 操作列表
- c++ - wstringstream 中的程序崩溃
- python - 何时使用 chisquare 或简单的 teste 作为比例
- logging - 基于动态日志的指标和警报策略
- python - 如何将值从 ESP8266 发送到 django 网站