在临床编程中,经常会有乱码的烦恼。今天小编来分享一下,如何解决乱码问题。
表格的烦恼
近期有朋友问小编,proc report pretext posttext 输出标题脚注乱码,怎么解决。原来他编程的环境是utf8,标题脚注是中文的话出出来就会乱码,如下图所示:
title "Test 测试";
ods rtf file="d:\test.rtf" ;
proc report data=sashelp.class style(report)={pretext="test测试" just=left};
run;
ods rtf close;
小编提供了以下三种解决方法:
方法一
采用compute before_page_ compute after_page_生成表格内的空行,before _page_作为标题,before _page_作为脚注,再通过proc tempalte修改三线表的格式。
title "Test 测试";
ods rtf file="d:\test.rtf";
proc report data=sashelp.class;
compute before _page_;
line "标题" ;
endcomp;
compute after _page_;
line "脚注" ;
endcomp;
run;
ods rtf close;
方法二
通过ods rtf text='文本',生成一行文本信息。
title "Test 测试";
ods rtf file="d:\test.rtf";
ods rtf text="^S={just =center}标题";
proc report data=sashelp.class;
run;
ods rtf text="^S={just =center}脚注";
ods rtf close;
方法三
通过unicodec或put函数结合hex.实现编码的转换,put函数结合hex.之前已经分享过,接下来主要讲unicodec的运用;unicodec是将当前SAS会话编码中的字符转换为unicode字符的函数。
%macro char2uni(text);
%global var;
data _null_;
length char unicode $200 var $30000;
retain var;
do i = 1 to klength("&text.");
char=ksubstr("&text.",i,1);
unicode= cats("\uc0\u", compress(unicodec(char,"ncr"),,"kd"), "\uc1\u32");
var=cats(var,unicode);
end;
var=tranwrd(cats(var, "\uc1"), "\uc1\u32", " ");
call symput("var", strip(var));
run;
%mend char2uni;
%char2uni(标题);
title "Test 测试";
ods rtf file="d:\test.rtf";
proc report data =sashelp.class style(report)={pretext="&var." just=left};
run;
ods rtf close
那就又有人问小编了,有些研究脚注需要用到上标下标怎么办?小编这边整理了常用的RTF控制符:
\outlinelevelN 定义标题级别文本
\tab 制表符
\~ 空格
\par 换行
\pard 清除格式
\super 上标
\sub 下标
\nosupersub 取消上下标
\b \b0 粗体(取消粗体)
\i \i0 斜体(取消斜体)
\ul \ul0 下划线(取消下划线)
\ql \qr \qc 居左、居右、居中对齐
\highlightN 高亮
\hightlight0 取消高亮
图形的烦恼
在服务器写好的图,到了客户那里面的字变成方块了。这又怎么办呢?
其实只要加一个简单的option就可以解决啦
ods graphics /outputfmt=png;