带有 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
就是这样。
我遇到了一个随机问题。当使用 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
就是这样。