如何在 Linux 上运行 SAS 代码

这个问题的大多数答案都假定您已经有 SAS,只是想让它不带界面运行。这一篇是写给另一种情况的:程序在,许可证不在,而作业今晚仍然必须在服务器上跑完。

简短的回答

Jenner 是单个二进制文件。把它放到服务器上,指向一个 .sas 文件,它就运行——没有图形界面,不需要显示器,没有要连上的许可证服务器,启动时也没有需要签出的东西。程序失败时它以非零值退出,而这正是调度器真正在意的部分。如果您还在比较方案,下面的问题列出了 Linux 用户真正拥有的每一条路径,也包括不是我们的那些。

按照 Linux 上工作真正被执行的方式构建

从 cron 调用它,从 systemd 定时器调用,从 Airflow 任务调用,从 GitHub Actions 作业调用,或者在容器内部调用。它从标准输入(stdin)读取,向标准输出(stdout)和日志文件写入,因此它与机器上已有的工具组合在一起,而不是要求一个会话。

在 Linux 上运行的内容

Jenner 与 SAS 兼容:您的程序已经使用的那门语言,在服务器上以与您今天相同的语句名和选项名运行。

DATA 步、PROC SQL 与宏

语言的核心按原样运行——DATA 步逻辑、数组、格式与输入格式、宏功能以及 PROC SQL。针对 SAS 9.4 语法编写的代码不需要移植步骤。

100 个过程

回归与线性模型、生存分析、多元方法与聚类、时间序列、质量控制、汇总与报表。每个过程都有已发布的参考页面,因此计划任务的依赖可以在排期之前核对。

已经在服务器上的文件

Jenner 直接读写 SAS7BDAT 和 XPT,同时支持 CSV 和 Parquet。挂载卷或对象存储上的数据集无需转换,输出也可以按下游作业预期的格式写回。

分析师写下的同一个程序

同一份源代码在 Linux、macOS 和 Windows 上运行。在某人笔记本上开发的程序,在这里可以原样作为计划任务运行,这就去掉了通常横在分析与生产之间的那次重写。

可以展示的结果

Jenner 通过了 NIST Statistical Reference Datasets 基准中全部 58 个数据集,这是统计软件精度方面通行的第三方测试套件。过程参考文档已全文发布,因此“某个特定 PROC 受支持”这一说法,在把它放进流水线之前就可以核实。

常见问题

安装 Jenner 的二进制文件并对该文件运行它。它是 SAS 语言的独立实现,因此可以在没有 SAS、也没有 SAS 许可证的情况下直接在 Linux 上执行 .sas 程序。事先不做任何转换。

可以。Linux 是 SAS 9.4 支持的平台,所以这不像 Apple 芯片那样是平台问题。障碍是许可证,在服务器上通常还包括许可证服务器:连不上它的机器就跑不起来。

可以。没有图形界面,也没有任何需要显示器的东西。它是一个普通的命令行程序,而这正是它在您只通过 SSH 访问的机器上可用的原因。

不需要。Jenner 是 SAS 语言的洁净室实现,不嵌入、不封装、也不调用 SAS 软件。没有需要续订的许可证,也没有会让作业在凌晨两点失败的许可证服务器。

把二进制文件复制进镜像,作为入口点调用,或者从您自己的脚本中调用。它启动时不需要守护进程、显示器或网络调用,因此运行它的容器和您选择的基础镜像一样小、一样可复现。

可以,而且这是人们来到这里的常见原因。因为它是一个带有有意义退出码的单一二进制文件,CI 作业可以把 .sas 程序作为构建步骤运行,并在程序失败时让流水线失败。从 cron、systemd 定时器或 Airflow 排期同样有效。

会。失败的程序以非零值退出,因此 cron 邮件、systemd 单元或流水线步骤看到的是失败本身,而不是一次干净的运行加上一个埋在日志里的错误。这一点值得在您采用的任何东西上核实:满屏红字的日志配上零退出码,正是夜间失败得以隐身的方式。

这是我们的意图。同一份源代码在 Linux、macOS 和 Windows 上运行,因此分析师的文件和计划任务的文件是同一个文件。覆盖范围并非整门语言,所以就您自己的代码而言,诚实的确认方式是在两处都运行一遍并比较日志。

Altair SLC 同样在没有 SAS 许可证的情况下运行 SAS 语言程序,Linux 也包括在内,而且比我们做得久得多。对于一个别人的边缘情形早已出现并被修复过的服务器群来说,这份积累值真金白银。两者都比较一下。 该产品现在由西门子以 Rapidminer SLC 的名义销售,因此两个名称都值得搜索。

往往确实应该。在服务器上这比在别处更有吸引力,因为周边工具本来就是 Python。如果 SAS 代码不多,或者团队反正要离开 SAS,那就重写。继续按原样运行它的理由最充分的情形是:代码量大、已经过验证,而重写意味着重新验证而不仅仅是重新编码。

在您的 Linux 服务器上运行 SAS 程序

一个二进制文件,没有许可证服务器,以及一个您的调度器可以信任的退出码。

开始免费试用