导出 SAS 项目日志文件

Exporting the SAS Project Log file

我以前每天 运行 3 个 SAS EG 项目。几天以来,我们有了一个“SAS Scheduler”,它基本上 运行 在夜间处理后者(第一个在 00:00 AM,第二个在 01:00 AM,第三个一个在 03:00 AM)。每个 SAS 项目都有多个 SAS 程序。

总而言之,这是个好消息,但这也意味着我不能再直接查看日志了。

为了跟踪夜班工作,我正在尝试寻找导出每个项目日志文件的最佳方式。我最近发现了SAS Project Log,它基本上总结了SAS Project中所有程序的日志。

我在 SAS 社区论坛上发现了 CaseySmith 的答案,主要是调整 .vbs 脚本以使用以下代码将 SAS 项目日志文件保存到 .txt:

Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()

objProjectLog.Enabled = True
'strProjectLog = objProjectLog.Text
objProjectLog.SaveAs "c:\temp\projectLog.txt"

但是,1) 它是一个 .txt 文件而不是日志文件,并且 2) 我不知道将它添加到我当前的 .vbs 脚本中的什么地方:

Option Explicit
Dim app

Call dowork

'shut down the app
If not (app Is Nothing) Then
    app.Quit
    Set app = Nothing
End If


Sub dowork()
    On Error Resume Next
    '----
    ' Start up Enterprise Guide using the project name
    '----
    Dim prjName
    Dim prjObject

    prjName = "C:\Users\kermit\Desktop\Project.egp"    'Project Name
      
    Set app = CreateObject("SASEGObjectModel.Application.8.1")
    If Checkerror("CreateObject") = True Then
        Exit Sub
    End If
    
    '-----
    ' open the project
    '-----
    Set prjObject = app.Open(prjName,"")
    If Checkerror("app.Open") = True Then
        Exit Sub
    End If
    
        
    '-----
    ' run the project
    '-----
    prjObject.run
    If Checkerror("Project.run") = True Then
        Exit Sub
    End If
    
            
    '-----
    ' Save the new project
    '-----
    prjObject.Save
    If Checkerror("Project.Save") = True Then
        Exit Sub
    End If
    
    '-----
    ' Close the project
    '-----
    prjObject.Close
    If Checkerror("Project.Close") = True Then
        Exit Sub
    End If
       
End Sub

Function Checkerror(fnName)
    Checkerror = False
    
    Dim strmsg
    Dim errNum
    
    If Err.Number <> 0 Then
        strmsg = "Error #" & Hex(Err.Number) & vbCrLf & "In Function " & fnName & vbCrLf & Err.Description
        'MsgBox strmsg  'Uncomment this line if you want to be notified via MessageBox of Errors in the script.
        Checkerror = True
    End If
         
End Function

最后,我想要的是在早上,我 运行 扫描 3 个项目日志文件的注释、警告和错误的程序,并向自己发送一封包含结果的电子邮件。因此,有没有办法在文件夹中导出 SAS 项目日志(非手动)?

那么,首先,这段代码在做什么?

Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()

这会清除项目日志。这需要在 之前完成,您的项目是 运行 - 否则日志包含过去 运行 的数据。所以把它放在 prjOBject.Run().

之前
objProjectLog.Enabled = True
'strProjectLog = objProjectLog.Text
objProjectLog.SaveAs "c:\temp\projectLog.txt"

然后将项目日志导出到文本文件。您当然可以随意调用该文本文件。您需要此代码在您的程序 运行 之后 出现 运行,并在它关闭之前的某处出现。在 PrjObject.Run() 之后可能没问题。

您需要更新名称以匹配您的 vbs 文件的名称 - 它们使用 objproject 而您的 vbs 使用 prjObject,但它们是同一回事,只需匹配名称即可。

其次 - 你还能做什么?如果 VBS 不是您的菜,您还有很多其他方法可以做到这一点。

  • 将您的 EG 项目导出到 .sas 文件,然后使用正常输出选项在 base SAS 中安排它。这也可以通过调度界面实现。
  • 使用 PROC PRINTTO 将您的日志重定向到您的 SAS 代码中。
  • 将您的 EG 项目复制到您可以看到的位置。 EG 项目确实包含 运行 所有内容的日志 - 所以没有理由你不能打开 .egp 并查看它,只要确保你没有对生产文件这样做,因为你可能会忘记关闭。

我的偏好不是排EG项目,而是排.sas程序;使用EG作为开发环境,然后导出为.sas。这为您提供了更大的灵活性。但是有很多不同的方法可以给这只猫剥皮。