Разработка процедур прогнозирования показателей работы железных дорог

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



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