python - 如何使用 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)
解决方案
这在一定程度上取决于工作流程到底是什么。一些旁注,然后是完整的解决方案。
首先:在我看来,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 页面,看看它是否在那里(将来!)。
推荐阅读
- c++ - 如何使用 PCL 1.9 制作我们自己的点类型
- javascript - 如何通过javascript中的多个键对对象数组进行分组
- reactjs - 在自定义文档 (Next.js) 中使用 React 上下文
- memcpy - 为什么Linux系统中调用memcpy的性能很差而且有波动
- ios - Swift 参数类型“XXX”应为类或类约束类型的实例
- r - 发散图的 x 轴起始值
- sql - 如何提取数值的最后 4 位?
- unit-testing - gtest 初始化失败,如果在包中调用 InitGoogleTest
- firebase - Firebase 推送通知在 ios 设备中不起作用
- python - 是否有必要在 PCA 之后对数据进行标准化以将其作为聚类的输入?