我遇到了一个非常好的宏,我想用作热键:
%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配置文件,但我无法弄明白。而且我的系统被锁定了,所以如果有些不起作用,可以使用多种解决方案。
答案 0 :(得分:5)
默认情况下,SAS宏会被编译并存储到您的WORK库中,这就是它们在会话结束时“消失”的原因。您可以使用宏语句store
选项来编译和创建宏的永久副本。在sasmacr
系统选项定义的任何库中,宏将存储到名为SASMSTORE
的SAS目录中。要在将来的程序中使用存储的宏,您还需要使用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;
答案 1 :(得分:2)
Autocall宏是另一种选择;您将SASAUTOS目录设置为包含本地目录:
Options Mautosource
Sasautos=(’g:\busmeas\’,’k:\finance\’,’c:\product\’);
然后,您只需将宏放入一个只包含该宏的文件中,并使用宏名称命名(因此%mymacro将存储在mymacro.sas中)。当获得宏调用时,SAS将自动查看该目录,并在需要时进行编译。
您还可以在自动执行中运行宏,即使您完全被锁定(将其作为快捷方式的一部分),您也应该能够自动提交该宏。更多详细信息请参见:http://www.sascommunity.org/wiki/Batch_processing_under_Windows
这主要是关于批处理,但很多笔记对DM工作也很有用。
例如,从该页面,您的快捷方式可能指向:sas -autoexec MyPersonalAutoExec.sas
,该文件中的任何(普通SAS)代码都将在启动时运行。
答案 2 :(得分:0)
您可以将命令放在autoexec.sas文件中。每次打开SAS会话时都会调用此文件。