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.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
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.
Ready to level-up your skills? Choose your own adventure.