SAS:使用热键执行 SAS 代码

SAS: Execute SAS code using hotkey

我想通过 SAS 9.4 Windows 增强编辑器中的键盘快捷键执行 独立于我当前程序 的代码。我已经取得了有限的成功,只能执行宏语句。但是,我也希望能够执行非宏语句。我该怎么做?

以下是我目前所了解的内容。

常规设置

通过在命令提示符中输入 "KEYS" 或提交

进入 KEYS 菜单
dm 'keys';

对于其中一个键,输入定义

%put Hello, world!;

Ctrl+s 保存新的键绑定。为了便于说明,我将其绑定到 F7。保存后,按 F7 并且 "Hello, world!" 将打印到日志中。

我们可以通过将上述代码放在宏中来进一步扩展这个概念。

%macro HelloWorld();
  %put Hello, world!;
%mend;

编译 %HelloWorld 宏。如果我们然后将 %HelloWorld(); 绑定到 F7,我们可以证明可以使用快捷方式调用宏。

通过自动呼叫

我们可以更进一步,将 %HelloWorld 宏保存为程序 HelloWorld.sas。如果我们然后将其放入 AUTOCALL 库(运行 %put %sysfunc(pathname(sasautos)); 以查找它们在您的计算机上的位置),我们可以在任何新的 SAS 会话中执行它。

但是,似乎只有宏语句才适用于此方法。为了证明这一点,假设我们将 %HelloWorld 定义为

%macro HelloWorld();
  data _null_;
    put 'Hello, world!';
  run;
%mend;

同样,将其另存为 HelloWorld.sas 并将其放在 AUTOCALL 目录中。对我来说,当我尝试执行此操作时,出现以下错误:

ERROR: The SAS/EIS product with which the procedure is associated is either not licensed for
       your system or the product license has expired. Please contact your SAS installation
       representative.

通过 %INCLUDE

由于AUTOCALL 需要编译调用宏,我想%INCLUDE 可以直接执行代码。

创建一个名为 HelloWorld.sas 的文件,其中包含 %put Hello, world!。将其保存到一个短文件路径。然后,在 KEYS 菜单中将 F7 绑定到 %include "C:\Short Path\HelloWorld.sas";。现在 F7 会将 "Hello, world!" 打印到日志中。

如果我们改为保存

data _null_;
  put 'Hello, world!';
run;

HelloWorld.sas并尝试使用我们的%INCLUDE快捷方式运行它,我收到同样的错误:

ERROR: The SAS/EIS product with which the procedure is associated is either not licensed for
       your system or the product license has expired. Please contact your SAS installation
       representative.

杂项。尝试次数

我也试过将代码直接输入到 KEYS 定义中,但同样,它似乎只适用于宏语句。

也许可以使用%SYSFUNC,但我的最终目标是能够使用PROC SQL或数据步骤,我认为%SYSFUNC不能做到这一点。

可以使用提交命令,即定义一个key为:

submit "data _null_ ; put 'Hello World!'; run;"

也适用于宏调用:

submit "%HelloWorld()"

根据@Quentin 的回答,如果您的数据步很大,您可以编写数据步并将其保存为编译程序:

/* store your datastep (below stored in WORK, can be stored in any defined library */
data male female / pgm=work.saved_program;
    set sashelp.class;
    if SEX="M" then output male;
        else output female; 
run;

然后按照@Quentin 的建议,转到您的 KEYS<DMKEYS> window 并输入:

submit "data pgm = work.saved_program; describe; execute; run;"

这将提交保存在您选择的任何库中的整个数据步骤。