首页 > 解决方案 > 如何使用 Python 脚本自动化 SAS 企业指南报告?

问题描述

我尝试使用 SASpy,但它不起作用。我能够打开 SAS .egp 文件,但无法按顺序运行其中的多个脚本。

import os, sys, subprocess
def OpenProject(sas_exe, egp_path):
    sasExe = sas_exe
    sasEGpath = egp_path
    subprocess.call([sasExe, sasEGpath])

sas_exe = path\path\
egp_path = path\path\path\

OpenProject(sas_exe, egp_path)

标签: pythonautomationsasenterprise-guide

解决方案


这在一定程度上取决于工作流程到底是什么。一些旁注,然后是完整的解决方案。


首先:在我看来,EGP 并不是真正打算存储生产过程。EGP 应该真正用于开发,然后使用 .sas(文本)文件完成生产。EGP可以直接将节点存储为.sas文件;如果您想了解更多信息,请提出一个新问题,但这很容易弄清楚。最佳实践是让 EGP 将代码模块保存为 .sas 文件,然后运行这些文件 - SASPy 会轻松为您完成。

第二:如果你使用 SAS 的内置 Git 连接,那么我怀疑你可以更容易地做到这一点。如果您已经将 Git 用于其他进程,请考虑这样做。同样,您最终会得到一个 .sas 文件,并且可以通过 SASPy 直接运行它。


那么:假设你必须使用 .egp 本身,而没有太多不同的移动部件,你怎么能在 Python 中做到这一点?这里的关键是 .egp 格式。EGP 是一个容器文件,它实际上是一个 .zip 格式的容器,其中包含您要运行的所有 SAS 代码,例如 text。xml 格式的文本,但仍然是文本。

您可以编写一个 python 程序,使用该库将 .egp 作为 .zip 文件打开zipfile,然后用于xml.etree.ElementTree解析该project.xml项目中的文件。你从那里做什么取决于你的具体细节,而且远远超出了 Stack Overflow 答案的范围,但如果你在视觉上做得更好,你可以简单地将 .egp 重命名为 .zip ,然后在你选择的解压缩程序中打开,然后在您的文本编辑器中浏览 project.xml,并找到与这些节点相关的节点和代码。

然后,您可以将 .sas 代码提取为文本,并通过 SASPy 直接提交,或者将其提取到 .sas 文件中,然后根据您的喜好(SASPy 或其他)提交。

我为一个项目做了类似的事情——我实际上并没有从中运行代码,我只是解析它以验证正确的程序是否从 EGP 同步到生产——但实际提交代码是微不足道的根据我所写的,总共大约 50 行代码。我可能会在今年或明年就这个主题写一篇 SGF 论文,在这种情况下,我会尽量记住在这里提交 - 或者你可以前往我的github 页面,看看它是否在那里(将来!)。


推荐阅读