在最初打开SAS时定义宏

时间:2013-05-06 22:46:09

标签: 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*/

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

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

我看过使用sas配置文件,但我无法弄明白。而且我的系统被锁定了,所以如果有些不起作用,可以使用多种解决方案。

3 个答案:

答案 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会话时都会调用此文件。