用SAS宏实现oracle中的decode函数

本文详细介绍了如何利用SAS宏函数DECODE实现类似于ORACLE PL/SQL中的DECODE函数功能,简化了复杂条件判断的SQL语句编写过程,通过实例演示了如何将流控制语句精简为一行SQL语句,提高编程效率。

 

 函数介绍
  DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能。DECODE有什么用途呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的加20%;工资在8000元或以上的加15%,通常的做法是,先选出记录中的工资字段值? select salary into var-salary from employee,然后对变量var-salary用if-then-else或choose case之类的流控制语句进行判断。 如果用DECODE函数,那么我们就可以把这些流控制语句省略,通过SQL语句就可以直接完成。

 

 信百度,难永生啊!

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

 

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

when &ifn then &valuen
%end;

%if %eval(&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;

case when f.fab_code=1 || ((f.fab_code = 0) && (f.issue_date< to_char(2024-11-01,'yyyy-mm-dd'))) then decode(d.loop,'0','AA','1','AA-OX','2','APL','3','BALPAD','4','BMG','5','BOND','6','BPAD1','7','BSGND','8','BSL','9','BUFFER','10','CB', '11','CELL-CRS','12','CELL-FG','13','CELL-ONO','14','CELL-TUN','15','CELL-VT','16','CESL-ILD0','17','CG','18','COPEN-IMP','19','Core LDD-IMP','20','CSD-IMP', '21','CT','22','CTHM-DEP','23','CV','24','DG','25','DNW-PH','26','DPR-NRG','27','DTI','28','DTIHK','29','DTIW','30','FINALANN', '31','GATE1','32','GATE1-OX','33','GATE2','34','GRIND','35','HR','36','HVGOX','37','HVLDD-IMP','38','HV-OX','39','ILD','40','ILD-DEP', '41','IO NLDD','42','IOLDD-IMP','43','IONLDD1-PH','44','LDD-Core','45','LDD-IMP','46','LDD-IO','47','LOWVTN-PH','48','LVLDD-IMP','49','M1','50','M2', '51','M3','52','M4','53','M5','54','M6','55','NPO','56','NPSD-PH','57','P1','58','P1-DEP','59','PASSIVATION','60','Poly', '61','PREB','62','RV','63','SA','64','SAB','65','SAB-DEP','66','SAB-SA','67','SAS','68','SD','69','SD-IMP','70','SDN-IMP', '71','SDP-IMP','72','SGP1-HMDEP','73','Si CMP','74','SiGe','75','SMT','76','SMT-DEP','77','SMT-SA','78','SPACER1','79','Spacer-1','80','Spacer-1 dep', '81','SPACER1-DEP','82','SPACER2','83','Spacer-2','84','SPACER2-DEP','85','STI','86','STI-OX','87','TM','88','TRIM1','89','TRIM2','90','TRIM3', '91','UTM','92','WAT','93','WATQC','94','WELL','95','WELL-CORE','96','WELL-HV','97','WELL-IO','98','WELL-LD','99','WELL-logic','100','WELL-LV', '101','WELL-Pixel','102','Wet Etch 2','103','Wet Etch 1','104','WF START','105','Zero','106','DGR','107','SPA1','108','LDD','109','ESD','110','S/D', '111','CESL','112','ILD0','113','NRG','114','MG','115','V1','116','V2','117','V3','118','V4','119','V5','120','M7', '121','V6','122','2XMetal','123','2XVia','124','4XMetal','125','4XVia','126','10XMetal','127','10XVia','128','8XMetal','129','8XVia','130','UTV', '131','Final WAT','132','QC','133','SE','134','BCO','135','NMG','136','PMG','137','PRG','138','BPAD2','139','BSLR','140','TSV', '141','TE','142','DV','143','Distortion','144','ALS','145','BMARK','146','ZERO OX','147','DTI CMP','148','CDTI','149','COVER','150','CD4', '151','RVTN3','152','IO-LDD','153','ONO','154','TUN','155','HRP','156','NLDD','157','LINERSP','158','IOLDD','159','PLDD','160','ULVT-IMP', '161','WELL-CELL','162','TUN-ONO','163','T2M1','164','T4M2') else decode(d.loop1,'0','AA','1','AA-OX','2','APL','3','BALPAD','4','BMG','5','BOND','6','BPAD1','7','BSGND','8','BSL','9','BUFFER','10','CB', '11','CELL-CRS','12','CELL-FG','13','CELL-ONO','14','CELL-TUN','15','CELL-VT','16','CESL-ILD0','17','CG','18','COPEN-IMP','19','Core LDD-IMP','20','CSD-IMP', '21','CT','22','CTHM-DEP','23','CV','24','DG','25','DNW-PH','26','DPR-NRG','27','DTI','28','DTIHK','29','DTIW','30','FINALANN', '31','GATE1','32','GATE1-OX','33','GATE2','34','GRIND','35','HR','36','HVGOX','37','HVLDD-IMP','38','HV-OX','39','ILD','40','ILD-DEP', '41','IO NLDD','42','IOLDD-IMP','43','IONLDD1-PH','44','LDD-Core','45','LDD-IMP','46','LDD-IO','47','LOWVTN-PH','48','LVLDD-IMP','49','M1','50','M2', '51','M3','52','M4','53','M5','54','M6','55','NPO','56','NPSD-PH','57','P1','58','P1-DEP','59','PASSIVATION','60','Poly', '61','PREB','62','RV','63','SA','64','SAB','65','SAB-DEP','66','SAB-SA','67','SAS','68','SD','69','SD-IMP','70','SDN-IMP', '71','SDP-IMP','72','SGP1-HMDEP','73','Si CMP','74','SiGe','75','SMT','76','SMT-DEP','77','SMT-SA','78','SPACER1','79','Spacer-1','80','Spacer-1 dep', '81','SPACER1-DEP','82','SPACER2','83','Spacer-2','84','SPACER2-DEP','85','STI','86','STI-OX','87','TM','88','TRIM1','89','TRIM2','90','TRIM3', '91','UTM','92','WAT','93','WATQC','94','WELL','95','WELL-CORE','96','WELL-HV','97','WELL-IO','98','WELL-LD','99','WELL-logic','100','WELL-LV', '101','WELL-Pixel','102','Wet Etch 2','103','Wet Etch 1','104','WF START','105','Zero','106','DGR','107','SPA1','108','LDD','109','ESD','110','S/D', '111','CESL','112','ILD0','113','NRG','114','MG','115','V1','116','V2','117','V3','118','V4','119','V5','120','M7', '121','V6','122','2XMetal','123','2XVia','124','4XMetal','125','4XVia','126','10XMetal','127','10XVia','128','8XMetal','129','8XVia','130','UTV', '131','Final WAT','132','QC','133','SE','134','BCO','135','NMG','136','PMG','137','PRG','138','BPAD2','139','BSLR','140','TSV', '141','TE','142','DV','143','Distortion','144','ALS','145','BMARK','146','ZERO OX','147','DTI CMP','148','CDTI','149','COVER','150','CD4', '151','RVTN3','152','IO-LDD','153','ONO','154','TUN','155','HRP','156','NLDD','157','LINERSP','158','IOLDD','159','PLDD','160','ULVT-IMP', '161','WELL-CELL','162','TUN-ONO','163','T2M1','164','T4M2') end Platform,排查错误
最新发布
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值