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意見表單留言的人我就不回應了。