如何将SAS GPLOT生成的多幅图形改为横向并排输出?
如何将SAS GPLOT生成的图形改为横向并排输出?
嘿,没问题!要把GPLOT生成的多幅图从纵向改成横向并排,SAS里有两种实用的方法,我结合你的代码给你演示下:
你的原始代码片段
%macro test; %do i = 1 %to 2; %_eg_conditional_dropds(WORK.SORTTempTableSorted&i.); proc sql noprint; select distinct name into: name from s&i.; quit; PROC SORT DATA=WORK.s&i.(KEEP=period SCORE RANGE_MID_2 RANGE_MID_1) OUT=WORK.SORTTempTableSorted&i. ; BY period; RUN; SYMBOL1 INTERPOL=JOIN HEIGHT=10pt VALUE=NONE ...
方法1:使用ODS LAYOUT GRIDDED(推荐,SAS 9.2+适用)
这是最直观的方法,通过ODS布局直接指定列数,让图形自动横向排列。你只需要在宏执行前后加上布局控制语句即可:
/* 开启2列横向布局,可根据需要调整columns参数 */ ods layout gridded columns=2; %macro test; %do i = 1 %to 2; %_eg_conditional_dropds(WORK.SORTTempTableSorted&i.); proc sql noprint; select distinct name into: name from s&i.; quit; PROC SORT DATA=WORK.s&i.(KEEP=period SCORE RANGE_MID_2 RANGE_MID_1) OUT=WORK.SORTTempTableSorted&i. ; BY period; RUN; SYMBOL1 INTERPOL=JOIN HEIGHT=10pt VALUE=NONE; /* 你的GPLOT绘图代码 */ proc gplot data=WORK.SORTTempTableSorted&i.; plot SCORE*period / <你的绘图选项>; run; quit; %end; %mend test; %test; /* 关闭布局,恢复默认输出模式 */ ods layout end;
小贴士:如果觉得图形太拥挤,可以用goptions hsize=8in vsize=6in;调整单幅图的尺寸,或者修改ods layout的column_gutter参数增加列间距。
方法2:使用GREPLAY工具(兼容旧版本SAS)
如果你的SAS版本较低,或者习惯用传统的图形目录管理,可以先把每个图形存入临时图形库,再用GREPLAY手动排版:
/* 设置图形存储参数 */ goptions reset=all device=png gout=work.gseg; %macro test; %do i = 1 %to 2; %_eg_conditional_dropds(WORK.SORTTempTableSorted&i.); proc sql noprint; select distinct name into: name from s&i.; quit; PROC SORT DATA=WORK.s&i.(KEEP=period SCORE RANGE_MID_2 RANGE_MID_1) OUT=WORK.SORTTempTableSorted&i. ; BY period; RUN; SYMBOL1 INTERPOL=JOIN HEIGHT=10pt VALUE=NONE; /* 将每个图形命名并存入work.gseg */ proc gplot data=WORK.SORTTempTableSorted&i.; plot SCORE*period / name="plot&i."; run; quit; %end; %mend test; %test; /* 用GREPLAY创建2列横向模板并拼接图形 */ proc greplay igout=work.gseg nofs; /* 定义横向2列的模板 */ template h_two_cols; define region 1 / x1=0 y1=0 x2=50 y2=100; /* 左图占50%宽度 */ define region 2 / x1=50 y1=0 x2=100 y2=100; /* 右图占50%宽度 */ endtemplate; /* 把之前存的plot1和plot2放到模板对应的区域 */ replay 1:plot1 2:plot2 template=h_two_cols; run; quit;
内容的提问来源于stack exchange,提问作者Donald William Glossfield
相关产品推荐
相关产品推荐

