日期轴格式为 m/d/yy 的 SAS proc sgplot(即没有前导零)

SAS proc sgplot with date axis formatted as m/d/yy (i.e. without leading zeros)

我正在尝试使用 SAS proc sgplot 绘制散点图并将 x 轴格式化为 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;