You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:27:44