0

这可以使用ODS来实现,但是我有一个限制,即我不应该使用 ODS,因为我正在使用清单。我需要生成其中包含超级和下标文本的 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 报告标题或脚注中打印上标或下标文本。

4

2 回答 2

1

愚蠢的约束需要同样愚蠢的解决方案——ODS escapechar当您可以硬编码下标和上标的 rtf 控制序列时,谁需要?

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;
于 2014-11-03T18:33:19.857 回答
0

我不相信这在 ODS 列表中是可能的。(任何告诉你没有使用 ODS 的人都是错误的,因为列表是 ODS 输出目标,就像所有其他目标一样,但我假设你的意思是你不能使用 ODS 列表以外的任何东西,或者使用一些常见的 ODS 技巧,如 ODS ESCAPECHAR)。

但是,ODS 列表在使用字体方面并没有太多可用的东西。你可以放一个超2:

ods listing;
proc print data=sashelp.class;
title "Fun²";
run;
ods listing close;

通过在文本中逐字输入字符,但这不适用于所有可能的上标,而且我认为列表字体中没有下标等价物。

您可以在线找到字符列表,例如在本文中。您可以将它们插入'##'x其中 ## 是字符的 2 位十六进制代码,或者通过键入它们(例如,alt+0178 用于 ²,或使用字符映射来查找它们;确保使用正确的字体。)

于 2014-11-03T17:54:57.550 回答