在没有ODS的SAS中打印上标或下标

时间:2014-11-03 11:48:47

标签: sas sas-ods

这可以使用 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报告标题或脚注中打印上标或下标文本。

2 个答案:

答案 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代表²,或使用字符映射查找它们;请确保使用右侧字体。)