Печатать верхний или нижний индекс в SAS без ODS

Этого можно добиться с помощью ODS, но у меня есть ограничение, что я не должен использовать ODS, поскольку я использую Listing. Мне нужно генерировать отчеты 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.


person Nimit_ZZ    schedule 03.11.2014    source источник
comment
Подождите, я действительно не понимаю этого теперь, когда я прочитал это снова. LISTING отличается от RTF, они не связаны друг с другом. Можете ли вы объяснить ограничение более подробно (если возможно, дословно, особенно если это вопрос домашнего задания)?   -  person Joe    schedule 04.11.2014


Ответы (2)


Глупое ограничение требует столь же глупого решения — кому нужно 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;
person user667489    schedule 03.11.2014
comment
Я полностью смущен вопросом, но мне нравится этот ответ, действительно ли он решает проблему! - person Joe; 04.11.2014

Я не верю, что это возможно в СПИСОКЕ ODS. (Любой, кто говорит вам, что вы не используете ODS, ошибается, потому что листинг является местом назначения вывода ODS, как и все другие места назначения, но я предполагаю, что вы имеете в виду, что вы не можете использовать ничего, кроме листинга ODS, или использовать некоторые распространенных трюков ODS, таких как ODS ESCAPECHAR).

Тем не менее, в ODS Listing не так много возможностей для игры со шрифтами. Вы можете поставить супер-2:

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

буквально введя символ в свой текст, но это доступно не для каждого возможного верхнего индекса, и я не думаю, что в шрифте листинга есть эквиваленты нижнего индекса.

Список персонажей можно найти в Интернете, например в этой статье. Вы можете вставить их с помощью '##'x, где ## — 2-значный шестнадцатеричный код символа, или введя их (например, alt+0178 для ², или используйте карту символов, чтобы найти их; убедитесь, что вы используете правильный шрифт.)

person Joe    schedule 03.11.2014