Formatting SAS proc sgplot,日期轴格式为m/d/yy(即无前导零)

Formatting SAS proc sgplot,日期轴格式为m/d/yy(即无前导零),formatting,sas,axis,scatter-plot,Formatting,Sas,Axis,Scatter Plot,我正在尝试使用SAS proc sgplot制作散点图,并将xaxis的格式设置为m/d/yy(例如1/1/06)。我创建了如下自定义日期格式: PICTURE myDateFmt low-high = '%m/%d/%0y' (DATATYPE = date); 然后,我在数据步骤中将日期变量格式化为此格式,并将此行放入proc sgplot步骤: xaxis offsetmin = 0 offsetmax = 0 display=(nolabel) tickvalueformat=data

我正在尝试使用SAS proc sgplot制作散点图,并将xaxis的格式设置为m/d/yy(例如1/1/06)。我创建了如下自定义日期格式:

PICTURE myDateFmt low-high = '%m/%d/%0y' (DATATYPE = date);
然后,我在数据步骤中将日期变量格式化为此格式,并将此行放入proc sgplot步骤:

xaxis offsetmin = 0 offsetmax = 0 display=(nolabel) tickvalueformat=data;
但是,当我这样做时,日期轴文本全部消失。有人知道如何将绘图中的日期轴格式化为m/d/yy格式吗


提前谢谢你

我认为TICKVALUEFORMAT选项肯定与图片格式有问题。尝试此操作时,我的图形在x轴上显示“%m/%d/%0y”。但是如果我打印数据,格式化的值就如所需,因此我认为图片格式创建正确

我做了一项工作,为感兴趣的日期范围创建了一个值格式,然后在SGPLOT中使用它。为此,我必须生成一个数据集,在感兴趣的范围内每天有一条记录,然后将该数据集转换为一种格式。虽然不理想,但它确实有效

希望这有帮助

proc format;
    PICTURE myDateFmt 
        low-high = '%m/%d/%0y' (DATATYPE = date)
;
run;

*** TEST DATA TO EXPERIMENT WITH - SPANS YEAR 1987 ***;
data stocks;
    set sashelp.stocks;
    where (mdy(1,1,1987) <= date <= mdy(12,31,1987));
    format date myDateFmt. ;
run;

title 'USER CREATED PICTURE FORMAT DOES NOT WORK';
proc sgplot data=work.stocks;
    scatter x=date y=close;
    xaxis offsetmin = 0 offsetmax = 0 display=(nolabel) tickvalueformat=data;
run;


title 'SAS SUPPLIED FORMAT DOES WORK'; 
proc sgplot data=work.stocks;
    scatter x=date y=close;
    xaxis offsetmin = 0 offsetmax = 0 display=(nolabel) tickvalueformat=monyy5.;
run;


*** RECREATE FORMAT FOR SPECIFIC DATE RANGE THAT MATCHES DATA AND GRAPH AXIS DESIRED ***;
*** THIS WILL CREATE A FORMAT ENTRY FOR EVERY DAY IN THE RANGE ***;
data cntldate;
    fmtname = 'myDateN';
    type = 'n';
    *** HARD CODE START/END DATES TO MATCH GRAPH AXIS DESIRED ***;
    do start = mdy(1,1,1987) to mdy(1,1,1988);
        *** FORMAT LABEL WILL BE DATE FORMAT WITHOUT LEADING ZEROS ***;
        label = strip (put(start, myDateFmt.) );
        output;
    end;
run;

*** CONVERT CONTROL DATASET TO A FORMAT ***;
proc format library=work cntlin=cntldate;
run;


title 'USER CREATED VALUE FORMAT WORKS';
title2 'NOTE: HARDCODE OF START/END VALUE FOR XAXIS, OTHERWISE SAS MAY SELECT AXIS ENDPOINT OUTSIDE OF FORMAT RANGE';
title3 'NOTE2: AXIS MAY NOT REPORT EVERY MONTH DUE TO SPACE ISSUES';
proc sgplot data=work.stocks;
    scatter x=date y=close;
    xaxis offsetmin = 0 offsetmax = 0 display=(nolabel) tickvalueformat=myDateN.
        values=('1jan87'd to '1jan88'd by month);
run;
proc格式;
图片myDateFmt
低-高=“%m/%d/%0y”(数据类型=日期)
;
跑
***试验数据-跨度1987年***;
数据储存;
设置sashelp.stocks;

其中(mdy(1,11987)感谢您的输入Sunny!我应该提到我正在为大量图表执行此操作,我更希望SAS自动选择要在轴上放置的日期值。因此,硬编码开始-结束日期和间隔将不是非常有效。但我很感激这一点。如果您真的想在图形中使用此格式,请仍然可以使用上面的代码。只需将CNTLDATA数据集中的DO循环更改为在数据中的日期范围之前和之后运行几年。一个极端的做法是在1900-2099之间每天生成DO循环。然后在SGPLOT中,您不需要为xaxis硬编码任何最小/最大规格,当SAS选择不时他为每个图的X轴计算它想要的值,格式值将存在。只是一个建议供您考虑。祝您图形好运!听起来很棒!!我下一步会试试。谢谢sunny。