SAS - 将一些图表合并为一个pdf(空白页面)

时间:2018-01-23 15:26:25

标签: pdf graph sas

我的问题如下。我通过宏循环2图表创建,我想将它们放入一个pdf页面。在互联网上,我发现这个解决方案工作正常,并创建一个页面和两个图表的pdf文档:

ods _all_ close;
options papersize="ISO A4" orientation=portrait;
ods pdf file="C:\JJ\lapse_monitoring\lm201712_TEST\GRAF\sample.pdf";

ods graphics / width=12cm height=12cm;
ods layout gridded columns=1;

ods region;
proc sgplot data=sashelp.class;
vbox age / group=sex;
run;

ods region;
proc sgplot data=sashelp.class;
histogram age;
run;
ods layout end;
ods pdf close;

但如果我对我的代码使用相同的逻辑,SAS会创建一个pdf文件,前两页为空白,我想要的输出在第3页上。我的问题是为什么添加了两个空白页面以及如何纠正代码以摆脱它们。

data out_i_a; set sashelp.retail; run;
data out_ii_b; set sashelp.retail; run; 

data y;
length saz tef $100;
input saz $ tef $; 
datalines;
i a
ii b
;
run;

%macro grafy();
proc sql;
  select count(*) into: pocet from y;
quit;

ods _all_ close;
/*goptions reset=all hsize=22cm vsize=10cm;*/
ods pdf file="C:\TOT_test.pdf";
ods layout gridded columns=1;


%do i=1 %to &pocet;
data _null_;
   set y (obs=&i);
   call symput("saz" ,strip(saz));
   call symput("tef" ,strip(tef));
run;

ods region;
ods pdf text="&saz._&tef";
symbol1 interpol=join height=10pt VALUE=NONE LINE=1 WIDTH=1 CV= _STYLE_;
symbol2 interpol=join height=10pt VALUE=NONE LINE=1 WIDTH=1 CV= _STYLE_;
Legend1 value=('SALES' 'YEAR');
axis1 label=('# sales');
axis3 label=('# year');
axis2 label=('date');
proc gplot data= out_&saz._&tef;
plot (SALES)*DATE   / overlay skipmiss
VAXIS=AXIS1 
HAXIS=AXIS2 LEGEND=Legend1;
plot2 (YEAR)*DATE / overlay skipmiss
VAXIS=AXIS3
HAXIS=AXIS2 LEGEND=Legend1;
run;

ods region;
symbol1 interpol=join height=10pt VALUE=NONE LINE=1 WIDTH=1 CV= _STYLE_;
symbol2 interpol=join height=10pt VALUE=NONE LINE=1 WIDTH=2 CV= _STYLE_;
Legend1 value=('year' 'month');
axis1 label=('in %, p.a.');
axis2 label=('date');
proc gplot data= out_&saz._&tef;
 plot (YEAR MONTH)*DATE   / overlay skipmiss
 VAXIS=AXIS1 
 HAXIS=AXIS2 LEGEND=Legend1;
run;
 %end;

ods layout end;
ods pdf close;

%mend;

%grafy();

可以通过添加

来解决空白页面的问题
goptions reset=all hsize=22cm vsize=10cm; 

进入代码。

1 个答案:

答案 0 :(得分:1)

我无法复制您的问题,但有一点我强烈建议使用SGPLOT代替GPLOT。它是现代的,支持的图形选项。适应这种特殊需求会更容易。

举个例子:

ods _all_ close;
options papersize="ISO A4" orientation=portrait;
ods pdf file="C:\temp\sample.pdf";

ods graphics / width=12cm height=12cm;
ods layout gridded columns=1;

ods region;
proc sgplot data=sashelp.class;
scatter x=weight y=age/x2axis markercharattrs=(color=blue)  markerfillattrs=(color=blue) markerattrs=(symbol=circlefilled); 
scatter x=height y=age/ markercharattrs=(color=red) markerfillattrs=(color=red) markerattrs=(symbol=diamondfilled);
xaxis label="Height";
x2axis label="Weight";
yaxis label="Age";
run;

ods region;
proc sgplot data=sashelp.class;
scatter x=weight y=sex/x2axis markercharattrs=(color=blue) filledoutlinedmarkers markerfillattrs=(color=blue) markerattrs=(symbol=circlefilled); 
scatter x=height y=sex/ markercharattrs=(color=red) filledoutlinedmarkers markerfillattrs=(color=red) markerattrs=(symbol=diamondfilled);
xaxis label="Height";
x2axis label="Weight";
yaxis label="Sex";
run;ods layout end;
ods pdf close;