Skip to content

Instantly share code, notes, and snippets.

@zhanglianbo35
Last active September 21, 2018 06:59
Show Gist options
  • Save zhanglianbo35/656d97b176a6ec61ce58dbfcfe78075c to your computer and use it in GitHub Desktop.
Save zhanglianbo35/656d97b176a6ec61ce58dbfcfe78075c to your computer and use it in GitHub Desktop.
SAS递归实现二分法查找
%global MIDNUM TARGETNUM FRONTNUM ENDNUM ERRNUM ii;
%let FRONTNUM=1;
%let TARGETNUM=200;
%let ENDNUM=1024;
%let ERRNUM=0.5;
%let ii=0;
%macro search;
%if (%SYSEVALF(%SYSFUNC(ABS(%sysevalf((&FRONTNUM + &ENDNUM)/2) - &TARGETNUM)) > &ERRNUM)) %then %do;
%let MIDNUM=%sysevalf((&FRONTNUM + &ENDNUM)/2);
%let ii= %eval(&ii+1);
%PUT &ii ... &MIDNUM ;
%if (%sysevalf(&MIDNUM - &TARGETNUM >0)) %then %do;
%LET ENDNUM=&MIDNUM;
%end;
%else %do;
%LET FRONTNUM=&MIDNUM;
%end;
%search;
%end;
%mend;
%search;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment