【问题标题】:SAS: Toggle DM commands when running in batch modeSAS:在批处理模式下运行时切换 DM 命令
【发布时间】:2018-07-03 18:51:41
【问题描述】:

我正在使用适用于 Windows 7 的 SAS 9.4。当我以批处理模式运行任何东西时,例如 SASUnit,我会看到一个对话框说明

此窗口在行模式下不可用。

我的AUTOEXEC.sas 包含这两行打开工作库并最大化 IDE 窗口:

dm 'dmsexp; expand libraries; expand work;';
dm 'awsmaximize on';

这个错误是因为批量运行时没有窗口环境。 dm 语句不适用。

似乎显而易见的解决方案,即测试 SAS 是否以批处理模式运行,不适用于 Windows。 SYSENV 变量“报告 SAS 是否以交互方式运行”。然而on WindowsSYSENV 始终包含值FORE,该值表示“当您通过窗口环境交互式运行 SAS 时”。

除了打开我的AUTOEXE.sas 并在我需要批量运行某些东西时每次 注释掉这两行之外,还有其他解决方法吗?也许有命令行开关,例如 Emacs 的--no-init-file,它跳过运行AUTOEXEC.sas

【问题讨论】:

  • 如果你想使用-noautoexec 命令行选项。

标签: sas


【解决方案1】:

如果您想知道是否可以使用显示管理器命令,只需检查显示管理器是否正在运行。

%if DMS=%sysfunc(getoption(dms)) %then %do;
  dm 'dmsexp; expand libraries; expand work;';
  dm 'awsmaximize on';
%end;

请注意,从 SAS 9.4M5 开始,您可以在 autoexec.sas 文件中包含此确切代码,而无需先将其包装到宏中。

如果您使用的是旧版本的 SAS,那么您可以使用带有 call execute() 的数据步骤。

data _null_;
  if 'DMS'=getoption('dms') then call execute(
  "dm 'dmsexp; expand libraries; expand work';dm 'awsmaximize on';"
  );
run;

【讨论】:

  • 我发现这是一个奇怪错误的来源。如果 AUTOEXE.sas 仅包含您的响应中给出的行,则增强编辑器将打开 WORK 库并最大化。惊人的。然而,出现以下错误。使用新的 SAS 会话(在打开时运行 AUTOEXE.sas)时,提交 **; 会引发 ERROR 180-322: Statement is not valid or it is used out of proper order. 错误只发生一次。再次提交**; 不会导致错误。我可以通过将您的响应包装在一个宏中并调用它来解决这个问题:%macro SetIDEDefaults(); ... %mend; %SetIDEDefaults();
  • 重读你的帖子,我看到你说应该用宏包起来!谢谢!
  • 从 SAS 9.4M5 版本开始,您不需要创建宏来运行这种简单的 %IF/%THEN/%DO/%END 代码块。如果您的 SAS 版本较旧,那么是的,您需要将该代码包装在宏中并调用该宏。或者使用带有调用执行的数据步骤来有条件地运行代码。
【解决方案2】:

在将 SAS 作为批处理作业调用时,只需使用 -noterminal 选项。

https://support.sas.com/documentation/cdl/en/hostwin/69955/HTML/default/viewer.htm#p16esisc4nrd5sn1ps5l6u8f79k6.htm

还有:

注意:-NOSTATUSWIN 选项使您能够以批处理模式运行 SAS,这样就不会显示任何窗口。您可以添加 -NOTERMINAL、-NOSPLASH、-NOSTATUSWIN 和 -NOICON 等选项来阻止窗口显示。

【讨论】:

    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多