在现代语言(例如python)中,您可以执行以下操作
def do_a_thing(foo,bar):
thing = (... do a thing to foo(bar) ...)
return thing
在 SAS 中如何做到这一点(或类似的事情)?在我的具体应用我已经定义了一堆的功能,并需要做同样的事情所有的人,所以我认为这将是不错的一个函数,函数的参数,然后做的事情,以该功能,然后在需要的地方应用它。“明显”的解决方案不起作用,例如在proc fcmp
这样做时:
function do_a_thing(foo,bar);
thing = (... do a thing to foo(bar) ...)
return(thing);
endsub;
这将失败,因为 SAS 不知道任何名为 的函数foo
,并引发错误。
我希望答案涉及一些宏观技巧,但我发现宏观系统有些不透明,无法完全弄清楚。做到这一点的最佳方法是什么?
您还没有真正展示可能需要(甚至有用)的示例。
但通常在 SAS 中,您会使用代码生成来实现这种类型的错误方向。例如,您的第二个“函数”可能是语句样式宏。这是一个宏,它只发出要包含在您要创建的实际 SAS 程序中的语句的一部分。
%macro do_a_thing(function,arglist);
&function(&arglist)
%mend;
那么你可以在程序中使用它
data want ;
set have ;
mean = %do_a_thing(mean,of _numeric_);
std = %do_a_thing(std,of _numeric_);
run;
对于更复杂的事情,你会遇到更多的麻烦。新式 DOSUBL() 函数可能会有所帮助,因为它们可以让您在单独的执行空间中运行多个步骤。但是对于大多数事情来说,性能成本可能太高而无法让它值得。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句