SAS 批处理作业中的 lst 授权不足

Insufficient authorisation to lst in SAS batch job

今天我遇到了一个问题并解决了它,但我不太清楚为什么会出现这个问题。 我们有一个 SAS 批处理作业:

/path_to_script/sasbatch.sh -log /some_path/Logs/replication_#Y.#m.#d_#H.#M.#s.log -batch -noterminal -logparm "rollover=session" -sysin /another_path/macros/replication.sas

今天作业因错误而失败:

ERROR: Insufficient authorization to access /sas_path/sasconfig/Lev1/SASApp/replication.lst.

我发现错误的原因是 NOPRINT 语句不存在于 PROC SQL 语句之一中。将 NOPRINT 嵌入 PROC SQL header 后正常工作。

那么 NOPRINT 在 SAS 作业中真正起到什么作用,为什么会导致错误?

错误诊断

您没有在您的 SAS 批处理作业中设置 -print 选项,因此它选择写入默认目录。提交作业的用户没有此目录的写入权限:

/sas_path/sasconfig/Lev1/SASApp

NOPRINT 选项和典型用途

PROC SQL 语句中的 NOPRINT 选项会抑制 SQL 过程的任何输出。您的 SQL 过程中必须有一个正在生成输出的语句,通常类似于:

select col1 into :c1
from table;

它会产生不必要的输出,因为它正在创建一个名为 c1 的宏变量,可以在程序的其他地方使用。

决议

设置 NOPRINT,或将批处理作业中的 -print 选项设置为可写目录,并根据需要 review/delete 输出文件。

NOPRINT 防止将任何内容写入 lst 文件。第一个文件是输出 window 的批处理等价物。在交互式会话中将写入输出 window 的任何内容(因为 ODS LISTING 处于活动状态)都将写入 lst 文件。我总是 运行 批处理作业 NOPRINT