SAS Latex目的地:抑制SAS转义字符

时间:2014-05-18 19:17:51

标签: sas

当我运行以下并输出到ODS Latex desination时,SAS会转义美元符号和所有括号,这些都不会在Latex中编译。

如何逐字输出每个单元格中的内容?

ods escapechar='^';

Proc format;
picture sigstar (round)
    low-0.01="***" (NOEDIT)
    0.01<-0.05="** " (FILL=' ' PREFIX='')
    0.05<-0.10="*  " (FILL=' ' PREFIX='')
    other=     " " (FILL=' ' PREFIX='');
run;

data test;
   input mean pvalue;
   datalines; 
   2.50 0.001
   3.50 0.05
   4.25 0.12
   5.00 0.01
   ;
run;

data test;
   set test;
   output = cats( put(mean,7.2)  , '{$^{', put(pvalue,sigstar.),'}$}' );
   format pvalue sigstar.;
   drop mean pvalue;
run;

ods tagsets.simplelatex file="test.tex" (notop nobot);
   proc print data=test;run;
ods tagsets.simplelatex close;

这将输出以下.text代码:

\sassystemtitle[c]{~}
\sascontents[1]{The Print Procedure}
\sascontents[2]{Data Set WORK.TEST}


\begin{longtable}{|r|l|r|}\hline
   Obs &    output &    pvalue\\\hline
\endhead
   1 &    2.50\{\$\^\{***\}\$\} &    ~\\\hline
   2 &    3.50\{\$\^\{**\}\$\} &    ~\\\hline
   3 &    4.25\{\$\^\{\}\$\} &    ~\\\hline
   4 &    5.00\{\$\^\{***\}\$\} &    ~\\\hline
\end{longtable}

如何确保第一行中的第二个单元格显示2.50{$^{***}$}而不显示2.50\{\$\^\{***\}\$\}?我在Latex中使用的软件包要求星星被上面的字符包围,所以我只想逐字输出数据集中的内容。

2 个答案:

答案 0 :(得分:1)

我不认为你通常会在乳胶标签中这样做。标记集的要点是获取正常的SAS数据并重新格式化以生成乳胶文件;您正在做的是手动执行乳胶文件本身。

This paper展示了一个如何做一些接近你想要的事情的例子;基本上,你编写乳胶文件sans-SAS提供的图形或图表,标记你想要SAS部分去的地方,并通过SAS代码有效地粘贴它。您还应该能够在SAS中编写初始乳胶文件 - 但不要使用标记集,只需将其直接写入数据步骤。

最简单的方法可能是简单地定制自己的乳胶标签。编辑最接近您要查找的内容,并根据需要添加您自己的代码。一个例子是this question

答案 1 :(得分:1)

为了避免这些字符被转义,只需编辑SimpleLatex标记集末尾的以下行:

mapsub = %nrstr("/\%%/$/\&/\~/\\#/{\textunderscore}");
map = %nrstr("%%$&~#_");