开始时间和结束时间,频率或百分比

我有一个有开始时间,结束时间,停留时间(结束开始)和#个主题的数据。 我正在创build一个图表,线条,条形或直方图,显示在特定时间有多less个科目。 所以水平轴从00:00到24:00有时间,垂直轴有主题的总数或%。

Start End Subject Stay 01:00 02:00 1 01:00 01:00 01:45 1 00:45 02:00 21:00 1 19:00 03:10 14:10 1 11:00 

数据集是巨大的,我正在使用SAS企业指南和Excel创build一个graphics。

我已经尝试过PROC GPLOT,但它不提供我所需要的。 线图和条形图(堆叠)做了同样的事情,但不能。 我不确定是否有更简单的方法来做到这一点。 这是我在SAS EG中使用的代码。 试图在Excel中创build一个堆积条形图。

 PROC GPLOT DATA=Input; PLOT Stay * start / AREAS=1 FRAME VAXIS=AXIS1 HAXIS=AXIS2 ; RUN; QUIT; 

请帮忙。

谢谢

您需要将数据转换为每个时间段(例如,如果您希望显示每小时任何时间在场的人数),则创build一行。

你可以做这样的事情:

 data want; set have; do time=intnx('Hour',start,0) to end by 3600; *start at top of current hour, increment by 1 hour (3600 seconds); output; end; run; 

然后,您可以在条形图中绘制timevariables。

您的数据可能是这些方法(如ETS)中的一个问题,因为您使用的是重叠期 – 您有4个重复的重复期的主题1。 如果这些是不同的日子,你可能想添加一个日标记到主题,使他们独特。

使用您的数据的示例:

 data have; input Start :time5. End :time5. Subject Stay :time5.; format start end stay time5.; datalines; 01:00 02:00 1 01:00 01:00 01:45 2 00:45 02:00 21:00 2 19:00 03:10 14:10 3 11:00 ;;;; run; data want; set have; do hour_mark = intnx('Hour',start,0) to end by 3600; output; end; keep hour_mark subject; format hour_mark time5.; run; proc sgplot data=want; vbar hour_mark; run; 

您可以使用更有趣的数据集运行相同的示例:

 data have; if _n_=1 then call streaminit(7); do subject = 1 to 100; start=floor(rand('Uniform')*86000);*almost all day, but make sure we have a bit of room for end; end =floor(rand('Uniform')*(86400-start))+start; stay=end-start; output; end; format start end stay time5.; run; 

然后使用相同的WANT和SGPLOT代码。