SAS9.2目前推出了自定义函数的功能。
下面介绍怎么用代码实现这一功能:
举一个简单的sample先,函数功能:比较两个数字的大小,函数1返回较大值,函数2返回较小值。
//1,用C编辑器中,编写一段C代码如下,调试并编译通过,用VC把它编译成dll文件,命名为mydll.dll。
int Maxx(int a, int b)
{
if(a>=b) return a;
else
return b;
}
int Minx(int a, int b)
{
if(a>=b) return b;
else
return a;
}
/*2,SAS编辑器中编写代码,调用外部mydll.dll.*/
/*用PROC PROTO建立SAS函数库sasuser 数据集myfuncs2,函数包mathfun*/
proc proto package = sasuser.myfuncs2.mathfun
label = "package of math functions";
link "D:\sxlion\mydll.dll";
int Minx(int a , int b) kind=PRICING;
int Maxx(int a , int b) kind=PRICING;
run;
/*3, 用PROC FCMP 包装 C函数 */
proc fcmp inlib=sasuser.myfuncs2
outlib=sasuser.myfuncs1.mathfun1;
/* 建立一个C函数对应的自定义函数 */
function Maax(a,b);
x=Maxx(a, b);
return(x);
endsub;
quit;
/*4. 设定选项,给出函数保存的地方,在DATA步中调用C函数 */
options cmplib=(sasuser.myfuncs2 sasuser.myfuncs1);
data _null_;
a=sas_Maax(11,222);
put a;
run;
quit;
/*5 运行结果*/
log:
222
小结和说明:上面过程实现了SAS9.2的自定义函数的新功能,并得到相应的结果。但是很明显,Maax()是个山寨函数,和SAS的正牌函数max()相比,当然功能也弱了很多。
???怎么样做才能让自己定义的函数达到SAS内置函数的标准???
恐怕还需要很多工作要做。
