如何新建可用于SAS data步中的自定义函数(用C语言)

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内置函数的标准???
恐怕还需要很多工作要做。微笑
 

《如何新建可用于SAS data步中的自定义函数(用C语言)》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注