我正在尝试在SAS中创建一个图,以显示一年中每个实验室每周提交的实验室结果数量。我已设法将其绘制出来,但该图跳过了几周,其中实验室提交了零个实验室结果,即计数为零。
data testlabs;
input labdate:datetime22.3 labname$;
cards;
08JAN2019:09:40:37.000 A
07AUG2019:09:36:16.000 A
08AUG2019:13:16:51.000 B
21APR2019:09:33:54.000 B
22APR2016:12:47:51.000 B
08JUN2019:09:25:50.000 B
09JAN2019:13:48:24.000 A
10JAN2019:12:21:02.000 C
19FEB2019:14:40:39.000 C
09MAR2019:09:38:48.000 C
20NOV2019:09:50:30.000 A
07AUG2019:14:03:55.000 A
09MAR2019:09:31:39.000 B
09JUN2019:12:11:29.000 B
04APR2019:17:00:00.000 B
26NOV2019:13:05:28.000 C
09JUN2019:09:38:50.000 C
06MAY2019:12:44:20.000 C
08MAY2019:10:14:52.000 A
08JUN2019:08:43:17.000 A
02DEC2019:12:26:51.000 A
05MAY2019:12:53:17.000 B
06SEP2019:09:52:36.000 C
10MAR2019:09:31:41.000 A
08MAR2019:09:40:40.000 C
14JUL2019:09:38:59.000 B
08JAN2019:10:40:37.000 A
;
run;
proc sql;
create table testlabs1 as
select distinct count(*) as lab_count,
labname,
put(datepart(labdate),weeku6.)as wk
from testlabs
where year(datepart(labdate))>2018
group by wk, labname
order by labname, wk
;quit;
symbol color=blue interpol=join;
proc gplot data=testlabs1;
plot lab_count*(wk);
by labname;
run;quit;
这将创建至少三个实验室,只有几个星期的点数。我想绘制一年中的所有52周,包括计数为零的周。
您需要一个可以从无到有创建事物的过程。 Summary / MEans中的COMPLETETYPES选项将执行此操作。
data testlabs;
input labdate:datetime22.3 labname$;
lbdate = datepart(labdate);
format lbdate weeku6.;
cards;
08JAN2019:09:40:37.000 A
07AUG2019:09:36:16.000 A
08AUG2019:13:16:51.000 B
21APR2019:09:33:54.000 B
22APR2016:12:47:51.000 B
08JUN2019:09:25:50.000 B
09JAN2019:13:48:24.000 A
10JAN2019:12:21:02.000 C
19FEB2019:14:40:39.000 C
09MAR2019:09:38:48.000 C
20NOV2019:09:50:30.000 A
07AUG2019:14:03:55.000 A
09MAR2019:09:31:39.000 B
09JUN2019:12:11:29.000 B
04APR2019:17:00:00.000 B
26NOV2019:13:05:28.000 C
09JUN2019:09:38:50.000 C
06MAY2019:12:44:20.000 C
08MAY2019:10:14:52.000 A
08JUN2019:08:43:17.000 A
02DEC2019:12:26:51.000 A
05MAY2019:12:53:17.000 B
06SEP2019:09:52:36.000 C
10MAR2019:09:31:41.000 A
08MAR2019:09:40:40.000 C
14JUL2019:09:38:59.000 B
08JAN2019:10:40:37.000 A
;;;;
run;
proc print;
run;
proc summary data=testlabs completetypes nway;
class labname lbdate / mlf;
output out=testlabs2(drop=_type_ rename=(_freq_=lab_count));
run;
proc print;
run;
您将希望通过wk
x labname
组合的交叉联接来加入聚合。该联接将补充组合组合的总覆盖范围,从而强制进行全面覆盖。
示例:
data weeks;
do week = intnx ('week', '01jan2019'd, 0) by 7 while (year(week) <= 2019);
output;
end;
format week weeku6.;
run;
data labs;
do labname = 'A', 'B', 'C', 'D'; output; end;
run;
proc sql;
create table testlabs1 as
select
labs.labname,
year(weeks.week) as year,
weeks.week,
coalesce(aggregate.lab_count,0) as lab_count
from
labs
cross join
weeks
left join
(
select distinct count(*) as lab_count,
labname,
intnx('year', datepart(labdate), 0) as yr format=year4.,
intnx('week', datepart(labdate), 0) as wk format=weeku6.
from testlabs
where year(datepart(labdate))>2018
group by yr, wk, labname
) aggregate
on aggregate.labname = labs.labname
& aggregate.wk = weeks.week
order by
year, labname, week
;
quit;
symbol color=blue interpol=join;
proc gplot data=testlabs1;
plot lab_count*(week);
by year labname;
where year = 2019;
run;quit;