使用 %include 运行 SAS 脚本

Posted

技术标签:

【中文标题】使用 %include 运行 SAS 脚本【英文标题】:Running SAS script using %include 【发布时间】:2016-09-19 19:06:04 【问题描述】:

我是 SAS 的新手,来自 SQL,所以我正在处理它们的差异。

我有一个 SAS 程序“Master.sas”,除其他外,它运行如下:

%include "c:\script1.sas";
%include "c:\script2.sas";
%include "c:\script3.sas";

问题是,如果我选择所有这些并运行它,它是顺序运行还是并行运行? 比如script2使用了script1中加载的表,会不会运行失败? 好吧,这个例子在我测试时可能听起来很明显,但是如果 script1 计算一个变量,script2 将计算变量或使用它在运行时找到的变量会发生什么(例如,因为 script2 比 script1 更早运行)? 澄清一下,我需要 SAS 一个接一个地依次运行它们。

SQL中存在“GO”来分隔批处理,即:

CREATE TABLE XXXXX
GO

SELECT * FROM XXXXX
GO

如果有人尝试在不使用 GO 的情况下运行该脚本,SQL 会并行运行它们,在第二个脚本上产生错误,告知“表 XXXXX 不存在”。

我是否需要在 SAS 或 SAS 中类似的东西在前一个完成后才处理下一个?

提前致谢!

【问题讨论】:

文件将按顺序运行。 1;2;3。如果您不想并行,这里是详细信息:communities.sas.com/t5/Base-SAS-Programming/… 【参考方案1】:

%include 将按顺序运行。 SAS 将运行第一个 %include,就好像它只是代码中的行一样,然后点击第二个并执行相同的操作,等等。

SAS 的 GO 相当于 RUN,虽然在大多数情况下 RUN 实际上不必包含在内(尽管它被认为是一种好的做法)。 SAS 不会因为您忽略 RUN 而在并行模式下运行,但它告诉 SAS 继续运行给它的代码。但是,这适用于PROC SQL;不支持运行组处理,并立即执行以; 终止的每个语句。

有办法让它并行运行;例如,this hands-on workshop from SUGI 29 on Parallel Processing 显示了如何使用 RSUBMIT 来执行此操作。企业指南允许并行处理程序(但不是一个程序中的%includes),如果你告诉它(但不是默认情况下)。

【讨论】:

【参考方案2】:

%include 将按顺序运行。如果您在 1st %include 中的代码遇到错误,那么您的程序将停止并且不会处理其他行。

【讨论】:

【参考方案3】:

%include 将始终按顺序运行。

如果在 script1 中创建了某个变量,那么您可以在 script2 中使用相同的变量,但如果脚本 1 依赖于在脚本 2 中创建的某个变量,则会出错。

【讨论】:

以上是关于使用 %include 运行 SAS 脚本的主要内容,如果未能解决你的问题,请参考以下文章

通过SH文件运行SAS批处理作业:SAS脚本包含导出到csv - 在哪里/如何获得输出?

如何为与正在执行的 SAS 脚本名称相似的输出文件命名?

用于复制到 Azure Blob 的 Azure SAS 授权参数是啥?

sasgrid平台sas程序执行慢

使用 COUNT 函数停止 SAS 对空白单元格进行计数

SAS运行时出错