2010-10-25 76 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; 
相关问题