在SAS中,对于rtf文件,ODS的变量值是最简单的方法是什么?

时间:2014-08-05 04:16:55

标签: sas

ODS对rtf文件的变量值的最简单方法是什么? 没有显示表格或列。 如果可能的话,我宁愿不必使用宏来执行此操作。

先谢谢我的朋友们

3 个答案:

答案 0 :(得分:0)

两个选项:

ods proctitle=no;
options nodate nonumber;
title;
ods rtf file="d:\temp\test.rtf" style=minimal;

proc print data=sashelp.class(where=(name='Alfred')) noobs label style={borderstyle=none}; 
  var age;
  label age='00'x;
run;

data _null_;
  set sashelp.class;
  where name='Alfred';
  declare odsout ODS();
  ods.format_text(data:age);
run;


ods rtf close;

后者完全符合您的要求,但RTF并不完全支持(请参阅日志)。前者或多或少地做你想要的;还有一个标题行,但它是空白的。

正如评论中所指出的,如果有更多的背景,这不是完全相同的问题。

答案 1 :(得分:0)

如果ODS不是必需的,并且您只是在最简单和最快的方法之后,您可以始终将值直接写入扩展名为.rtf的文件。如果需要,这将导致最干净的RTF输出。

简易版:

data _null_;
  file "c:\test.rtf";
  put "Hello";
run;

取决于文件的收件人以及他们将如何使用它等等。所产生的文件将在Word和大多数.RTF读者中完全打开。

更复杂的版本:

如果您需要有效的.RTF语法,您还可以添加有效RTF的最小语法,我可以收集的内容如下所示:

{\rtf1\ansi\f0
Hello
}

产生上述代码的代码:

data _null_;
  file "c:\test.rtf";
  put "{\rtf1\ansi\f0";
  put "Hello";
  put "}";
run;

如果表中有变量,则可以将它们全部打印到.rtf文件中,如下所示:

data _null_;
  file "c:\test.rtf";
  set mytable end=eof;
  if _n_ eq 1 then do;
    put "{\rtf1\ansi\f0";
  end;
  put my_variable;
  if eof then do;
    put "}";
  end;
run;

使用的参考文献:http://www.biblioscape.com/rtf15_spec.htm和维基百科。

答案 2 :(得分:0)

如果你已经有一些其他文本进入你的rtf并且你需要将你的变量的值放在内联中,那么我认为最明智的方法是将值存储在宏变量中并将其放在中间位置rtf中的文字。如果您希望将宏逻辑保持在最低限度,可以在数据步骤中通过 call symput 生成宏变量,或者根据您的偏好通过proc sql 选择。 E.g。

proc sql noprint;
    select Age
    into :Alfred_age 
    from sashelp.class 
    where name = 'Alfred';
quit;

ods listing close;
ods rtf file = "C:\temp\test1.rtf";

ods rtf text = "Alfred's age is %sysfunc(strip(&Alfred_age)).";

ods rtf close;
ods listing;