/*

/ Program   : casestrvar.sas
/ Version   : 1.0
/ Author    : Roland Rashleigh-Berry
/ Date      : 04-May-2011
/ Purpose   : In-datastep macro to force mixed case forms of a string into the
/             string itself.
/ SubMacros : none
/ Notes     : This must be used in a data step as shown in the usage notes.
/             The macro version of this macro is %casestrmac. This is NOT a 
/             function-style macro.
/ Usage     : data test2;
/              set test;
/              %casestrvar(text,'Roland');
/             run;
/===============================================================================
/ PARAMETERS:
/-------name------- -------------------------description------------------------
/ var               (pos) Text variable.
/ str               (pos) String (quoted) to enforce case.
/===============================================================================
/ AMENDMENT HISTORY:
/ init --date-- mod-id ----------------------description------------------------
/ rrb  13Feb07         "macro called" message added
/ rrb  30Jul07         Header tidy
/ rrb  04May11         Code tidy
/===============================================================================
/ This is public domain software. No guarantee as to suitability or accuracy is
/ given or implied. User uses this code entirely at their own risk.
/=============================================================================*/

%put MACRO CALLED: casestrvar v1.0;

%macro casestrvar(var,str);
  _casepos=1;
  do while(index(upcase(substr(&var,_casepos)),upcase(&str)));
    _casepos=_casepos-1+index(upcase(substr(&var,_casepos)),upcase(&str));
    if substr(&var,_casepos,length(&str)) NE trim(&str) 
      then substr(&var,_casepos,length(&str))=trim(&str);
    _casepos=_casepos+length(&str);
  end;
  drop _casepos;
%mend casestrvar;