在最初打开SAS时定义宏

Dan*_*Dan 2 sas sas-macro

我遇到了一个非常好的宏,我想用作热键:

%macro closevts / cmd; 
  %local i; 
  %do i=1 %to 20;
    next "viewtable:"; end; 
  %end; 
%mend;

dm "keydef F12 '%NRSTR(%closevts);"; /*Sets F12 to close all view tables at once*/
Run Code Online (Sandbox Code Playgroud)

(来源:https://stackoverflow.com/a/3254004/110797)

问题是每次启动SAS时我都必须重新运行宏声明!上面的代码没有永久设置键绑定,但我认为该部分输出(只需进入键(F9)并手动将F12设置为%closevts,然后在关闭键窗口时将其保存为永久键). 如何永久设置宏定义?

我看起来使用sas配置文件,但我无法弄明白.此外,我的系统被锁定,因此如果有些不起作用,可以使用多种解决方案.

Bel*_*Bob 5

默认情况下,SAS宏会被编译并存储到您的WORK库中,这就是它们在会话结束时"消失"的原因.您可以使用宏语句store选项来编译和创建宏的永久副本.宏将存储到以系统选项sasmacr定义的任何库中命名的SAS目录中SASMSTORE.要在将来的程序中使用存储的宏,还需要使用MSTORED系统选项.

在您的情况下,由于您希望将其作为SAS会话的"默认",您可以使用您的SASUSER库,但它可以是任何已分配的库.在创建编译的宏时,请确保您具有对库的写访问权.

因此,在您的情况下,使用此程序来编译和存储您的宏:

options mstored sasmstore=sasuser;

%macro closevts / cmd store; 
  %local i; 
  %do i=1 %to 20;
    next "viewtable:"; end; 
  %end; 
%mend;
Run Code Online (Sandbox Code Playgroud)

运行上面的内容后,查看SASUSER库,您将看到目录和宏条目.然后将此语句添加到autoexec.sas程序中,以便每次启动SAS会话时执行:

options mstored sasmstore=sasuser;
Run Code Online (Sandbox Code Playgroud)