說明:要調整 sas work library 的位置。
改變 work library 的實體位置
- 直接在電腦左下「程式集」按右鍵修改 SAS 的捷徑,在最尾端加上
-WORK "d:\SAS Temporary Files"
- 或是去改個人設定檔,先查設定檔在哪
proc options option=config;run;
查看 log 應可見 CONFIG=C:\Program Files\SASHome2\SASFoundation\9.4\nls\zt\sasv9.cfg 之類的
用文字編輯器打開加入以下
-WORK "d:\SAS Temporary Files"
上面 proc option 的地方,若想做成 macro variable 可用
%put %SYSFUNC( GETOPTION( CONFIG )) ;
想完整列出所有option 用
proc options host;run;
ref: SAS System Options by Category
http://support.sas.com/documentation/cdl/en/hostwin/69955/HTML/default/viewer.htm#n0qn87565ybxoun12srorc6xhpz5.htm
說明:建立一個program,把開啟SAS想要 pre-loading 的相關程式,都納入,方便管理
預載 program
-AUTOEXEC "D:\99_Tool\OneDrive\SAS_self\mysas\AUTOEXEC.SAS"
可以查詢 proc options option=Autoexec; run;
- 或是所有想載入的所有程式放進 AUTOEXEC.SAS 裡帶入
%inc "program path" / source2 ;
上面 source2 會把原本的程式 put 出來
ref: Store and Recall Macros with SAS Macro Libraries
說明:單純預載需要的 macro
預載需要的 macro 有以下方法
- 直接用 %inc
- 讀取 compiled sas macro
- Autocall library
1. 直接用 %inc
若是同 folder 多個以 sas as the file extension 的 program ,可以用
filename files "program folder";
%include files(name_of_program 1);
%include files(name_of_program 2);
2. 讀取 compiled sas macro
第1.設定 System options to store 以及 Macro options to store ,做出 compiled sas macro , dlcreatedir 可用來建立 folder
options dlcreatedir mstored sasmstore=one;
libname one "d:\test";
%Macro DAY1() / store source des="a test for store macro";
%put 今日是 &sysdate;
%Mend DAY1;
%Macro DAY2() / store source des="a test for store macro";
%put 明日是 %sysfunc(intnx(DAY, "&sysdate"d ,1),DATE7.);
%Mend DAY2;
第2.下次要用時,也要設定 mstored sasmstore
libname one "d:\test";
options mstored sasmstore=one;
%DAY1();
%DAY2();
若有多個 lib 可以用
options mstored sasmstore=ALL_LIB;
libname one "d:\test";
libname two "d:\test\two";
libname ALL_LIB (one two);
第3.可用以下做個確認
proc catalog catalog=one.sasmacr;
contents;
quit;
第4.這類 compiled sas macro ,可以用 %copy
在 log 取得原始碼
options mstored sasmstore=one;
%copy DAY1 /source;
3. Autocall library
第1.建立好自己的 macro ,並確認沒有 store source
%Macro DAY1() / des="a test for store macro";
%put 今日是 &sysdate;
%Mend DAY1;
第2.設定 System option to recall
Options mautosource sasautos=one;
filename one 'd:\test';
*;
%DAY1();
這兒 macro 的 compile 是發生在第4行時(叫出來用),並存在WORK裡。前項 folder 之下所有 sas file 的 macro 都可直接呼叫。
注意,如果第一次呼叫失敗,修改好程式後,要把 sas 關了再開重跑。
所以若原本有 store source
,那就有額外 option 要處理,我猜測是 mstored sasmstore 以及 sasmstore 的 library 之類的。
第3. 多個位置的應用。用逗號或 space 分開
Options mautosource sasautos= (one,two) ;
filename one 'd:\test';
filename two 'd:\test\two';
*;
%DAY1();
*;
%DAY2();
整體來說,前3個方法可以用在同1個 program 裡,它們的 search sequence 為
- current session 做出來的 (WORK.SASMACR) ,如 %inc 或當下寫的
- compiled sas macro
- Autocall library
- SASHELP
ref: Store and Recall Macros with SAS Macro Libraries
說明:單純預載需要的 format
預載 format
- 用 %inc 來 reload
- 不reload的方式
不reload的方式
第1.前次 format 再建立時要指定輸出的 LIBRARY
options dlcreatedir;
libname one "d:\test";
PROC FORMAT LIBRARY=one PAGE;
value $sex ‘M’=’Male’
‘F’=’Female’;
run;
那個 PAGE 是同時把 format print 出來看
第2.後續要用時
libname one "d:\test";
proc format library=one; run;
第3.如果想 check
proc catalog catalog=one.formats;
contents;
quit;
proc format library = one.formats;
select $sex;
run;
ref: Base SAS® 9.4 Procedures Guide,