【发布时间】:2021-09-21 13:36:30
【问题描述】:
大家好
我是 SAS 世界的新手,几天前我接到了这个挑战,想找出这份工作失败的原因。我很快发现错误可能在于定义日期或星期几的方式。如果你看一下吓人的图片,你可以清楚地看到日期不合适。该程序试图找到星期三,它应该找到的日期是星期二。
不幸的是,开发代码的不是我..
希望你们中的一些人能帮助我。
感谢您的宝贵时间
*%let aar = %eval( %sysfunc(year(%sysfunc(today())))-1); *Til brug ved årsskifte;
%let maaned_start= %eval( %sysfunc(month(%sysfunc(today())))-1);
%let maaned_slut= %eval( %sysfunc(month(%sysfunc(today())))-1);
%let sidste_maaned= %eval( %sysfunc(month(%sysfunc(today())))-2);
%put &=aar;
%put &=maaned_start;
%put &=maaned_slut;
%put &=sidste_maaned;
libname Trafik "\\sascortst01\SAS_dw\YouSee\Trafikdata";
data Trafik;
input OLT_name $20. macaddress $14. Date1 $10. down_mbit up_mbit;
date=input(date1,ddmmyy10.);
format date ddmmyy10.;
datalines;
IdasOltprøveaaaaaaa aaaa-aaaa-aaaa 01/01/01 9999999 9999999
;
run;
data trafik (drop = date1);
retain OLT_name macaddress Date down_mbit up_mbit;
set trafik;
run;
%macro trafik (trafik);
%let aar = %eval( %sysfunc(year(%sysfunc(today()))));
%let maaned_start= %eval( %sysfunc(month(%sysfunc(today())))-1);
%let maaned_slut= %eval( %sysfunc(month(%sysfunc(today())))-1);
%if &maaned_start. <= 9 %then %do;
%do m=&maaned_start. %to &maaned_slut.;
%do d=1 %to 9;
proc sql;
create table Trafik_mac_&aar.0&m.0&d._&trafik.
as select distinct a.cmts_name as OLT_name, a.macaddress, b.lid, datepart(a.start_rec_creation_time) format ddmmyy10. as Date, round(sum(a.down_qos_service_octets_passed)*8/1000000,0.001) as down_mbit,
round(sum(a.up_qos_service_octets_passed)*8/1000000,0.001) as up_mbit
from trafik.Trafik_mac_&aar.0&m.0&d._&trafik. a left join trafik.Macaddress_info_&aar.0&m.0&d._&trafik. b on a.macaddress=b.macaddress
group by a.cmts_name, a.macaddress, datepart(a.start_rec_creation_time) order by a.cmts_name, a.macaddress, datepart(a.start_rec_creation_time) desc;
quit;
proc sort data=Trafik_mac_&aar.0&m.0&d._&trafik. nodupkey; by OLT_name macaddress; run;
data trafik;
set trafik Trafik_mac_&aar.0&m.0&d._&trafik.;
run;
%end;
%do d=10 %to 31;
proc sql;
create table Trafik_mac_&aar.0&m.&d._&trafik.
as select distinct a.cmts_name as OLT_name, a.macaddress, b.lid, datepart(a.start_rec_creation_time) format ddmmyy10. as Date, round(sum(a.down_qos_service_octets_passed)*8/1000000,0.001) as down_mbit,
round(sum(a.up_qos_service_octets_passed)*8/1000000,0.001) as up_mbit
from trafik.Trafik_mac_&aar.0&m.&d._&trafik. a left join trafik.Macaddress_info_&aar.0&m.&d._&trafik. b on a.macaddress=b.macaddress
group by a.cmts_name, a.macaddress, datepart(a.start_rec_creation_time) order by a.cmts_name, a.macaddress, datepart(a.start_rec_creation_time) desc;
quit;
proc sort data=Trafik_mac_&aar.0&m.&d._&trafik. nodupkey; by OLT_name macaddress; run;
data trafik;
set trafik Trafik_mac_&aar.0&m.&d._&trafik.;
run;
%end;
%end;
%end;
%if &maaned_slut. >= 10 %then %do;
%do m=&maaned_start. %to &maaned_slut.;
%do d=1 %to 9;
proc sql;
create table Trafik_mac_&aar.&m.0&d._&trafik.
as select distinct a.cmts_name as OLT_name, a.macaddress, b.lid, datepart(a.start_rec_creation_time) format ddmmyy10. as Date, round(sum(a.down_qos_service_octets_passed)*8/1000000,0.001) as down_mbit,
round(sum(a.up_qos_service_octets_passed)*8/1000000,0.001) as up_mbit
from trafik.Trafik_mac_&aar.&m.0&d._&trafik. a left join trafik.Macaddress_info_&aar.&m.0&d._&trafik. b on a.macaddress=b.macaddress
group by a.cmts_name, a.macaddress, datepart(a.start_rec_creation_time) order by a.cmts_name, a.macaddress, datepart(a.start_rec_creation_time) desc;
quit;
proc sort data=Trafik_mac_&aar.&m.0&d._&trafik. nodupkey; by OLT_name macaddress; run;
data trafik;
set trafik Trafik_mac_&aar.&m.0&d._&trafik.;
run;
%end;
%do d=10 %to 31;
proc sql;
create table Trafik_mac_&aar.&m.&d._&trafik.
as select distinct a.cmts_name as OLT_name, a.macaddress, b.lid, datepart(a.start_rec_creation_time) format ddmmyy10. as Date, round(sum(a.down_qos_service_octets_passed)*8/1000000,0.001) as down_mbit,
round(sum(a.up_qos_service_octets_passed)*8/1000000,0.001) as up_mbit
from trafik.Trafik_mac_&aar.&m.&d._&trafik. a left join trafik.Macaddress_info_&aar.&m.&d._&trafik. b on a.macaddress=b.macaddress
group by a.cmts_name, a.macaddress, datepart(a.start_rec_creation_time) order by a.cmts_name, a.macaddress, datepart(a.start_rec_creation_time) desc;
quit;
proc sort data=Trafik_mac_&aar.&m.&d._&trafik. nodupkey; by OLT_name macaddress; run;
data trafik;
set trafik Trafik_mac_&aar.&m.&d._&trafik.;
run;
%end;
%end;
%end;
%mend trafik;
%trafik(MON);
%trafik(TUE);
%trafik(WED);
%trafik(THU);
%trafik(FRI);
%trafik(SAT);
%trafik(SUN);
data trafik (drop = month);
set trafik;
if OLT_name = "IdasOltpr%" then delete;
if macaddress = "aaaa-aaaa-aaaa" then delete;
Mont=month(date);
Year=year(date);
run;
【问题讨论】:
标签: sas