我想將宏存儲在目錄中。這樣做可以讓許多宏只與一個文件共享,並且引入了與用戶分離的程度。SAS:重命名宏目錄
來存儲我的宏,我運行一個程序,如
/* HelloWorld.sas */
libname pwd "."; /* assign current directory */
option mstored sasmstore=pwd; /* set pwd as storage directory */
%macro HelloWorld()
/store source; /* store compiled macro along with its source */
data _null_;
put "Hello, World!";
run;
%mend;
這在目錄中創建一個sasmacr.sas7bcat
文件,在其中HelloWorld.sas
生活。然後我可以在文件移動到另一個目錄,如C:\myMacros
和運行下面的程序:
/* CallHelloWorld.sas */
libname myMacros 'C:\myMacros';
option mstored sasmstore=myMacros;
%HelloWorld();
宏HelloWorld()
被稱爲沒有錯誤。但是,如果我想將HelloWorld()
宏作爲「HelloWorld」宏套件的一部分,我不能簡單地將Windows資源管理器中的目錄名稱從sasmacr.sas7bcat
更改爲HelloWorld.sas7bcat
。當我這樣做並嘗試再次運行CallHelloWorld.sas
(關閉並重新打開SAS後),宏未解析。
1 /* CallHelloWorld.sas */
2 libname myMacros 'C:\myMacros';
NOTE: Libref MYMACROS was successfully assigned as follows:
Engine: V9
Physical Name: C:\myMacros
3 option mstored sasmstore=myMacros;
4
5 %HelloWorld();
-
180
NOTE: The SAS System was unable to open the macro library referenced by the SASMSTORE = libref
MYMACROS.
WARNING: Apparent invocation of macro HELLOWORLD not resolved.
ERROR 180-322: Statement is not valid or it is used out of proper order.
ERROR: Catalog MYMACROS.SASMACR does not exist.
NOTE: The SAS System was unable to open the macro library referenced by the SASMSTORE = libref
MYMACROS.
ERROR: An error occurred during the execution of the %COPY statement.
如何更改包含宏的目錄的名稱,以便可以在各種程序中調用這些宏?是否可以預先命名目錄與sasmacr
不同?
我堅決主張在唯一命名的目錄中需要宏。關鍵是能夠與其他人分享項目特定的宏。目錄似乎是SAS認可的唯一容器。如果沒有目錄,宏必須在加載前的某個時刻作爲單個文件存在。這可能會造成損失,修改等情況。它會限制控制。此外,在使用同一人員處理多個項目時,單個目錄名稱會成爲問題。一個人可能有幾個'sasmacr'文件,每個文件對應不同的項目。解決方案是單獨的目錄名稱。 –
從SAS:認證準備指南,第4部分,第12章,「使用存儲的編譯宏」一節中,「Sasmacr是唯一可以存儲編譯宏的目錄,您可以在任何SAS庫中創建一個名爲Sasmacr的目錄。不要重命名此目錄或其條目。「是否可以將'sasmacr'本身存儲在一個可能具有唯一名稱的目錄中? –
解決方案有幾個不同的_folders_,至少據我可以告訴SAS你會這樣做。然後libname到每個文件夾。這就是你的第二個評論的答案:把每個文件夾放在一個唯一的文件夾中,然後將libname放到每個文件夾中,這實際上就是你所描述的所有意圖和目的。 – Joe