/*
/ Program : fixnames.sas / Version : 1.0 / Author : Roland Rashleigh-Berry / Date : 24-Nov-2009 / Purpose : In-datastep macro to fix UTF-8 characters in a person's name by / converting the UTF-8 character pairs back to ascii. / SubMacros : none / Notes : This is only intended to work on people's names and is only / intended for the spelling of European and Scandinavian names. It / should also work for South American names. You should use it when / you have received data from a UTF-8 system and you are working on / an ascii system and you notice that one or more dataset variables / contain corruptions to peoples names due to UTF-8 characters. This / macro is used in a data step to convert these UTF-8 character / pairs back into a single ascii character. This is a problem / sometimes encountered with investigator names for multinational, / multi-centre clinical trials. You should be warned that if a / genuine name contains a capital "A" topped with a tilde then this / macro will likely corrupt that name. / Usage : data newpatinfo; / set patinfo; / %fixnames(invname) / run; /=============================================================================== / PARAMETERS: /-------name------- -------------------------description------------------------ / namevar (pos) Name of the variable containing possibly corrupted / names. /=============================================================================== / AMENDMENT HISTORY: / init --date-- mod-id ----------------------description------------------------ / /=============================================================================== / 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: fixnames v1.0; %macro fixnames(namevar); &namevar=tranwrd(&namevar,"C380"x,"C0"x); *- large a grave -; &namevar=tranwrd(&namevar,"C381"x,"C1"x); *- large a acute -; &namevar=tranwrd(&namevar,"C382"x,"C2"x); *- large a circumflex -; &namevar=tranwrd(&namevar,"C383"x,"C3"x); *- large a tilde -; &namevar=tranwrd(&namevar,"C384"x,"C4"x); *- large a diaeresis -; &namevar=tranwrd(&namevar,"C385"x,"C5"x); *- large a ring -; &namevar=tranwrd(&namevar,"C386"x,"C6"x); *- large ae -; &namevar=tranwrd(&namevar,"C387"x,"C7"x); *- large c cedilla -; &namevar=tranwrd(&namevar,"C388"x,"C8"x); *- large e grave -; &namevar=tranwrd(&namevar,"C389"x,"C9"x); *- large e acute -; &namevar=tranwrd(&namevar,"C38A"x,"CA"x); *- large e circumflex -; &namevar=tranwrd(&namevar,"C38B"x,"CB"x); *- large e diaeresis -; &namevar=tranwrd(&namevar,"C38C"x,"CC"x); *- large i grave -; &namevar=tranwrd(&namevar,"C38D"x,"CD"x); *- large i acute -; &namevar=tranwrd(&namevar,"C38E"x,"CE"x); *- large i circumflex -; &namevar=tranwrd(&namevar,"C38F"x,"CF"x); *- large i diaeresis -; &namevar=tranwrd(&namevar,"C390"x,"D0"x); *- large eth -; &namevar=tranwrd(&namevar,"C391"x,"D1"x); *- large n tilde -; &namevar=tranwrd(&namevar,"C392"x,"D2"x); *- large o grave -; &namevar=tranwrd(&namevar,"C393"x,"D3"x); *- large o acute -; &namevar=tranwrd(&namevar,"C394"x,"D4"x); *- large o circumflex -; &namevar=tranwrd(&namevar,"C395"x,"D5"x); *- large o tilde -; &namevar=tranwrd(&namevar,"C396"x,"D6"x); *- large o diaeresis -; &namevar=tranwrd(&namevar,"C398"x,"D8"x); *- large o stroke -; &namevar=tranwrd(&namevar,"C399"x,"D9"x); *- large u grave -; &namevar=tranwrd(&namevar,"C39A"x,"DA"x); *- large u acute -; &namevar=tranwrd(&namevar,"C39B"x,"DB"x); *- large u circumflex -; &namevar=tranwrd(&namevar,"C39C"x,"DC"x); *- large u diaeresis -; &namevar=tranwrd(&namevar,"C39D"x,"DD"x); *- large y acute -; &namevar=tranwrd(&namevar,"C39E"x,"DE"x); *- large thorn -; &namevar=tranwrd(&namevar,"C39F"x,"DF"x); *- sharp s -; &namevar=tranwrd(&namevar,"C3A1"x,"E1"x); *- small a acute -; &namevar=tranwrd(&namevar,"C3A2"x,"E2"x); *- small a circumflex -; &namevar=tranwrd(&namevar,"C3A3"x,"E3"x); *- small a tilde -; &namevar=tranwrd(&namevar,"C3A4"x,"E4"x); *- small a diaeresis -; &namevar=tranwrd(&namevar,"C3A5"x,"E5"x); *- small a ring -; &namevar=tranwrd(&namevar,"C3A6"x,"E6"x); *- small ae -; &namevar=tranwrd(&namevar,"C3A7"x,"E7"x); *- small c cedilla -; &namevar=tranwrd(&namevar,"C3A8"x,"E8"x); *- small e grave -; &namevar=tranwrd(&namevar,"C3A9"x,"E9"x); *- small e acute -; &namevar=tranwrd(&namevar,"C3AA"x,"EA"x); *- small e circumflex -; &namevar=tranwrd(&namevar,"C3AB"x,"EB"x); *- small e diaeresis -; &namevar=tranwrd(&namevar,"C3AC"x,"EC"x); *- small i grave -; &namevar=tranwrd(&namevar,"C3AD"x,"ED"x); *- small i acute -; &namevar=tranwrd(&namevar,"C3AE"x,"EE"x); *- small i circumflex -; &namevar=tranwrd(&namevar,"C3AF"x,"EF"x); *- small i diaeresis -; &namevar=tranwrd(&namevar,"C3B0"x,"F0"x); *- small eth -; &namevar=tranwrd(&namevar,"C3B1"x,"F1"x); *- small n tilde -; &namevar=tranwrd(&namevar,"C3B2"x,"F2"x); *- small o grave -; &namevar=tranwrd(&namevar,"C3B3"x,"F3"x); *- small o acute -; &namevar=tranwrd(&namevar,"C3B4"x,"F4"x); *- small o circumflex -; &namevar=tranwrd(&namevar,"C3B5"x,"F5"x); *- small o tilde -; &namevar=tranwrd(&namevar,"C3B6"x,"F6"x); *- small o diaeresis -; &namevar=tranwrd(&namevar,"C3B8"x,"F8"x); *- small o stroke -; &namevar=tranwrd(&namevar,"C3B9"x,"F9"x); *- small u grave -; &namevar=tranwrd(&namevar,"C3BA"x,"FA"x); *- small u acute -; &namevar=tranwrd(&namevar,"C3BB"x,"FB"x); *- small u circumflex -; &namevar=tranwrd(&namevar,"C3BC"x,"FC"x); *- small u diaeresis -; &namevar=tranwrd(&namevar,"C3BD"x,"FD"x); *- small y acute -; &namevar=tranwrd(&namevar,"C3BE"x,"FE"x); *- small thorn -; &namevar=tranwrd(&namevar,"C3BF"x,"FF"x); *- small y diaeresis -; %mend;