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

SAS绘制折线图如何去除x轴OLD标签或将OLD作为单独数据点展示

问题根因

你当前的折线图异常是因为policy_vintage是数值型日期变量,你自定义的格式仅修改了显示值,未改变原始数值,SGPLOT默认将其识别为连续轴,所有映射为OLD的早于2020-07-31的日期数值都集中在x轴最左侧,导致折线显示异常。

方案1:X轴仅展示日期值,移除OLD分类

直接在绘图步骤过滤掉所有归类为OLD的观测即可,只保留2020年8月及之后的日期数据:

proc sgplot data=diff1;
/* 过滤掉OLD对应的观测 */
where policy_vintage > '31JUL2020'd;
series x=policy_vintage y=POLICY_TODAY / markerattrs=(color=vligb symbol=circlefilled size=20) 
          lineattrs=(color=vligb thickness=2);
series x=policy_vintage y=POLICY_PRIOR / y2axis markerattrs=(color=salmon symbol=circlefilled size=9) 
          lineattrs=(color=salmon thickness=2);
run;

处理后x轴只会显示正常的日期序列,不会出现OLD相关内容,折线会按日期顺序正常排列。

方案2:保留OLD作为单个独立数据点展示

需要将x轴转换为离散轴,统一存储OLD和日期字符串作为分类值,保证OLD作为单独分类显示:

  1. 首先修改数据集生成逻辑,新增字符型的x轴分类变量,保证排序正确:
proc sql;
    create table diff1 as
        select today.policy_vintage
             , put(today.policy_vintage, vintf.) as x_label length=20
             , POLICY_TODAY
             , POLICY_PRIOR
             , POLICY_TODAY - POLICY_PRIOR as DIFFERENCE
        from newdiff today
        LEFT JOIN
             (select *
              from _work.POLICY_VINTAGE_WEEKLY
              where run_date < today()
              having run_date = max(run_date)
             ) prior
        ON today.policy_vintage = prior.policy_vintage
   order by policy_vintage;
quit;
  1. 修改绘图代码,指定x轴为离散类型,按数据顺序展示分类:
proc sgplot data=diff1;
xaxis type=discrete discreteorder=data label="Policy Vintage";
series x=x_label y=POLICY_TODAY / markerattrs=(color=vligb symbol=circlefilled size=20) 
          lineattrs=(color=vligb thickness=2);
series x=x_label y=POLICY_PRIOR / y2axis markerattrs=(color=salmon symbol=circlefilled size=9) 
          lineattrs=(color=salmon thickness=2);
run;

处理后OLD会作为x轴的第一个分类点单独展示,后续依次排列所有日期点,折线连接逻辑符合预期。


内容的提问来源于stack exchange,提问作者user17322178

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:45:04