带有 VBScript 的 SAS 企业指南。循环遍历 SAS 程序卡住

SAS Enterprise Guide with VBScript. Looping through SAS programs get stuck

我遇到了一个随机问题。当使用 VBScript 和 SASEGObjectModel.Application.7.1 执行 SAS 程序时,通过 CodeCollection 循环有时会卡住,即使程序执行成功(最终数据库已在我们的服务器中正确创建)。简单的脚本不会转到 CodeCollection 的下一个程序(执行脚本的提示仍然打开...无限)。 SAS程序它的发生是随机的,也是频率。我打算这样做:

Dim oSasApp

Set oSasApp = CreateObject("SASEGObjectModel.Application.7.1")
oSasApp.SetActiveProfile("some-profile")

Dim oSasProj
Set oSasProj = oSasApp.Open("some-project.egp", "")

Dim oProgramList
Set oProgramList = oSasProj.CodeCollection

Dim programOrder
Set programOrder = ...here I assign the SAS programs order array reading from a .txt...

For Each program in programOrder
       For Each sasProgram in oProgramList
              If sasProgram.Name = program Then
                     sasProgram.Run
                     sasProgram.Log.SaveAs "some-folder/" & sasProgram.Name & ".txt"
              End If
       Next
Next

oSasProj.Close
oSasApp.Quit

问题不在于日志保存,因为卡住程序的日志 txt 文件也已正确创建。

有什么想法吗?也许我们的 SAS 服务器有问题?我应该声明某种选项吗?

SAS 指南版本:7.15 Windows: 10

感谢

所以...对于面临同样问题的人。正如我在上面评论的那样,如果我在提示符下按回车键,脚本会再次运行。所以它正在等待我的输入,出于我无法说出的原因。我做了两件事来解决它。不确定是否所有这些都是必要的,或者是否只有一个解决了它,但这里是:

首先,我通过 VBScript 关闭了世代列表,并在 SAS 程序运行后应用了延迟:

For Each program in programOrder
       For Each sasProgram i oProgramList
              If sasProgram.Name = program Then
                     sasProgram.GenSasReport = False
                     sasProgram.GenHTML = False
                     sasProgram.GenListing = False
                     sasProgram.GenPDF = False
                     sasProgram.GenRTF = False
                     sasProgram.Run
                     WScript.Sleep(2000)
                     sasProgram.Log.SaveAs "some-folder/" & sasProgram.Name & ".txt"
              End If
       Next
Next

在我的批处理文件中,我使用 "cscript" 命令调用 VBScript,我将其设置为将 "y" 应用于 VBScript 可能询问的每条消息:

cd ./script-folder
echo y | cscript script-file-name.vbs

就是这样。