我想通过SAS 9.4 for 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.
由于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
可以做到这一点。
答案 0 :(得分:3)
您可以使用submit命令,即将键定义为:
submit "data _null_ ; put 'Hello World!'; run;"
也适用于宏调用:
submit "%HelloWorld()"
答案 1 :(得分:2)
建立@ Quentin的答案,如果您的datastep很大,您可以编写datastep并将其保存为编译程序:
KEYS<DMKEYS>
然后在@Quentin建议的情况下,转到submit "data pgm = work.saved_program; describe; execute; run;"
窗口并输入:
{{1}}
这将提交保存在您选择的任何库中的整个datastep。