I have a RTF macro which does not use the ods statements but did set up a rtf table in the specified format. We have been using wingdings and monotype sorts to get special symbols such as check marks until now but now I need to use unicode values so that i can get the checkmark symbol with Segoe UI Symbol font but since am not using ods statement anywhere I am not able to let SAS know that it needs to treat the unicode value as unicode and not a normal symbol.
data mh._&mea.3 ;
length name $ 300;
set _&mea._kd
%if &mea. = ABC %then %do;
/* Creating an array for all plan variables and replacing its value with a rtf symbols for Tick symbol. F4 is for windings font and ü is unicode */
array travelplansss {*} &mea._:;
do k = 1 to dim(travelplansss);
travelplansss[k] = tranwrd(travelplansss[k] ,"\b\cf2\ Check Plan\b0" , "\f9\cf1 ^{unicode 2714}");
end;
%end;
%else %if &mea. = CPA%then %do;
array travelplansss {*} &mea._:;
do k = 1 to dim(travelplansss);
travelplansss[k] = tranwrd(plansss[k] ,"\b\cf11\ Delta Care\b0\cf0" , "^{unicode 2714");
end;
%end;
%else %do;
array travelplansss {*} &mea._:;
do k = 1 to dim(plansss);
travelplansss[k] = tranwrd(travelplansss[k] ,"\b\cf6\Check Status\b0" ,"^{unicode 2714");
end;
%end;
run;
data _null_ ;
file "&sumrepOutput.\_&mea..rtf" ;
set &st.&yr.&pp._&mea.3 end= eof ;
if _N_ = 1 then do ;
%rtf (0) ;
%rtf(&n_cols., &cw1. 8 8 12 7 10 8 7,
b=1, v=a, h=a, hline=t,/* hborder=brdrhair,*/ s=30 30, w=&width., clalign=b, shade=\clcbpat&TpT1., vborder=brdrhair) ;
%rtf (100) ;
end;
run ;
I am unsure I understand your aim, but here is how to insert a unicode character into a RTF file:
ods rtf file="test.rtf";
proc print data=sashelp.class; run;
ods rtf close;
data t;
infile "test.rtf";
file "test1.rtf";
input;
_infile_=tranwrd(_infile_,'Barbara','\u1576?ar\u1576?ara');
put _infile_;
run;
I inserted Arabic letter bāʼ ب, instead of the letter b :
Hello Chris, Thank you for the response. However when am trying to use the same code which you provided to test the waters, i am not getting the expected output. The only difference I made is that I changed the unicode value to 2713 which represents checkmark but instead I am getting a gujarati letter Nga which has corresponding unicode of 0A99. Can you think of something as to why this has happened?
Also why to use ? after the unicode. I did notice that the output rtf gets corrupted if I remove it but can you explain the specific purpose of it.
Below is the code snippet
data t2;
infile "C:\test.rtf";
file "C:\\test11.rtf";
input;
_infile_=tranwrd(_infile_,'Barbara','\u2713?');
put _infile_;
run;
2713 decimal =0A99 hex.
Use \u10003 for a check mark.
The ? tells the application what to display if the character cannot be displayed. i.e. display a question mark. As far as I know.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.