2010-10-25 128 views
2

PROC當指定要在其中存儲已編譯函數/子例程的輸出數據集時,FCMP需要三級參數。 但是,當使用這些編譯函數時,SAS需要全局選項CMPLIB的兩級參數。什麼是使用PROC FCMP時的軟件包?

文檔說:

注意:子程序和函數的名稱必須是包中是唯一的。但是,不同的包可以具有相同名稱的子例程和函數。要選擇 當有歧義一個特定的ç子程序,預連接與 包名稱和週期X的子程序名(。)例如,要獲得倒數的MthFncs版本, 使用MthFncs.inverse

但我一直沒有能夠重現這種行爲。當這樣做的:

proc fcmp outlib=work.functions.pkg1; 
    function test(var1, var2); 
    return (var1+var2); 
    endsub; 
run; 
proc fcmp outlib=work.functions.pkg2; 
    function test(var1, var2); 
    return (var1*var2); 
    endsub; 
run; 
option cmplib=work.functions; 
data _null_; 
    a=test(3,3); 
    b=pkg1.test(3,3); 
    c=pkg2.test(3,3); 
    put a= b= c=; 
run; 

程序崩潰並說:

ERROR: DATA STEP Component Object failure. Aborted during the COMPILATION phase. 
31 b=pkg1.test(3,3); 
     _________ 
     557 
ERROR 557-185: Variable pkg1 is not an object. 

這不是包裝是指將要使用的方法是什麼?難道我做錯了什麼?看起來像是:)但我看不到什麼。 謝謝!

回答

1

以下白皮書說,有沒有辦法讓一個datastep到一個datastep內使用來自多個軟件包同名函數(頁15標題下的「存儲和共享功能」):

http://support.sas.com/resources/papers/proceedings09/147-2009.pdf

但它確實提供了一些備選建議。

乾杯 羅布

PS - 確保你看看runsubmit.com - 這就像堆棧溢出,但只是爲SAS相關的問題。

+0

已解決。感謝這兩個參考! – Willy 2010-10-26 10:19:10

2

它看起來像package.function()規範只在proc fcmp中有效,而不在數據步驟中。例如,這個工程(創建像你一樣的功能後):

proc fcmp; 
    a=test(3,3); 
    b=pkg1.test(3,3); 
    c=pkg2.test(3,3); 
    put a= b= c=; 
run; 
相關問題