/******************************************************************************
 * Programme : Programmation SAS : Comment supprimer proprement des mots spécifiques dans une chaîne de caractères
 * Reference : MACROP9815
 * Source    : https://www.wearecas.eu/es/sampleCode/MACROP9815
 ******************************************************************************/

/* --- BLOC 1 --- */
%macro RemoveWords(string,targetwords,casesens=N);

  %local i j result matchFlag NumTargetwords NumStringwords word targWord ;

  %if not %length(&casesens.) %then %let casesens = N ;
  %let casesens = %upcase(%substr(&casesens.,1,1));

  %let NumStringwords = %words(&string.);
  %let NumTargetwords = %words(&targetwords.);

  %do i = 1 %to &NumStringwords. ;
    %let matchFlag = 0 ;
    %let word = %scan(&string.,&i.,%str( ));
    %do j = 1 %to &NumTargetwords. ;
      %let targWord = %scan(&targetwords.,&j.,%str( ));
      %if (("&casesens." EQ "Y") AND ("&targWord." = "&word.")) OR ("%upcase(&targWord.)" = "%upcase(&word.)") %then %do;
        %let matchFlag = 1 ;
        %let j = &NumTargetwords. ;
      %end;      
    %end;
    %if (not &matchFlag.) %then %let result = &result. &word. ;
  %end;

  %if %length(&result.) %then %let result = %sysfunc(compbl(&result.));
  &result.

%mend;

