公告

[公告]
2014/01/17
由於已經是faculty的關係,不太有足夠時間寫部落格。因此更新的速度會相當緩慢。再加上近幾年來SAS GLOBAL FORUM沒有出現讓我覺得驚艷的技術文件,所以能分享的文章相對也減少許多。若有人推薦值得分享的SAS技術文件,請利用『問題討論區』告知。

2013/07/19
臉書留言板的功能因為有不明原因故障,因此特此移除。而intensedebate的留言板因管理不易,也一併移除。目前已經開啟內建的 G+ 留言系統,所以請有需要留言的朋友,可直接至『問題討論區』裡面留言。


2011年3月7日 星期一

A Macro to Create a Batch Submit SAS Program

原文載點: http://support.sas.com/resources/papers/proceedings10/092-2010.pdf

在一些很特殊的情況下,我們需要大量執行不同的 SAS 程式。若一個一個從 SAS 裡面開啟再執行,不但相當消耗時間,也不沒有太大的效率。Helen Sun 和 Cindy Wong 在 SAS Global Forum 2010 發表了一個簡易的巨集程式,讓 SAS 使用者在 PC 的視窗系統底下可以輕鬆批次地將同一個目錄底下的 SAS 程式碼給一次執行完畢。
假設有一堆 SAS 程式被儲存在 C:\temp 的目錄底下,如下圖所示:


先執行以下的巨集程式一次:

    %MACRO BATCH(dir=); 
      /*read in file names*/ 
      FILENAME dirfile PIPE "dir ""&dir"" /b" LRECL=200; 
      DATA in; 
        INFILE dirfile LENGTH=len; 
        INPUT char $varying200. len; 
      RUN; 
  
     /*only choose sas program names*/ 
     DATA sasprg; 
       SET in; 
       IF INDEX(char,'.sas '); 
     RUN; 
     /*create statement*/ 
     DATA line; 
       LENGTH name $200; 
       SET sasprg; 
       name="%include '"||trim(char)||"';"; 
       DROP char; 
     RUN; 
     /*write out to a file*/ 
     FILENAME fileref "&dir.batch.sas"; 
     DATA _null_; 
       SET line; 
       FILE fileref; 
       PUT name; 
     RUN; 
     FILENAME fileref clear; 
   %MEND; 


然後再把路徑輸進 %BATCH 裡面:


 %BATCH(dir=C:\temp\);

接著就會在這個路徑看到一個名為 batch.sas 的程式,打開來一看如下所示:

也就是說 %BATCH 幫使用者把該路徑底下的程式名稱一一放進 %include 裡面,然後我們就可以直接執行 batch.sas 這個程式來批次執行該目錄底下所有 SAS 程式。

CONTACT INFORMATION
Helen Sun
SAS Programmer
hsun@robarts.ca
Robarts Clinical Trials
Robarts Research Institute
 P.O. Box 5015, 100 Perth Drive
London, Ontario, Canada
N6A 5K8
Tel: 519-931-5700x24254
Fax: 519-931-5284
www.robartsclinicaltrials.ca

沒有留言:

張貼留言

要問問題的人請在文章下方的intensedebate欄位留言,請勿使用blogger預設的意見表單。今後用blogger意見表單留言的人我就不回應了。

CODE { display: block; /* fixes a strange ie margin bug */ font-family: Courier New; font-size: 8pt; overflow:auto; background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y; border: 1px solid #ccc; padding: 10px 10px 10px 21px; max-height:200px; height:200px; // for IE6 line-height: 1.2em; }