[英]SAS: plotting dates excluding weekends using PROC SGPLOT
我正在運行SAS 9.3,並且嘗試使用PROC SGPLOT創建一個圖,該圖(1)僅將數據集中包含的日期顯示為連續日期(即,不包括周末和節假日),而(2)顯示關於XAXIS(例如,一個月的第一天)。 我可以分別做這兩個,但是我無法找出兩者一起的方法。 具體來說,當我使用DISCRETE選項時,似乎已禁用VALUE和TICKVALUEFORMAT選項(在文檔中看不到對此的任何討論)。
所以我有兩個問題:
(1)有沒有辦法解決DISCRETE選項和VALUES / TICKVALUES之間的這種相互作用?
(2)是否有更好的方法來做我想做的事情?
(完美的事情是繪制X和Y變量,並使用第三個變量作為x軸的標簽,但我找不到實現此目的的方法。)
這是一些示例代碼說明了這一點; 如果不包括周末/節假日,則代碼應標出一條直線(我已附加了以下生成的圖):
*Create Dataset of Weekdays, dropping some holidays;
data weekdays (where=(weekday~=1 and weekday~=7 and date~="01JAN1960"d));
format date date9.;
do i=0 to 100;
date=i;
weekday=weekday(date);
year=year(date);
month=year*100+month(date);
output;
end;
drop i;
run;
*Create line and data label;
data weekdays;
set weekdays;
line=_n_;
format xlab $12.;
by month;
if first.month then xlab=put(date,monyy7.);
run;
以下內容將日期繪制為DISCRETE點:正確地繪制了數據點,但是VALUES和TICKVALUEFORMAT命令沒有影響:
*Plot dates as discrete -- correct points, VALUES and TICKVALUEFORMAT have no effect;
proc sgplot data=weekdays;
series x=date y=line;
scatter x=date y=line;
xaxis type=discrete DISCRETEORDER=DATA values=(3 31 60 91) TICKVALUEFORMAT=monyy7.;
run;
以下代碼是相同的,但是刪除了DISCRETE選項,因此將其繪制為日期軸,顯然包括周末,但是VALUE和TICKVALUEFORMAT選項起作用:
*Plot all dates as dates -- incorrect points, but VALUE and TICKVALUEFORMAT work;
proc sgplot data=weekdays;
series x=date y=line;
scatter x=date y=line;
xaxis values=(3 31 60 91) TICKVALUEFORMAT=monyy7.;
run;
任何建議將受到熱烈歡迎! 謝謝!
這里的問題是,當您使用離散量時,SAS不再真正將變量視為文本以外的任何其他變量。 如果在兩個示例中使用TMPLOUT選項,則可以看到這一點:在第一個示例中,值用引號引起來 ,因為它們基本上被視為字符。
解決此問題的一種方法是使用x2axis和一個輔助變量。
在這里,在創建步驟中,我添加了一個將線性計數的計數器-您在做什么。 所以1,2,3,4,5。
*Create Dataset of Weekdays, dropping some holidays;
data weekdays ;
format date date9.;
do i=0 to 100;
date=i;
weekday=weekday(date);
year=year(date);
month=year*100+month(date);
if (weekday~=1 and weekday~=7 and date~="01JAN1960"d) then do;
counter+1;
output;
end;
end;
run;
*Create line and data label;
data weekdays;
set weekdays;
line=_n_;
format xlab $12.;
by month;
if first.month then xlab=put(date,monyy7.);
run;
現在,我添加了一個“虛擬”圖,該圖有意不顯示(白色和透明),但告訴SAS XAxis使用什么。 我只是使用普通的FORMAT來獲取正確的值標簽。 然后,我告訴其他圖使用X2AXIS,這意味着它們可以組成自己的軸(如果要查看外觀,則可以刪除DISPLAY = NONE),但外觀仍然相同。
*Plot dates as discrete -- correct points, VALUES and TICKVALUEFORMAT have no effect;
proc sgplot data=weekdays tmplout="c:\temp\test_sgplot2.sas";
scatter x=date y=line/markeropts=(color=white) transparency=1;
format date monyy7.;
series x=counter y=line/x2axis;
scatter x=counter y=line/x2axis;
xaxis values=(3 31 60 91) type=discrete discreteorder=data TICKVALUEFORMAT=monyy7.;
x2axis display=none;
run;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.