是否有在 Windows 中编译 SAS 9.1.3 SCL 代码(NB 不是普通 SAS 代码)的编程方式?我发现这样做的唯一方法是使用 SAS GUI:我们有一个 Perl 脚本,它将击键发送到 UI。虽然这可行(有点),但它很丑陋且容易出错,而且太脆弱而无法添加到我们的自动构建脚本中。
编辑:我最初的问题可能有点不清楚。我知道proc build
;我的问题是首先将一些纯文本作为 SCL 条目放入 SAS 目录中。
我发现这是一个先有鸡还是先有蛋的问题。我发现只能通过使用已经存在的 SCL 条目将纯文本输入 SCL 条目......
我有一个设置,我在目录条目中从纯文本文件读取和写入 SCL 代码。我将其用于修订控制目的 (CVS)。
虽然 CVS 主要用于纯文本代码,但它也可以处理二进制文件。因此,我创建了一个 SCL 条目(称为 FILE2SCL),可以将纯文本导入其他 SCL 条目。然后我将这个 SCL 条目 PROC CPORT'ed 到一个二进制文件中,并将它检入 CVS。
这样,我总是可以以编程方式从 CPORT 文件中获取此 SCL 条目,并使用此 SCL 条目将 SCL 代码从纯文本导入其他 SCL 条目。之后我可以使用 PROC BUILD 来编译 SCL 条目,就像你提到的那样。
我的 FILE2SCL 条目如下所示:
INIT:
/***************************************************************/
/* */
/* Call this SCL like this: */
/* %let srcFile=D:\work\dummy.scl; */
/* %let dstEntry=WORK.NEW.DUMMY.SCL; */
/* proc display catalog=work.cat.file2scl.scl; */
/* run; */
/* */
/***************************************************************/
length Rc 8;
length theFile $ 200;
length theEntry $ 128;
theFile=symget('SRCFILE'); * Source file *;
theEntry=symget('DSTENTRY'); * Destination entry *;
* Assign filename *;
Rc=filename('temp',theFile);
* Include external file into preview buffer *;
Rc=PREVIEW('INCLUDE','temp');
* Save contents of preview buffer to SCL entry *;
Rc=PREVIEW('SAVE',theEntry);
Rc=PREVIEW('CLEAR');
Rc=PREVIEW('CLOSE');
* Deassign filename *;
Rc=filename('temp','');
return;
注释说明了如何使用它:首先设置一个 SAS 宏变量“srcFile”,以包含 SCL 源代码文件的路径,另一个宏变量“dstEntry”包含您想要的入口路径SCL条目要。然后 PROC DISPLAY FILE2SCL 入口,它会将你的 SCL 源代码导入到指定的 SCL 入口,然后你可以使用 PROC BUILD 编译它。