簡體   English   中英

SAS:使用PROC SGPLOT繪制日期(不包括周末)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM