我想要执行的代码,是独立于我目前的程序,通过键盘快捷键在增强编辑器在SAS 9.4 Windows。我取得了有限的成功,能够只执行宏语句。但是,我也希望能够执行非宏语句。我该怎么做?
到目前为止我已经搞清楚了。
一般设置
通过在命令提示符中输入“键”或提交到“键”菜单
dm 'keys';
对于其中一个键,输入定义
%put Hello, world!;
通过按Ctrl+s
保存新的键绑定。为了解释这个问题,我将把它绑定到F7
。一旦保存,按F7
和“你好,世界!”将被打印到日志上。
我们可以通过将上述代码放在宏中来进一步扩展这一概念。
%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
,并将其放在自动调用目录中。对于我来说,当我尝试执行此操作时,会得到以下错误:
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.
Via %
由于自动调用需要编译和调用宏,所以我认为%INCLUDE
可以直接执行代码。
创建一个名为HelloWorld.sas
的文件,其中包含%put Hello, world!
。将其保存到短文件路径。然后,在键菜单中将F7
绑定到%include "C:\Short Path\HelloWorld.sas";
。现在F7
将打印“你好,世界!”到原木上。
如果我们把
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.
其他。尝试
我还尝试将代码直接输入键定义,但同样,它似乎只适用于宏语句。
使用%SYSFUNC
可能是可能的,但我的最终目标是能够使用PROC SQL
或数据步骤,我认为%SYSFUNC
无法做到这一点。
发布于 2017-03-16 19:07:50
您可以使用submit命令,即将键定义为:
submit "data _null_ ; put 'Hello World!'; run;"
还可以使用宏调用:
submit "%HelloWorld()"
发布于 2017-03-16 19:41:41
基于@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>
窗口并输入:
submit "data pgm = work.saved_program; describe; execute; run;"
这将提交保存在您选择的任何库中的整个数据步骤。
https://stackoverflow.com/questions/42841397
复制相似问题