首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SAS:使用热键执行SAS代码

SAS:使用热键执行SAS代码
EN

Stack Overflow用户
提问于 2017-03-16 17:50:28
回答 2查看 585关注 0票数 0

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

到目前为止我已经搞清楚了。

一般设置

通过在命令提示符中输入“键”或提交到“键”菜单

代码语言:javascript
运行
复制
dm 'keys';

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

代码语言:javascript
运行
复制
%put Hello, world!;

通过按Ctrl+s保存新的键绑定。为了解释这个问题,我将把它绑定到F7。一旦保存,按F7和“你好,世界!”将被打印到日志上。

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

代码语言:javascript
运行
复制
%macro HelloWorld();
  %put Hello, world!;
%mend;

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

通过自动调用

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

但是,似乎只有宏语句可以使用此方法。为了演示这一点,假设我们将%HelloWorld定义为

代码语言:javascript
运行
复制
%macro HelloWorld();
  data _null_;
    put 'Hello, world!';
  run;
%mend;

同样,将其保存为HelloWorld.sas,并将其放在自动调用目录中。对于我来说,当我尝试执行此操作时,会得到以下错误:

代码语言:javascript
运行
复制
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将打印“你好,世界!”到原木上。

如果我们把

代码语言:javascript
运行
复制
data _null_;
  put 'Hello, world!';
run;

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

代码语言:javascript
运行
复制
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无法做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-16 19:07:50

您可以使用submit命令,即将键定义为:

代码语言:javascript
运行
复制
submit "data _null_ ; put 'Hello World!'; run;"

还可以使用宏调用:

代码语言:javascript
运行
复制
submit "%HelloWorld()"
票数 3
EN

Stack Overflow用户

发布于 2017-03-16 19:41:41

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

代码语言:javascript
运行
复制
/* 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;"

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42841397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档