使用by值交叉两个不同过程的输出

时间:2013-01-30 00:03:44

标签: sas

我有一个大型SAS数据集,我想通过价值处理制作一系列表格和图表。我将这些输出为PDF。

在通过数据时,有没有办法让SAS在表格和图表之间交替?现在,我必须首先打印所有表格,然后打印图表。如果它只是4个表/图表,那我就可以写

这是一个简单的例子:

data sample;
  input byval $ item $ amount;
  datalines;
A X 15
A Y 16
A Z 12
B X 25
B Y 10
B Z 18
;
run;

symbol1 i=j;

proc print data=sample;
  by byval;
  var item amount;
run;

proc gplot uniform data=sample;
  by byval;
  plot amount*item;
run;

这会打印2个表格,然后是2个图表。 我希望“A”的图表位于“A”表之后,以便读者可以翻阅pdf并始终一起查看相关的图表和表格。

我可以为每一个编写单独的过程,但是gplot不会有一个统一的轴(如果我有100个不同的组而不是2个,它就会变得混乱。)

我考虑将它们用于播放greplay但是你不能使用带有“#BYVAL1”的标题。

有没有简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

我从未使用它,但可能值得查看ODS文档。这允许您存储所有过程的输出,然后使用PROC DOCUMENT从它们引用特定项目。

以下是SAS网站的链接,其中包含有关此内容的有用信息,特别是Cynthia Zender为SAS全球论坛2009提供的论文。

http://support.sas.com/rnd/base/ods/odsdocument/index.html

Cynthia还定期为SAS支持社区网站(https://communities.sas.com/community/support-communities)做出贡献,因此如果您仍然被卡住,可能值得询问。

祝你好运

答案 1 :(得分:0)

我不知道有什么方法可以直接做你的要求。 GREPLAY可能是你最接近的;主要问题是SAS线性处理PROC,首先处理整个PROC PRINT,然后处理整个PROC GPLOT。 GREPLAY允许您重新显示输出,但如果由于#BYVAL问题而无法满足您的需求,我不确定是否有更好的解决方案。也许你之后可以修改标题(不确定GREPLAY是否允许这样做)?

您可以尝试使用ODS LAYOUT,但我认为这不会更好。 可以更好的一种方式是,如果你可以在“页面”上找到两列,一列是PROC PRINT输出,一列是PROC GPLOT,然后打印列的页面比另一个。我不认为这是可能的,但值得探讨。

您也可以尝试设置一个宏来单独执行每个BYVAL,手动以统一的方式定义轴(即,根据您自己计算的正确轴参数来定义它,作为宏的参数)。这可能是最简单的解决方案,可能仍然允许#BYVAL正常工作。

您也可以尝试浏览Richard DeVenezia的网站(http://www.devenezia.com/downloads/sas/samples/),该网站有很多SAS / GRAPH解决方案的例子。他也有时会在SAS-L(sasl@listserv.uga.edu)上发帖,不确定我是否在StackOverflow上见过他。他可能是最有可能回答我所知道的问题的人。