使用 %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 来执行此操作。企业指南允许并行处理程序(但不是一个程序中的%include
s),如果你告诉它(但不是默认情况下)。
【讨论】:
【参考方案2】:%include 将按顺序运行。如果您在 1st %include 中的代码遇到错误,那么您的程序将停止并且不会处理其他行。
【讨论】:
【参考方案3】:%include 将始终按顺序运行。
如果在 script1 中创建了某个变量,那么您可以在 script2 中使用相同的变量,但如果脚本 1 依赖于在脚本 2 中创建的某个变量,则会出错。
【讨论】:
以上是关于使用 %include 运行 SAS 脚本的主要内容,如果未能解决你的问题,请参考以下文章
通过SH文件运行SAS批处理作业:SAS脚本包含导出到csv - 在哪里/如何获得输出?