使用%macro从SAS运行并行程序,例如

使用%macro从SAS运行并行程序,例如,sas,Sas,在SAS EG 7.15上,我有一些问题要找出我想做的事情是否可行 上下文 我们将一个相当大的项目拆分为几个流程,每个流程都有一个程序来定义一个%macro语句,最后一个流程包含一个程序调用“EXECUTION”,以这种方式调用行中的所有程序: 流程/流程/程序: %macro TheFirstOne; some code %mend TheFirstOne; 其他一些流程 流程\u流程\u 123/执行: %TheFirstOne; %TheSecondOne; %TheThirdOne

在SAS EG 7.15上,我有一些问题要找出我想做的事情是否可行

上下文

我们将一个相当大的项目拆分为几个流程,每个流程都有一个程序来定义一个
%macro
语句,最后一个流程包含一个程序调用“EXECUTION”,以这种方式调用行中的所有程序:

流程/流程/程序:

%macro TheFirstOne;
some code
%mend TheFirstOne;

其他一些流程


流程\u流程\u 123/执行:

%TheFirstOne;
%TheSecondOne;
%TheThirdOne;...
其优点是,只需单击第一个流程->SHIFT+单击最后一个流程,所有内容都将被拆分并易于执行。此外,您还有一个包含所有不同程序的唯一日志文件。一切都很完美

问题

问题是,我们有一个相当长的执行时间,我们希望将其拆分为并行进程,这并不难用“允许在同一台服务器上并行执行”选项来设置,而且当您尝试执行一些独立工作的程序时,此功能也会非常有效

但是,按照我们的工作方式,第一个进程(我想说的是线程)知道我们的
%宏定义,并且工作得很好,但是第二个或任何其他进程不知道它们,并给出如下错误:

警告:未解析宏xxxxxxx的明显调用

因为我们以前从未执行过定义这个宏的程序

我的尝试

我尝试使用Autoexec功能,但如果它适用于每个并行进程,我必须复制其中每个宏(5000多行)的定义。我还查看了SAS代码以在程序中运行流进程,但它似乎不存在,或者我没有找到它


我很确定SAS的高级主管会说这不是我们应该使用SAS的方式,例如,但我们是这样做的,我只是想知道是否有一种解决方案,可以让其他进程知道以前定义的所有
%macro
宏的定义。

而不是手动复制宏代码,为什么不将所有定义放在一个文件中,只使用带有autoexec功能的%include语句呢?因为如果我们更改任何程序的一部分,就必须更改2个文件,这将是一个相当长的文件。在5000多行的文件中甚至更多。它可以工作,但Autoexec功能在结尾处会完全相同。我不知道我是否理解。如果更改宏中的某些内容,则只会更改定义文件。如果您更改了执行脚本中的某些内容,则只需更改该脚本即可。为什么要在两个文件中进行更改?那么我可能不明白你想说什么。如果我们保持分割的方式,我们可以只自动导出一个独立的文件*.sas,然后%include,使每个程序只包含一个吗?否则这不是一个解决方案,因为我们必须更改2个文件。好的,我明白你的意思。但这意味着要用一个文件来定义大量的
%macro
,维护它将是一场噩梦