2009-04-28 70 views
2

有沒有在Windows編譯SAS 9.1.3 SCL碼(注:不是普通的SAS代碼)的編程方法?我發現這樣做的唯一方法是使用SAS GUI:我們有一個Perl腳本,它向用戶界面發送擊鍵。雖然這可以工作(有點),但它很醜陋,容易出錯,而且太脆弱了,無法添加到我們的自動構建腳本中。編譯SAS SCL代碼編程

編輯:我原來的問題可能是有些不清楚。我知道proc build;我的問題是首先將一些純文本作爲SCL條目放入SAS目錄中。

回答

4

我發現這是一個先有雞還是先有蛋那樣的問題。我發現,這是唯一可能獲得的純文本到SCL項,通過使用已經存在的SCL條目...

我有一個設置,在那裏我閱讀和目錄條目編寫SCL代碼,往返於平原文本文件。我將其用於版本控制目的(CVS)。

儘管CVS主要用於純文本代碼,它也可以處理二進制文件。因此我創建了一個SCL條目(稱爲FILE2SCL),它可以將純文本導入其他SCL條目。然後我將PROC SCORT輸入到一個二進制文件中,並將其檢入到CVS中。

這樣,我總是可以以編程方式從CPORT文件中獲取此SCL條目,並使用此SCL條目將SCL代碼從純文本導入到其他SCL條目中。之後我可以使用PROC BUILD來編譯SCL條目,就像你提到自己一樣。

我FILE2SCL條目看起來是這樣的:

INIT: 
    /***************************************************************/ 
    /*                */ 
    /* Call this SCL like this:         */ 
    /* %let srcFile=D:\work\dummy.scl;        */ 
    /* %let dstEntry=WORK.NEW.DUMMY.SCL;       */ 
    /* proc display catalog=work.cat.file2scl.scl;     */ 
    /* run;              */ 
    /*                */ 
    /***************************************************************/ 

    length Rc   8; 
    length theFile $ 200; 
    length theEntry $ 128; 

    theFile=symget('SRCFILE'); * Source file *; 
    theEntry=symget('DSTENTRY'); * Destination entry *; 

    * Assign filename *; 
    Rc=filename('temp',theFile); 

    * Include external file into preview buffer *; 
    Rc=PREVIEW('INCLUDE','temp'); 
    * Save contents of preview buffer to SCL entry *; 
    Rc=PREVIEW('SAVE',theEntry); 
    Rc=PREVIEW('CLEAR'); 
    Rc=PREVIEW('CLOSE'); 

    * Deassign filename *; 
    Rc=filename('temp',''); 
return; 

的註釋說明如何使用它: 與設置SAS宏變量,「SRCFILE」,包含對您的SCL源代碼文件的路徑開始,和另一個宏變量「dstEntry」來包含您希望SCL條目所在的入口路徑。然後PROC DISPLAY FILE2SCL條目,它會將您的SCL源代碼導入到指定的SCL條目中,然後您可以使用PROC BUILD進行編譯。

0

此外,您可以使用EclipseESLink plugin檢出。它是專門爲此目的而設計的(將SCL代碼保存在用於版本控制的常規文件中,並具有編譯成目錄的功能)。