2013-05-06 57 views
2

我碰到一個非常好的宏觀跑了,我想作爲一個熱鍵使用:定義宏在初次打開SAS

%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

您不需要使用'%'在命令行上調用命令宏。只需鍵入宏的名稱,就像鍵入任何其他命令一樣。 – Tom 2015-11-13 18:30:01

回答

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; 

運行以上後,看看你的SASUSER庫中,你會看到目錄和宏條目。

options mstored sasmstore=sasuser; 
+0

我相信喬的解決方案更好,因爲它將允許多個「會話」使用宏。在Windows中,一次只有一個SAS會話可以使用SAS配置文件。如果宏已經存儲在一個配置文件中,如果您打開第二個會話,它將不可用。有趣的回答 - 雖然我不知道這個選項... – 2013-05-07 21:46:44

+0

雖然我猜想在OPs的情況下,因爲他在每個配置文件中設置了鍵綁定,所以對他來說不會是一個問題。 – 2013-05-07 21:53:43

+1

@RobPenridge實際上,只有一個SAS會話可以對同一個SAS配置文件進行寫入訪問;如果會話以'-rsasuser'選項開始,那麼他們可以獲得只讀訪問權限。但我同意,使用SASUSER以外的庫可能會更好。 – BellevueBob 2013-05-07 22:44:22

2

Bob的解決方案無疑是一個很好的,如果你能做到這一點:所以每次啓動SAS會話時執行該語句,然後添加到您的autoexec.sas程序。

自動調用宏是另一種選擇;您將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

請注意,在* NIX環境中,宏名稱和文件名區分大小寫。所以如果你有一個camelcase的宏名稱,比如'%DoSomeThing()',那麼這個文件名必須和'DoSomeThing.sas'匹配。如果您之前沒有遇到過這種情況,那麼這是一個容易犯的錯誤... – 2013-05-07 21:48:38

0

你可以把你的命令在autoexec.sas文件。每次打開SAS會話時都會調用此文件。