日期轴格式为 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;
我正在尝试使用 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;