Разработка процедур прогнозирования показателей работы железных дорог
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
work nolist; Forfmt;
run;
/*Применить его к таблице*/
data sp.var_izmerit;sp.var_izmerit;var_id attr.;;sp.var_stat;sp.var_stat;var_id attr.;;
%mend create_my_format;
%create_my_format;;_nazv_stat.text=нужно выбрать номер статьи;_stat.items=spisok_stat._getspisok(sp.var_stat,var_id);char a;char nazv_stat;;/*INIT*/_stat:=spisok_stat.selectedItem;выбрано a;continue;
%global st_id;_null_;sp.var_stat;=&a;stati eq a1 then call symput(st_id,var_id);;
%put id статьи &st_id;get_izmerit;sp.var_stat;
%global n_st;
%global id_izm;var_id eq symget(st_id) then do;_id_izm=put(var_id_izm,7.);symput(id_izm, new_id_izm);symput(n_st,name);;;
%put название статьи &nazv_stat;
endsubmit;_nazv_stat.text=symget(n_st);_izmerit.items=spisok_izmerit._getspisok(get_izmerit,new_id_izm);continue;datasets library = work nolist;get_izmerit;;;_zapusk.enabled=yes;;_zapusk:
/**/_zapusk.enabled=no;_mes.visible=yes;_mes.text=Процедура прогноза запущена;
submit continue;
/*Получить набор с данными по статье DATE FACT_STAT*/
%global time;
/*получить данные по расходам МЖД из ПЭП*/
0;">%let time=%sysfunc(DATETIME());_null_;=minute(&time);=SECOND(&time);//////********ВРЕМЯ** ******///////; min= min sec= sec;;;_mes.text=Получаю данные по расходам;continue;fact_stat(keep= DATE fact);data.base;VAR_ID eq symget(st_id) and DOR_ID eq 003 and year(date) gt 1997 and month(date) eq 12 and fact <>0;
run;
/*Выделить зависящие расходы*/
data _null_;
set sp.Var_stat;
%global zav_dolya;VAR_ID eq symget(st_id) then call symput(zav_dolya,p4);;fact_stat;fact_stat;= fact*symget(zav_dolya);;
%let time=%sysfunc(DATETIME());_null_;=minute(&time);=SECOND(&time);//////********ВРЕМЯ** ******///////; min= min sec= sec;;;_mes.text=Получаю данные по факторам;continue;
/*Получить набор с данными по факторам DATE fact var_id operiod dor_id*/
%let time=%sysfunc(DATETIME());_null_;=minute(&time);=SECOND(&time);
put //////********ВРЕМЯ*старт факт*******///////;
0;;datasetslibrary=worknolist;get_fact;;">put min= min sec= sec;;sql;table get_fact as* from data.base where_id invar_id from sp.Var_factoru;;fact_fact(keep= DATE fact var_id operiod dor_id);get_fact;DOR_ID eq 003 and operiod eq Q and year(date) gt 1997 and fact <>0;;datasets library = work nolist;get_fact;;
%let time=%sysfunc(DATETIME());_null_;=minute(&time);=SECOND(&time);//////********************ВРЕМЯ* *******///////;********************min= min sec= sec;;;_mes.text=Рассчитываю измерители;
/*Рассчитать измерители*/continue;
%let time=%sysfunc(DATETIME());_null_;=minute(&time);=SECOND(&time);//////********ВРЕМЯ** ******///////; min= min sec= sec;;;display(dip.proba.run.scl);continue;
%let time=%sysfunc(DATETIME());_null_;=minute(&time);=SECOND(&time);//////********ВРЕМЯ** ******///////;min= min sec= sec;;datasets library = work nolist; fact_fact;;
/*Получить набор для расчета*/
/*date rasxod izmerit*/;_mes.text=Получаю набор для расчета;continue;raschit_izmerit;Izmer_znach(keep = var_id date fact);var_id eq symget(id_izm) and month(date) eq 12 ;;
%global pr_izmerit;pr_izmerit;Izmer_znach(keep = var_id date fact);var_id eq symget(id_izm) and month(date) eq 9 and year(date) eq 2002do;symput (pr_izmerit,fact);;;;sort data= fact_stat;date;run;sort data= raschit_izmerit;date;run;nabor_proc_raschet;fact_stat(rename = (fact=rasxod))_izmerit(drop=var_id rename = (fact=izmerit ));date;;datasets library = work nolist;fact_stat;raschit_izmerit;
run;
/*Запустить прцедуру прогноза*/
/*Создать макросы*/
%let time=%sysfunc(DATETIME());_null_;=minute(&time);=SECOND(&time);//////********ВРЕМЯ********///////;min= min sec= sec;;
%macro del_tables;sql;table sr_beta.d;table sr_beta.delta;table prognoz;table itog_delta_1t;table sr_beta.ani;table sr_beta.vse_delta;table sr_beta.itog_k_tochek;;
%mend del_tables;
%macro cr_nabor(f,o);sr_beta.d;sr_beta.data_vse(firstobs=&f obs=&o);;
%mend cr_nabor;
/*расчитывает delta*/
%macro raschet_delta(nabor_in,nomer_str,nabor_ras,k_t);
%let zn_izmerit=0;
%let zn_ras_fact=0;
%let s_koef=0;
%let k_sl_koef=0;sql;sum(koef) into:s_koef from &nabor_in;/*сумма коеффициентов*/count(*) into:k_sl_koef from &nabor_in;/*кол-во слагаемых*/;
%let sred_beta=&s_koef/&k_sl_koef;/*средняя beta*/_null_;sr_beta.data_vse(firstobs=&nomer_str obs=&nomer_str);symput(zn_izmerit,izmerit);/*значение измерителя*/symput(zn_ras_fact,rasxod);/*значение расходов*/
run;
/*расчитывает и сохраняет delta*/
data prognoz;=&sred_beta*&zn_izmerit;_toc=&k_t;=&sred_beta;=&zn_ras_fact;progn;=abs(fact-progn);;append=&nabor_ras=prognoz;;
%mend raschet_delta;
%macro raschet_prog_sred;
/*узнать число измерений*/
proc sql;
select count(*) into :kol_vo_izm from sr_beta.data_vse;;
%let kol_vo_tochek=&kol_vo_izm;
%put kol_vo_tochek=&kol_vo_tochek;sr_beta.data_vse;sr_beta.data_vse;=rasxod/izmerit;;
%let i=1;%let j=1;%let last_point=1;%let last_str=1;
%let str_raschet=1;%let s_del=0;%let s_k_slagaem=0;
%do i=2 %to &kol_vo_tochek;/*число точек*/
%let ob=%eval(&i);
%let last_point=%eval(&kol_vo_tochek-&i);
%do j=1 %to &last_point;/*с какой строки*/
%let f_o=%eval(&j);
%let last_str =%eval(&f_o+&ob-1);/*последняя строка в набор*/
%cr_nabor(&f_o,&last_str);
%let str_raschet=%eval(&f_o+&ob);
%raschet_delta(sr_beta.d,&str_raschet,sr_beta.delta,&i);
%end;sql;sum(delta) into :s_del from sr_beta.delta;/*сумма квадратов*/count(*) into :s_k_slagaem from sr_beta.delta;/*кол-во слагаемых*/;itog_delta_1t;
kol_vo_tochek=&i;/*кол-во точек при расчете*/
delta=&s_del/&s_k_slagaem;/*средняя ощибка*/;append=sr_beta.vse_delta=itog_delta_1t;;
%end;
%vubor_k_tochek;
%let itog_k_tochek=0;_null_;sr_beta.itog_k_tochek(firstobs=1 obs=1);symput(itog_k_tochek,kol_vo_tochek);;
%put &itog_k_tochek;
/*Присвоить значение измерителю*/
%ras_pr_zn_st(&itog_k_tochek);
%*del_tables;
%mend raschet_prog_sred;
%macro vubor_k_tochek;/*выбрать kol_vo_tochek*/sr_beta.ani;sr_beta.vse_delta;
delta=int(delta);/* целые значения*/
run;
%let min_delta=0;sql;min(delta) into :min_delta from sr_beta.ani;;sr_beta.itog_k_tochek(keep = kol_vo_tochek);sr_beta.ani;delta eq &min_delta;;
%mend vubor_k_tochek;
%macro ras_pr_zn_st(k_tochek);
%let first_t=%eval(&kol_vo_izm-&k_tochek+1);
%cr_nabor(&first_t,&kol_vo_izm);
%let s_koef=0;
%let k_sl_koef=0;sql;sum(koef) into:s_koef from sr_beta.d;/*сумма коеффициентов*/count(*) into:k_sl_koef from sr_beta.d;/*кол-во слагаемых*/;
%let sred_beta=&s_koef/&k_sl_koef;/*средняя beta*/sr_beta.prog_st;=&sred_beta*symget(pr_izmerit);=symget(pr_izmerit);;
%mend ras_pr_zn_st;
/*назначить биб-ку sr_beta*/
libname sr_beta C:\diplom\dip_data\prognoz_2405\sred_beta\430;
/*входной набор sr_beta.data_vse*/
data sr_beta.data_vse;Nabor_proc_raschet;;
%global kol_vo_izm;
/*РАСЧЕТ*/;_mes.text=Рассчитываю прогноз;continue;
%raschet_prog_sred;
/*выходной набор sr_beta.prog_st*/
l_tables;
%let time=%sysfunc(DATETIME());_null_;=minute(&time);=SECOND(&time);//////********ВРЕМЯ********///////;min= min sec= sec;;;
/*ВЫВЕСТИ РЕЗУЛЬТАТ*/display(inter_result.frame);
_STATUS_=H;;_exit:continue;datasets library = work nolist;
* delete Izmer_znach;Nabor_proc_raschet;Pr_izmerit;;datasets library = sr_beta nolist;Data_vse;Prog_st;;;
_STATUS_=H;;
INTER_RESULT.SCL
init:_result.table=nabor_proc_raschet;_progn.table=sr_beta.prog_st;;_next_proc:_result.table=;_pr