我正在使用 ODS 創建 PDF,每頁有兩個圖表。兩個圖對于型別變數(下面的“月”)具有相同的值。我想為每個頁面創建一個 TOC 書簽,它指的是最高級別變數的值(下面的“年份”)。“年”可以有任意數量的值,但每年只有兩個“月”值。我不想要多個級別的書簽,每頁只有一個。
我查看了 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 年的書簽會鏈接到第 1 年的頁面?
謝謝
uj5u.com熱心網友回復:
這聽起來絕對像是一個 PROC DOCUMENT 問題。您可能需要使用宏語言來生成代碼,因為我認為其中一些在內部proc document
(主要是setlabel
部分)不是完全可自動化的,但粗略的筆畫是:
ods document
生成檔案proc document
然后將move
月份where
= 1 和月份 = 2 條目添加到單個dir
proc document
使用setlabel
正確#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 似乎是不可避免的 - 我不確定那里的解決方法,這可能值得聯系 [email protected],因為它可能是一個錯誤。他們在 9.4m1/m2 中有一個類似的錯誤,該錯誤已修復,但并不完全相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/487347.html