2

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

%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*/

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

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

我查看了使用 sas 配置文件,但我无法弄清楚。另外,我的系统已被锁定,因此如果有些解决方案不起作用,我们将不胜感激。

4

3 回答 3

5

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

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

所以,在你的情况下,使用这个程序来编译和存储你的宏:

options mstored sasmstore=sasuser;

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

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

options mstored sasmstore=sasuser;
于 2013-05-06T23:43:51.333 回答
2

如果你能做到,鲍勃的解决方案肯定是一个很好的解决方案。

自动调用宏是另一种选择;您将 SASAUTOS 目录设置为包含本地目录:

Options Mautosource
  Sasautos=(’g:\busmeas\’,’k:\finance\’,’c:\product\’);

然后,您只需将宏放入一个文件中,其中仅包含该宏,并以宏名称命名(因此 %mymacro 将存储在 mymacro.sas 中)。SAS 将在收到宏调用时自动查找该目录并在需要时对其进行编译。

您还可以在您的 autoexec 中运行宏,即使您完全被锁定,您也应该能够自动提交(将其作为快捷方式的一部分)。更详细的信息可以在这里找到:http: //www.sascommunity.org/wiki/Batch_processing_under_Windows
这主要是关于批处理的,但是很多注释对于 DM 工作也很有用。

例如,从该页面,您的快捷方式可能指向:sas -autoexec MyPersonalAutoExec.sas并且该文件中的任何(普通 SAS)代码都将在启动时运行。

于 2013-05-07T15:00:45.020 回答
0

您可以将命令放在 autoexec.sas 文件中。每次打开 SAS 会话时都会调用此文件。

于 2015-11-13T18:15:37.307 回答