This is a little late but it is a routine I have sued for years. You may have yo mofify it but that shouldn't be much of a problem. I may be a lot more than you need.
do blank_um
scan
if name > space(30)
name_work=name
do case
case upper(name_work)="MR " or upper(name_work) ="MR."
per_title="Mr"
name_work=strtran(upper(name_work),"MR "

name_work=strtran(upper(name_work),"MR."

name_work=strtran(upper(name_work),"MR. "

case upper(name_work)="MRS " or upper(name_work) ="MRS."
per_title="Mrs "
name_work=strtran(upper(name_work),"MRS "

name_work=strtran(upper(name_work),"MRS. "

case upper(name_work)="MS " or upper(name_work) ="MS."
per_title="Ms"
name_work=strtran(upper(name_work),"MS "

name_work=strtran(upper(name_work),"MS. "

case upper(name_work)="DR " or upper(name_work) ="DR."
per_title="Dr"
name_work=strtran(upper(name_work),"DR "

name_work=strtran(upper(name_work),"DR. "

case upper(name_work)="FATH "
per_title="Fath"
name_work=strtran(upper(name_work),"FATH "

case upper(name_work)="SIS " or upper(name_work) ="SIST"
per_title="Sis"
name_work=strtran(upper(name_work),"SIS "

name_work=strtran(upper(name_work),"SIST "

case upper(name_work)="CAPT" or upper(name_work) ="CAP "
per_title="Capt"
name_work=strtran(upper(name_work),"CAPT "

name_work=strtran(upper(name_work),"CAP "

case upper(name_work)="COL" or upper(name_work) ="COLN"
per_title="Col"
name_work=strtran(upper(name_work),"COL "

name_work=strtran(upper(name_work),"COLN "

case upper(name_work)="ADM" or upper(name_work) ="ADMR"
per_title="Adm"
name_work=strtran(upper(name_work),"ADM "

name_work=strtran(upper(name_work),"ADMR "

case upper(name_work)="LT " or upper(name_work) ="LT."
per_title="Lt"
name_work=strtran(upper(name_work),"LT "

name_work=strtran(upper(name_work),"LT. "

case upper(name_work)="ENS " or upper(name_work) ="ENS."
per_title="Ens"
name_work=strtran(upper(name_work),"ENS "

name_work=strtran(upper(name_work),"ENS. "

case upper(name_work)="MAJ" or upper(name_work) ="MAJ."
per_title="Maj"
name_work=strtran(upper(name_work),"MAJ "

name_work=strtran(upper(name_work),"MAJ. "

case upper(name_work)="LCDR" or upper(name_work) ="LCDR."
per_title="Lcdr"
name_work=strtran(upper(name_work),"LCDR "

name_work=strtran(upper(name_work),"LCDR. "

case upper(name_work)="SGT" or upper(name_work) ="SGT."
per_title="Sgt"
name_work=strtran(upper(name_work),"SGT "

name_work=strtran(upper(name_work),"SGT. "

endcase
do case
case atc(" MD ",name_work) > 0
name_suff="MD"
name_work=strtran(upper(name_work)," MD "

case atc(" DO ",name_work) > 0
name_suff="DO"
name_work=strtran(upper(name_work)," DO "

case atc(" OD ",name_work) > 0
name_suff="OD"
name_work=strtran(upper(name_work)," OD "

case atc(" OM ",name_work) > 0
name_suff="OM"
name_work=strtran(upper(name_work)," OM "

case atc(" ND ",name_work) > 0
name_suff="ND"
name_work=strtran(upper(name_work)," ND "

case atc(" DC ",name_work) > 0
name_suff="DC"
name_work=strtran(upper(name_work)," DC "

case atc(" EA ",name_work) > 0
name_suff="EA"
name_work=strtran(upper(name_work)," EA "

case atc(" CS ",name_work) > 0
name_suff="CS"
name_work=strtran(upper(name_work)," CS "

case atc(" DDS ",name_work) > 0
name_suff="DDS"
name_work=strtran(upper(name_work)," DDS "

case atc(" DMD ",name_work) > 0
name_suff="DMD"
name_work=strtran(upper(name_work)," DMD "

case atc(" DPM ",name_work) > 0
name_suff="DPM"
name_work=strtran(upper(name_work)," DPM "

case atc(" LPN ",name_work) > 0
name_suff="LPN"
name_work=strtran(upper(name_work)," LPN "

case atc(" RN ",name_work) > 0
name_suff="RN"
name_work=strtran(upper(name_work)," RN "

case atc(" LPT ",name_work) > 0
name_suff="LPT"
name_work=strtran(upper(name_work)," LPT "

case atc(" PHD ",name_work) > 0
name_suff="PhD"
name_work=strtran(upper(name_work)," PHD "

case atc(" ESO ",name_work) > 0
name_suff="ESO"
name_work=strtran(upper(name_work)," ESO "

case atc(" CPA ",name_work) > 0
name_suff="CPA"
name_work=strtran(upper(name_work)," CPA "

case atc(" MSW ",name_work) > 0
name_suff="MSW"
name_work=strtran(upper(name_work)," MSW "

case atc(" CDP ",name_work) > 0
name_suff="CDP"
name_work=strtran(upper(name_work)," CDP "

case atc(" CP ",name_work) > 0
name_suff="CP"
name_work=strtran(upper(name_work)," CP "

case atc(" II ",name_work) > 0
name_suff="II"
name_work=strtran(upper(name_work)," II "

case atc(" III ",name_work) > 0
name_suff="III"
name_work=strtran(upper(name_work)," III "

case atc(" JR ",name_work) > 0
name_suff="Jr"
name_work=strtran(upper(name_work)," JR "

case atc(" SR ",name_work) > 0
name_suff="Sr"
name_work=strtran(upper(name_work)," SR "

ENDCASE
name_work = ltrim(name_work)
if substr(name_work,1,1) > space(1) and (substr(name_work,2,1)=space(1) or;
substr(name_work,2,1) = "."

name_first = substr(name_work,1,1)
name_work = substr(name_work,3)
name_work=ltrim(name_work)
sw_first=.T.
endif
if (substr(name_work,1,1) > space(1)) and (substr(name_work,2,1)=space(1) or;
substr(name_work,2,1) = "."

name_mid = upper(substr(name_work,1,1))
name_work = substr(name_work,3)
name_work=ltrim(name_work)
sw_mid=.T.
endif
cntr_space=rat(" ",rtrim(name_work))
if cntr_space=0
name_last=name_work
else
name_last=ltrim(substr(name_work,cntr_space))
endif
name_work=strtran(name_work,name_last)
if not sw_first
name_work=ltrim(name_work)
cntr2_space=at(" ",name_work)
if cntr2_space=0
name_first=proper(name_work)
else
name_first=substr(name_work,1,cntr2_space)
endif
name_work=strtran(name_work,name_first)
endif
if not sw_mid
name_work=ltrim(name_work)
if at(" ",name_work) > 0
name_mid=upper(substr(name_work,1,1))
endif
endif
name_first=proper(name_first)
name_last=proper(name_last)
*replace salutation with per_title
replace first with name_first
replace init with name_mid
replace last with alltrim(name_last)+" "+name_suff
*replace suff with name_suff
do blank_um
endif
endscan
procedure blank_um
public name_work, name_last, name_first, name_mid, sw_first, sw_mid, per_title, name_suff
name_work = space(40)
name_last = space(18)
name_first = space(12)
name_mid = space(1)
name_suff=space(4)
per_title = space(4)
sw_first = .F.
sw_mid = .F.