带有 sgplot 的 ODS PDF:如何每页制作一个 TOC 书签(每页有两个图表)

ODS PDF with sgplot: How to make one TOC bookmark per page (with two graphs per page)

我正在使用 ODS 创建 PDF,每页有两个图表。两个图都具有相同的类型变量值,如下所示 'month'。我想为每个页面创建一个目录书签,它引用最高级别变量的值(下面的'year')。 'year' 可以有任意数量的值,但每年只有两个 'month' 值。我不想要多级书签,每页一个。

我查看了 ODS 文档,但我不知道如果我有不确定数量的图表是否可以将其用于此目的。

这是我现在拥有的:

data new;
do year = 1 to 5;
    do month = 1 to 2;
        do day = 1 to 10;
            emp = year*month*day;
            output;
        end;
    end;
end;
run;

ods pdf file='K:\brent\test_graphs_pages.pdf' startpage=never;
    proc sgplot data=new;
    by year month;
    series x = day y = emp;
    run;
ods pdf close;

它给我三个级别的书签,每页两个书签。我怎样才能每页只得到一个?另外,为什么第 2 年的书签 link 到第 1 年的页面?

谢谢

这听起来确实像是 PROC DOCUMENT 问题。您可能需要使用宏语言来生成代码,因为我认为其中一些代码在 proc document(主要是 setlabel 部分)内不能完全自动化,但大体上是:

  • ods document生成文档
  • proc document 然后到 movewhere month=1 和 month=2 条目到单个 dir
  • proc documentsetlabel 使用 #BYVAL(YEAR) 正确设置标签
  • proc document replay 输出文档。

这是第一部分 - 您仍然想要自定义标签,就像我说的那样,您需要使用宏语言自动执行此操作。

data new;
  do year = 1 to 5;
    do month = 1 to 2;
        do day = 1 to 10;
            emp = year*month*day;
            output;
        end;
    end;
  end;
run;


ods document name=TOCtest(write);
ods pdf file='h:\temp\test_graphs_pages_before.pdf' startpage=never;
    proc sgplot data=new;
    by year month;
    series x = day y = emp;
    run;
ods pdf close;
ods document close;


ods listing;
proc document name=TOCtest;
list / levels=all; run;
make \Year1;
move \SGPlot#1\ByGroup1#1\SGPlot#1  to \Year1#1;
move \SGPlot#1\ByGroup2#1\SGPlot#1  to \Year1#1;
delete \SGPlot#1\ByGroup1#1;
delete \SGPlot#1\ByGroup2#1;


make \Year2;
move \SGPlot#1\ByGroup3#1\SGPlot#1  to \Year2#1;
move \SGPlot#1\ByGroup4#1\SGPlot#1  to \Year2#1;
delete \SGPlot#1\ByGroup3#1;
delete \SGPlot#1\ByGroup4#1;

make \Year3;
move \SGPlot#1\ByGroup5#1\SGPlot#1  to \Year3#1;
move \SGPlot#1\ByGroup6#1\SGPlot#1  to \Year3#1;
delete \SGPlot#1\ByGroup5#1;
delete \SGPlot#1\ByGroup6#1;

make \Year4;
move \SGPlot#1\ByGroup7#1\SGPlot#1  to \Year4#1;
move \SGPlot#1\ByGroup8#1\SGPlot#1  to \Year4#1;
delete \SGPlot#1\ByGroup7#1;
delete \SGPlot#1\ByGroup8#1;

make \Year5;
move \SGPlot#1\ByGroup9#1\SGPlot#1  to \Year5#1;
move \SGPlot#1\ByGroup10#1\SGPlot#1  to \Year5#1;
delete \SGPlot#1\ByGroup9#1;
delete \SGPlot#1\ByGroup10#1;
run;
list /details levels=all; run;

ods pdf file="h:\temp\test_graph_pages_after.pdf" startpage=never;
replay ^
run;
ods pdf close;

这仍然表现出您之前注意到的“一次性”问题。对于 startpage=never 这似乎是不可避免的 - 我不确定那里的解决方法,可能值得联系 support@sas.com 因为它可能是一个错误。他们在 9.4m1/m2 中有一个类似的错误已修复,但并不完全相同。