用SAS宏实现Oracle中的decode函数

2014-11-24 18:25:16 · 作者: · 浏览: 0

函数介绍


看用SAS怎么实现吧,就是这么一个小小的宏,就实现了所谓其他数据库都不能实现的功能,


%macro decode /PARMBUFF;
%local i count ifn valuen countall currfeild valueelse;
%let countall=%sysfunc(countw(&SYSPBUFF,%quote(,)));
%let count=%eva l((&countall-1)/2);
%let currfeild=%scan(%quote(&SYSPBUFF),1);
case &currfeild
%do i=1 %to &count;
%let ifn=%scan(%quote(&SYSPBUFF),%eva l(&i*2));
%let valuen=%scan(%quote(&SYSPBUFF),%eva l(&i*2+1));


when &ifn then &valuen
%end;


%if %eva l(&countall>(&count+1)) %then %do;
%let valueelse=%scan(%quote(&SYSPBUFF),&countall);
else &valueelse
%end;
end
%mend;


调用代码如下,和oracle的调用方式和功能实现基本上都是一样的


proc sql;
create table test as
select
%decode(sex,"男",0,"女",1,2)
as abc
from sashelp.class;
quit;