--- %%NOBANNER%% -->
/* %put %debracket(); */
%macro debracket(string);
%local _unbrktstr_;
%let _unbrktstr_=&string;
%if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_unbrktstr_))))), %str(%()) and
%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_unbrktstr_))))), %str(%)))) %then %do;
%if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_unbrktstr_))))), %str(%()) ge 2) %then %do;
%let _unbrktstr_=%substr(%bquote(&string), 1,
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&string))))), %str(%())-1))%substr(%bquote(&string),
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&string))))), %str(%())+1),
%eval(%length(&string)-%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&string))))), %str(%())));
%end;
%else %do;
%let _unbrktstr_=%substr(%bquote(&string),
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&string))))), %str(%())+1), %eval(%length(&string)-%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&string))))), %str(%())));
%end;
%if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_unbrktstr_))))), %str(%()) and
%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_unbrktstr_))))), %str(%)))) and
(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_unbrktstr_))))), %str(%()) lt
%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_unbrktstr_))))), %str(%)))) %then %do;
%if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))), %str(%)))
ge 2) %then %do;
%let _unbrktstr_=%sysfunc(reverse(%bquote(%substr(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))), 1,
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%)))-1))%substr(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))),
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%)))+1), %eval(%length(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))))-
%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%))))))));
%end;
%else %do;
%let _unbrktstr_=%sysfunc(reverse(%bquote(%substr(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))),
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%)))+1), %eval(%length(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))))-
%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%))))))));
%end;
%end;
%else %do;
%if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))), %str(%)))
ge 2) %then %do;
%let _unbrktstr_=%sysfunc(reverse(%bquote(%substr(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))), 1,
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%)))-1))%substr(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))),
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%)))+1), %eval(%length(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))))-
%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%))))))));
%end;
%else %do;
%let _unbrktstr_=%sysfunc(reverse(%bquote(%substr(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))),
%eval(%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%)))+1), %eval(%length(%bquote(%sysfunc(reverse(%bquote(&_unbrktstr_)))))-
%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%bquote(&_unbrktstr_)))))))),
%str(%))))))));
%end;
%end;
%end; &_unbrktstr_ %put;
%mend debracket;