运行 SAS 脚本的计划 .bat 文件无法分配库,但在手动运行时工作?

Scheduled .bat file running SAS script fails to assign library but works when manually run?

提问人:Hack-R 提问时间:5/18/2015 更新时间:5/18/2015 访问量:538

问:

我有一个计划任务,应该每天运行一个SAS脚本。但是,它不成功,并导致 的结果。0x2

文件很简单:.bat

"E:\Program Files\SAS\SASFoundation\9.2\Sas.exe" -sysin "C:\Documents and Settings\username\Desktop\myfolder\myscript.sas"

我已经记录了输出,它表明问题在于一个库(并且只有许多库中的一个库)没有被成功分配:

2          libname COOLDB ORACLE user=Laureate pw=mypass path=COOLDB schema=ODSMGR;
NOTE: Libref COOLDB was successfully assigned as follows: 
      Engine:        ORACLE 
      Physical Name: COOLDB
3          %let prj = T:\DNA\New Orleans\username\SAS Export Folder;
4          libname dt "&prj.";
NOTE: Library DT does not exist.

其中包含第一行只是为了证明它一直工作到那时。

这对我来说很奇怪,因为我 100% 确定被引用的文件夹/库存在并具有适当的权限。

当我手动运行相同的脚本时,没有问题:

3    %let prj = T:\DNA\New Orleans\username\SAS Export Folder;
4    libname dt "&prj.";
NOTE: Libref DT was successfully assigned as follows:
      Engine:        V9
      Physical Name: T:\DNA\New Orleans\username\SAS Export Folder
批处理文件 SAS 计划任务

评论

0赞 Bendy 5/18/2015
如果没有看到完整的日志,很难确定,但我注意到路径“SAS Export Folder”有空格。我认为空格可能是一个问题,具体取决于您运行的系统。如果您使用 '%let prj=%str(“T:\DNA\New Orleans\username\SAS Export Folder”);提交 .bat 文件时?
0赞 Hack-R 5/18/2015
@Bendy 好主意!!我会试一试并报告。这是日志中唯一的错误消息。
0赞 Hack-R 5/18/2015
@Bendy嗯,这就是结果:3 %let prj = %str("T:\DNA\New Orleans\username\SAS Export Folder"); 4 libname dt "&prj."; ERROR: Libref in LIBNAME statement must be followed either by quoted string or engine name or semicolon; """T" found. ERROR: Error in the LIBNAME statement.
0赞 Joe 5/18/2015
你那里有太多的引号。你要添加它们两次;将它们添加到宏变量赋值或 libname 赋值中(后者通常是首选)。
0赞 Hack-R 5/18/2015
@Bendy知道了!我使用了你的命令,没有任何引号,这奏效了!谢谢。如果您想将其作为答案发布,我会将其标记为解决方案%str()

答:

4赞 Bendy 5/18/2015 #1

根据服务器的不同,某些系统不喜欢空格(如 中所示),因此在这些情况下,您需要确保 libname 语句中的路径用引号括起来。SAS Export Folder

正如 Joe 所指出的,不要在引号上加倍,所以将路径传递为:

%let prj=%str(T:\DNA\New Orleans\username\SAS Export Folder);
libname dt "&prj.";

-或-

%let prj=%str("T:\DNA\New Orleans\username\SAS Export Folder");
libname dt &prj;