diff --git a/base/mf_dedup.sas b/base/mf_dedup.sas
new file mode 100644
index 0000000..d34555e
--- /dev/null
+++ b/base/mf_dedup.sas
@@ -0,0 +1,54 @@
+/**
+ @file
+ @brief de-duplicates a macro string
+ @details Removes all duplicates from a string of words. A delimeter can be
+ chosen. Is inspired heavily by this excellent [macro](
+ https://github.com/scottbass/SAS/blob/master/Macro/dedup_mstring.sas) from
+ [Scott Base](https://www.linkedin.com/in/scottbass). Case sensitive.
+
+ Usage:
+
+ %let str=One two one two and through and through;
+ %put %mf_dedup(&str);
+ %put %mf_dedup(&str,outdlm=%str(,));
+
+ Which returns:
+
+ > One two one and through
+ > One,two,one,and,through
+
+ @param [in] str String to be deduplicated
+ @param [in] indlm= ( ) Delimeter of the input string
+ @param [out] outdlm= ( ) Delimiter of the output string
+
+
Related Macros
+ @li mf_trimstr.sas
+ @li mf_wordsinstr1butnotstr2.sas
+
+ @version 9.2
+ @author Allan Bowe
+**/
+
+%macro mf_dedup(str
+ ,indlm=%str( )
+ ,outdlm=%str( )
+)/*/STORE SOURCE*/;
+
+%local num word i pos out;
+
+%* loop over each token, searching the target for that token ;
+%let num=%sysfunc(countc(%superq(str),%str(&indlm)));
+%do i=1 %to %eval(&num+1);
+ %let word=%scan(%superq(str),&i,%str(&indlm));
+ %let pos=%sysfunc(indexw(&out,&word,%str(&outdlm)));
+ %if (&pos eq 0) %then %do;
+ %if (&i gt 1) %then %let out=&out%str(&outdlm);
+ %let out=&out&word;
+ %end;
+%end;
+
+%unquote(&out)
+
+%mend mf_dedup;
+
+
diff --git a/tests/crossplatform/mf_dedup.test.sas b/tests/crossplatform/mf_dedup.test.sas
new file mode 100644
index 0000000..3f5ed89
--- /dev/null
+++ b/tests/crossplatform/mf_dedup.test.sas
@@ -0,0 +1,23 @@
+/**
+ @file
+ @brief Testing mf_dedup macro
+
+ SAS Macros
+ @li mf_dedup.sas
+ @li mp_assert.sas
+
+**/
+
+%let str=One two one two and through and through;
+
+%mp_assert(
+ iftrue=("%mf_dedup(&str)"="One two one and through"),
+ desc=Basic test,
+ outds=work.test_results
+)
+
+%mp_assert(
+ iftrue=("%mf_dedup(&str,outdlm=%str(,))"="One,two,one,and,through"),
+ desc=Outdlm test,
+ outds=work.test_results
+)
\ No newline at end of file