Excel 使用频率或百分比的开始时间和结束时间

Excel 使用频率或百分比的开始时间和结束时间,excel,sas,excel-2010,vba,Excel,Sas,Excel 2010,Vba,我有一个数据,有开始时间、结束时间、停留时间(结束-开始)和受试者的#。我试图创建一个图表、线条、条形图或柱状图,显示在特定时间有多少受试者。所以横轴的时间是从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

我有一个数据,有开始时间、结束时间、停留时间(结束-开始)和受试者的#。我试图创建一个图表、线条、条形图或柱状图,显示在特定时间有多少受试者。所以横轴的时间是从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 Enterprise Guide和excel创建一个图表

我试过PROC GPLOT,但它不能提供我想要的。对直线图和条形图(堆叠)也做了同样的操作,但不能。我不确定是否有更简单的方法。这是我在SAS中使用的一个代码,例如,我尝试在excel中创建一个堆叠条形图

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

RUN; QUIT;
请帮忙


谢谢

您需要转换数据,为您查看的每个时间段创建一行(例如,如果您想显示每个小时内任何时间点出现的人的人数,请显示小时)

您可以这样做:

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;
然后可以在条形图中绘制
时间
变量

对于某些方法(如ETS),您的数据可能是一个问题,因为您使用的是重叠的时段-您的受试者1有4个停留时间重叠严重。如果这些是不同的日子,您可能希望在主题中添加一个日子标记,使其具有唯一性

使用数据的示例:

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代码。

谢谢Joe。我已经有一个这样的专栏了。我添加了一个条件,如果Start在0-1之间,则为1。像那样。我知道这不是最好的办法。我尝试了你的代码,它给了我这个错误——“错误:无效的DO循环控制信息,初始或TO表达式缺失,或者BY表达式缺失、零或无效。”尝试使用PROC EXPAND-PROC EXPAND data=Input out=output from=minute TO=hour;id启动;一开始;转换对象/方法=观察到的总量=平均值;运行;/*获取此错误-“错误:发现重复ID值的观测值。数据集输入中观测值2处ID变量start=0:04:00的值与上一个观测值相同。”我不理解您的第一个注释。您可以显示在02:00到21:00之间有一行的数据。我建议您需要19或20行(取决于您如何定义事物)。你的数据不是这样吗?我补充了一些例子。我不确定是否要扩展;我认为它很容易做到这一点,但如果不做更多的工作(基本上是复制另一种方法),我不确定它是否有用。