Thanks for the comments. I should clarify that I am only concerned with processing text with this project. (The SAS board is where the gifs are being produced.) Thanks to Edward Ballard's comment, I was able to obtain a solution to the problem: /* emoticon: a macro to replace common emoticons with text. It is designed to process text comments prior to text/sentiment analysis. To call the macro: %emoticon(comment=name_of_variable_containing_comments, set= name_of_dataset_containing_comments); */ %macro emoticon (comment=, set=); data work.transformed_&set.; set &set; &comment.=tranwrd(&comment.,">:]"," smile"); &comment.=tranwrd(&comment.,"(-:"," smile"); &comment.=tranwrd(&comment.,":-)"," smile"); &comment.=tranwrd(&comment.,":)"," smile"); &comment.=tranwrd(&comment.,":o)"," smile"); &comment.=tranwrd(&comment.,":]"," smile"); &comment.=tranwrd(&comment.,":3"," smile"); &comment.=tranwrd(&comment.,":c)"," smile"); &comment.=tranwrd(&comment.,":>"," smile"); &comment.=tranwrd(&comment.,"=]"," smile"); &comment.=tranwrd(&comment.,"8)"," smile"); &comment.=tranwrd(&comment.,"=)"," smile"); &comment.=tranwrd(&comment.,":}"," smile"); &comment.=tranwrd(&comment.,":^)"," smile"); &comment.=tranwrd(&comment.,":-)="," smile"); &comment.=tranwrd(&comment.,"#:-)"," smile"); &comment.=tranwrd(&comment.,":-)8"," smile"); &comment.=tranwrd(&comment.,"d:-)"," smile"); &comment.=tranwrd(&comment.,"&:-)"," smile"); &comment.=tranwrd(&comment.,"8-)"," smile"); &comment.=tranwrd(&comment.,"{:-)"," smile"); &comment.=tranwrd(&comment.,"(:-)"," smile"); &comment.=tranwrd(&comment.,":-( )"," smile"); &comment.=tranwrd(&comment.,"C|:-)"," smile"); &comment.=tranwrd(&comment.,"[:-)"," smile"); &comment.=tranwrd(&comment.,">:D"," laugh"); &comment.=tranwrd(&comment.,":-D"," laugh"); &comment.=tranwrd(&comment.,":D"," laugh"); &comment.=tranwrd(&comment.,"8-D"," laugh"); &comment.=tranwrd(&comment.,"8D"," laugh"); &comment.=tranwrd(&comment.,"x-D"," laugh"); &comment.=tranwrd(&comment.,"xD"," laugh"); &comment.=tranwrd(&comment.,"X-D"," laugh"); &comment.=tranwrd(&comment.,"XD"," laugh"); &comment.=tranwrd(&comment.,"=-D"," laugh"); &comment.=tranwrd(&comment.,"=D"," laugh"); &comment.=tranwrd(&comment.,"=-3"," laugh"); &comment.=tranwrd(&comment.,"=3"," laugh"); &comment.=tranwrd(&comment.,"B^D"," laugh"); &comment.=tranwrd(&comment.,":-))"," happy"); &comment.=tranwrd(&comment.,">:["," sad"); &comment.=tranwrd(&comment.,":-("," sad"); &comment.=tranwrd(&comment.,":("," sad"); &comment.=tranwrd(&comment.,":-c"," sad"); &comment.=tranwrd(&comment.,":c"," sad"); &comment.=tranwrd(&comment.,":-<"," sad"); &comment.=tranwrd(&comment.,":<"," sad"); &comment.=tranwrd(&comment.,":-["," sad"); &comment.=tranwrd(&comment.,":["," sad"); &comment.=tranwrd(&comment.,":{"," sad"); &comment.=tranwrd(&comment.,":-||"," angry"); &comment.=tranwrd(&comment.,":@"," angry"); &comment.=tranwrd(&comment.,">:-("," angry"); &comment.=tranwrd(&comment.,"QQ"," crying"); &comment.=tranwrd(&comment.,"D:<"," disgust or sadness"); &comment.=tranwrd(&comment.,"D:"," disgust or sadness"); &comment.=tranwrd(&comment.,"D8"," disgust or sadness"); &comment.=tranwrd(&comment.,"D;"," disgust or sadness"); &comment.=tranwrd(&comment.,"D="," disgust or sadness"); &comment.=tranwrd(&comment.,"DX"," disgust or sadness"); &comment.=tranwrd(&comment.,"v.v"," disgust or sadness"); &comment.=tranwrd(&comment.,"D-':"," disgust or sadness"); &comment.=tranwrd(&comment.,">:o"," surprise"); &comment.=tranwrd(&comment.,">:O"," surprise"); &comment.=tranwrd(&comment.,":-O"," surprise"); &comment.=tranwrd(&comment.,":O"," surprise"); &comment.=tranwrd(&comment.,"°o°"," surprise"); &comment.=tranwrd(&comment.,"°O°"," surprise"); &comment.=tranwrd(&comment.,":O"," surprise"); &comment.=tranwrd(&comment.,"o_O"," surprise"); &comment.=tranwrd(&comment.,"o_0"," surprise"); &comment.=tranwrd(&comment.,"o.O"," surprise"); &comment.=tranwrd(&comment.,"8-0"," surprise"); &comment.=tranwrd(&comment.,":-<>"," surprise"); &comment.=tranwrd(&comment.,":*"," kiss"); &comment.=tranwrd(&comment.,":^*"," kiss"); &comment.=tranwrd(&comment.,">;]"," wink"); &comment.=tranwrd(&comment.,";-)"," wink"); &comment.=tranwrd(&comment.,";)"," wink"); &comment.=tranwrd(&comment.,"*-)"," wink"); &comment.=tranwrd(&comment.,"*)"," wink"); &comment.=tranwrd(&comment.,";-]"," wink"); &comment.=tranwrd(&comment.,";]"," wink"); &comment.=tranwrd(&comment.,";D"," wink"); &comment.=tranwrd(&comment.,";^)"," wink"); &comment.=tranwrd(&comment.,":-,"," wink"); &comment.=tranwrd(&comment.,">:P"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,":-P"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,":P"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,"X-P"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,"x-p"," playfully sticking out tongue"); &comment.=tranwrd(&comment.," xp "," playfully sticking out tongue"); &comment.=tranwrd(&comment.," XP "," playfully sticking out tongue"); &comment.=tranwrd(&comment.,":-p"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,":p"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,"=p"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,":-b"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,":b"," playfully sticking out tongue"); &comment.=tranwrd(&comment.,">:\"," annoyed"); &comment.=tranwrd(&comment.,">:/"," annoyed"); &comment.=tranwrd(&comment.,":-\"," annoyed"); &comment.=tranwrd(&comment.,":-/"," annoyed"); &comment.=tranwrd(&comment.,":-."," annoyed"); &comment.=tranwrd(&comment.,":/"," annoyed"); &comment.=tranwrd(&comment.,":\"," annoyed"); &comment.=tranwrd(&comment.,"=/"," annoyed"); &comment.=tranwrd(&comment.,"=\"," annoyed"); &comment.=tranwrd(&comment.,":S"," annoyed"); &comment.=tranwrd(&comment.,">.<"," annoyed"); &comment.=tranwrd(&comment.,":-|"," determined or straight face"); &comment.=tranwrd(&comment.,":$"," embarrassed"); &comment.=tranwrd(&comment.,">:X"," not speaking"); &comment.=tranwrd(&comment.,":-X"," not speaking"); &comment.=tranwrd(&comment.,":X"," not speaking"); &comment.=tranwrd(&comment.,"O:-)"," angel or innocent"); &comment.=tranwrd(&comment.,"0:-3"," angel or innocent"); &comment.=tranwrd(&comment.,"0:3"," angel or innocent"); &comment.=tranwrd(&comment.,"0:-)"," angel or innocent"); &comment.=tranwrd(&comment.,"0:)"," angel or innocent"); &comment.=tranwrd(&comment.,"0;^)"," angel or innocent"); &comment.=tranwrd(&comment.,">:)"," evil"); &comment.=tranwrd(&comment.,">;)"," evil"); &comment.=tranwrd(&comment.,">:-)"," evil"); &comment.=tranwrd(&comment.,"}:-)"," devilish"); &comment.=tranwrd(&comment.,"}:)"," devilish"); &comment.=tranwrd(&comment.,"3:-)"," devilish"); &comment.=tranwrd(&comment.,"3:)"," devilish"); &comment.=tranwrd(&comment.,"o/\o"," high five"); &comment.=tranwrd(&comment.,"^5"," high five"); &comment.=tranwrd(&comment.,"|-O"," bored"); &comment.=tranwrd(&comment.,":-&"," tongue-tied"); &comment.=tranwrd(&comment.,":&"," tongue-tied"); &comment.=tranwrd(&comment.,"#-)"," confused"); &comment.=tranwrd(&comment.,"%-)"," confused"); &comment.=tranwrd(&comment.,"%)"," confused"); &comment.=tranwrd(&comment.,":-###.."," sick"); &comment.=tranwrd(&comment.,":###.."," sick"); &comment.=tranwrd(&comment.,"<:-|"," dunce"); &comment.=tranwrd(&comment.,"<*)))-{"," fish"); &comment.=tranwrd(&comment.,"><(((*>"," fish"); &comment.=tranwrd(&comment.,"><> "," fish"); &comment.=tranwrd(&comment.,"*\0/*"," cheerleader"); &comment.=tranwrd(&comment.,"@}-;-'---"," rose"); &comment.=tranwrd(&comment.,"@>-->--"," rose"); &comment.=tranwrd(&comment.,"<3"," heart"); &comment.=tranwrd(&comment.,"</3"," broken heart"); &comment.=tranwrd(&comment.,":-o zz"," bored"); &comment.=tranwrd(&comment.,": @"," shouting"); &comment.=tranwrd(&comment.,":-(0)"," shouting"); &comment.=tranwrd(&comment.,"(-.-)"," sleeping"); &comment.=tranwrd(&comment.,"|-I"," sleeping"); &comment.=tranwrd(&comment.,"|-O"," snoring"); &comment.=tranwrd(&comment.,":-v"," talking"); run; %mend emoticon; I also received some local assistance that used perl: data comments_test; set comments; em_comment=f1; x=compress(compress(em_comment,'','kp'),' '); y=prxparse('s/[:;=]-?[D)]/Smile/'); call prxchange(y,-1,x); run; The issue in that case was A) I am a novice SAS programmer and a neophyte perl coder B) how to handle emoticons of different lengths (i.e. when the first buffer can be 1 to n characters and the second one can be 1 to n as well...) Thanks again for the assistance. Chad
... View more