当我运行以下并输出到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中使用的软件包要求星星被上面的字符包围,所以我只想逐字输出数据集中的内容。
答案 0 :(得分:1)
我不认为你通常会在乳胶标签中这样做。标记集的要点是获取正常的SAS数据并重新格式化以生成乳胶文件;您正在做的是手动执行乳胶文件本身。
This paper展示了一个如何做一些接近你想要的事情的例子;基本上,你编写乳胶文件sans-SAS提供的图形或图表,标记你想要SAS部分去的地方,并通过SAS代码有效地粘贴它。您还应该能够在SAS中编写初始乳胶文件 - 但不要使用标记集,只需将其直接写入数据步骤。
最简单的方法可能是简单地定制自己的乳胶标签。编辑最接近您要查找的内容,并根据需要添加您自己的代码。一个例子是this question。
答案 1 :(得分:1)
为了避免这些字符被转义,只需编辑SimpleLatex标记集末尾的以下行:
mapsub = %nrstr("/\%%/$/\&/\~/\\#/{\textunderscore}");
map = %nrstr("%%$&~#_");