这可以使用 ODS 来实现,但我有一个约束我不应该使用ODS,因为我使用了List。我需要生成RTF报告,其中包含超文本和下标文本。下面是我所指的使用ODS的示例代码。
ods rtf file='temp.rtf';
ods escapechar='^';
proc print data=sashelp.class;
title 'this value is superscripted ^{super 2} ';
title2 'this value is subscripted ^{sub 2} ';
run;
ods rtf close;
我想在Proc报告标题或脚注中打印上标或下标文本。
答案 0 :(得分:1)
愚蠢的约束需要同样愚蠢的解决方案 - 当您可以对rtf control sequences for subscripts and superscripts进行硬编码时,谁需要ODS escapechar
?
x 'cd c:\temp';
/*Produce initial rtf without superscripts / subscripts*/
ods rtf file='temp.rtf';
proc print data=sashelp.class;
title 'this value is superscripted 2';
title2 'this value is subscripted 2';
run;
ods rtf close;
/*Add them in manually as per .rtf file format specification*/
data _null_;
infile "c:\temp\temp.rtf" lrecl = 32767;
file "c:\temp\want.rtf";
input;
length rtf $32767;
rtf = _infile_;
rtf = tranwrd(rtf, 'this value is superscripted 2', 'this value is superscripted \super 2 \nosupersub');
rtf = tranwrd(rtf, 'this value is subscripted 2', 'this value is subscripted \sub 2 \nosupersub');
put rtf;
run;
答案 1 :(得分:0)
我不相信这在ODS LISTING中是可行的。 (任何告诉你你没有使用ODS的人都是错的,因为列表是一个ODS输出目的地,就像所有其他目的地一样,但我假设你的意思是你不能使用除ODS列表以外的任何东西,或者使用一些ODS ESCAPECHAR等常见的ODS技巧。
但是,在使用字体方面,ODS列表没有太多可用的内容。你可以放一个超级2:
ods listing;
proc print data=sashelp.class;
title "Fun²";
run;
ods listing close;
通过在文本中输入字符,但是并不是每个可能的上标都可用,并且我认为列表字体中没有下标等价物。
您可以在线找到字符列表,例如in this paper。您可以使用'##'x
插入它们,其中##是字符的2位十六进制代码,或者键入它们(例如,alt + 0178代表²,或使用字符映射查找它们;请确保使用右侧字体。)