Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ods _all_ close;
- dm 'log;clear;output;clear';
- /***Lokalizacja projektu***/
- %let dir = C:\Users\SAS\Desktop\projekt_sgh_krzys\;
- /**Tworzenie bibliotek**/
- libname wyj "&dir.\Tree" compress=yes;
- libname dane "&dir.Dane\" compress=yes;
- libname daneplot "&dir.Wynik\dane_do_wykresow";
- libname wykres "&dir.wykres\";
- libname wykreskw "&dir.wykresy-kwotowe\";
- /*****************************************************************************************************************/
- /****--- Tworzenie VIN1, VIN2, VIN3 po typach produktu(CSS i INS) oraz transpozycja tabel VIN ---****/
- /*****************************************************************************************************************/
- data daneplot.vin;
- set dane.Transactions;
- seniority=intck('month',input(fin_period,yymmn6.),input(period,yymmn6.));
- vin1=(due_installments>=1);
- vin2=(due_installments>=2);
- vin3=(due_installments>=3);
- output;
- if status in ('B','C') and period<='200812' then do;
- n_steps=intck('month',input(period,yymmn6.),input('200812',yymmn6.));
- do i=1 to n_steps;
- period=put(intnx('month',input(period,yymmn6.),1,'end'),yymmn6.);
- seniority=intck('month',input(fin_period,yymmn6.),input(period,yymmn6.));
- output;
- end;
- end;
- keep aid fin_period vin1 vin2 vin3 product seniority aid cid;
- run;
- %macro pojedyncze_vin(product);
- %do i=1 %to 3; /* dla vin1, vin2, vin3 */
- /* PROC MEANS wyciaga brakujace wartości do analityki przed ich liczeniem. nway ogranicza output statystyki do tych z najwyższym _TYPE_ wartością*/
- proc means data=daneplot.vin noprint nway;
- /* wybieramy zmienne do grupowania w modelach klasyfikacyjncyh poziomach */
- class fin_period seniority;
- var vin&i;
- output out=vintagr&product&i(drop=_freq_ _type_) n()=production mean()=vintage&product&i;
- format vintage&product&i nlpct12.2;
- run;
- proc transpose data=vintagr&product&i out=vintage&product&i (drop=_name_) prefix=months_after_;
- by fin_period production;
- var vintage&product&i;
- id seniority;
- run;
- proc sort data=vintagr&product&i out=daneplot.vint_&product._vin&i;
- by seniority;
- run;
- proc transpose data=daneplot.vint_&product._vin&i out=daneplot.vinttrans_&product._vin&i (drop=_name_) prefix=m;
- id fin_period;
- by seniority;
- var vintage&product&i;
- where seniority>=&i;
- run;
- %end;
- %mend;
- %pojedyncze_vin(product = ins);
- %pojedyncze_vin(product = css);
- /*
- Powyzszy kod tworzy tabele z wartosciami VIN1, VIN2, VIN3 dla poszczegolnych typow produktu (CSS,INS).
- Nastepnie nastepuje transpozycja tabeli SENIORITY jako wiersz | CREATION_MONTH jako wiersz
- */
- /******************* Stworzenie wlasciwego zbioru do analiz: "dane.production_vin_sen&seniority." ********************/
- /* zawiera dane z production + policzony vin1, vin2, vin3 oraz kwotowy vin1, vin2, vin3 */
- /* Bierzemy do zbioru (seniority = X ) "vinX" tylko losowo wybrane 40% danych */
- %macro uczenie(seniority=);
- data vin_sen&seniority.;
- set Daneplot.vin;
- where seniority=&seniority. and ranuni(1)<0.4 ;
- run;
- /* Sortujemy zbior po numerze ID konta */
- proc sort data= vin_sen&seniority. nodupkey;
- by aid;
- run;
- /* tworzymy posortowana wg ID tabele 'prod', ktora zawiera ID wraz ze zmiennymi kategoryzowanymi */
- proc sort data=Dane.production nodupkey;
- by aid;
- run;
- /* W wyjsciowym zbiorze do analiz laczymy informacje o vintage uzyskana z tabeli 'transactions' z informacjami o klientach z tabeli 'production' */
- data Dane.production_vin_sen&seniority. ;
- merge vin_sen&seniority. (in = z) Dane.production ;
- by aid;
- if z;
- run;
- /* dodajemy vin kwotowy */
- data Dane.production_vin_sen&seniority.;
- set Dane.production_vin_sen&seniority.;
- vin1_kwotowy =vin1*app_loan_amount;
- vin2_kwotowy =vin2*app_loan_amount;
- vin3_kwotowy =vin3*app_loan_amount;
- run;
- %mend;
- %uczenie(seniority=12);
- %macro kategoryzuj (vintage=, seniority=, product_typ=, level=);
- /* utworzenie nowego zbioru - dane.Production_&VINTAGE._&product_typ._sen&seniority. - tylko obserwacje z niepustymi vin1 vin2 vin3, dla danego produktu */
- %if &level ne %str() %then %do;
- %let cond=&vintage ne . and upcase(product)="&product_typ";
- %end;
- %else %do;
- %let cond=&vintage ne .;
- %end;
- data Dane.Production_&VINTAGE._&product_typ._sen&seniority.;
- set Dane.production_vin_sen&seniority.;
- where &cond;
- run;
- /* Warunki wstepne dla kategoryzacji metoda drzewa decyzyjnego */
- %let max_il_podz=2; *maksymalna liczba podzialow;
- %let min_percent=3; *minimalna liczba obs w lisciu;
- %let zb= Dane.Production_&VINTAGE._&product_typ._sen&seniority.; *zbior wejsciowy;
- %let tar=&vintage; *zmienna celu - po niej kategoryzacja;
- /*************** Kategoryzacja zmiennych numerycznych **************/
- /* Selekcjonujemy do makrozmiennej &zmienne_int_ord wszystkie numeryczne za wyjatkiem vin */
- proc sql noprint;
- select distinct (upcase(name))into :zmienne_int_ord separated by ' '
- from dictionary.columns
- where libname = 'DANE' and memname = "PRODUCTION_&VINTAGE._&PRODUCT_TYP._SEN&SENIORITY." and type = 'num'
- and name not in ('seniority', 'vin1', 'vin2', 'vin3', 'vin1_kwotowy', 'vin2_kwotowy', 'vin3_kwotowy' );
- quit;
- %let il_zm = &sqlobs.; * ile zmiennych zgromadzilismy;
- /* Sprawdzić WTF */
- %put ***il_zm***&zmienne_int_ord;
- /* Odpalenie kodu napisanego przez dra Przanowskiego kategoryzujacy zmienne - z kazda makropetla dla danego vin, produktu, ew. seniority */
- %include "&dir.Tree\tree.sas" / source2;
- /*************** Zaladowanie zmiennych nominalnych **************/
- /* Selekcjonujemy do makrozmiennej &zmienne_int_ord wszystkie numeryczne za wyjatkiem vin */
- proc sql noprint;
- select name into :zm_do_sklejenia separated by ' '
- from dictionary.columns
- where libname = 'DANE' and memname = "PRODUCTION_&VINTAGE._&PRODUCT_TYP._SEN&SENIORITY." and type = 'char'
- and name not in('cid','aid', 'product', 'period', 'fin_period');
- quit;
- %let il_zm=&sqlobs; * ile zmiennych zgromadzilismy;
- %put ***&il_zm***&zm_do_sklejenia;
- *7;
- *APP_CHAR_BRANCH APP_CHAR_CARS APP_CHAR_CITY APP_CHAR_GENDER APP_CHAR_HOME_STATUS APP_CHAR_JOB_CODE APP_CHAR_MARITAL_STATUS;
- /* Odpalenie kodu napisanego przez dra Przanowskiego sklejajacego zmienne jakosciowe - z kazda makropetla dla danego vin, produktu, ew. seniority */
- %include "&dir.sklejanie_jakosciowych.sas" / source2;
- /* Wywolane pliki z kodami kreuja nam tabele z warunkami na kategorie zmiennych: podzialy_int_niem i podzialny_int_niem_sklejane w bibliotece T*/
- /* Odpalenie kodu napisanego przez dra Przanowskiego - "kodowanie" */
- %let inset = t.podzialy_int_niem;
- %let jakie_podzialy_nominalne = t.podzialy_nom_sklejane;
- %let porz_tar = descending;
- %include "&dir.kodowanie.sas" / source2;
- * /wyj/ PODZIALY_INT_NIEM, PODZIALY_INTERWALOWE - pokazuja, jak kazda zmienna interwalowa zostala podzielona na (max) 3 kategorie;
- * /wyj/ PODZIALY_NOM_SKLEJANE, PODZIALY NOMINALNE - pokazuja, jak kazda zmienna nominalna jest podzielona
- * /wyj/ PODZIALY - wszystkie zmienne podzielone na kategorie w jednej tabeli
- * /dane/ PRODUCTION_VIN1_ALL_SEN12_GRP - dla tabeli zlaczonych vin i transakcji (production_vin_sen&seniority) dla danego produktu dolacza zmienne
- informujace, do ktorej z grup w danej kategorii dana obserwacja wpada (np. 2 w zmiennej Cars, czyli tu GrpCars oznacza posiadanie auta);
- %mend;
- %kategoryzuj(vintage=VIN1, seniority = 12, product_typ=ALL,level=);
- %kategoryzuj(vintage=VIN2, seniority = 12, product_typ=ALL,level=);
- %kategoryzuj(vintage=VIN3, seniority = 12, product_typ=ALL,level=);
- /**/
- %kategoryzuj(vintage=VIN1, seniority = 12, product_typ=CSS,level=Y);
- %kategoryzuj(vintage=VIN1, seniority = 12, product_typ=INS,level=Y);
- /**/
- %kategoryzuj(vintage=VIN2, seniority = 12, product_typ=CSS,level=Y);
- %kategoryzuj(vintage=VIN2, seniority = 12, product_typ=INS,level=Y);
- %kategoryzuj(vintage=VIN3, seniority = 12, product_typ=CSS,level=Y);
- %kategoryzuj(vintage=VIN3, seniority = 12, product_typ=INS, level=Y);
- %macro m_variable(vintage=, seniority=, product_typ=, level=);
- /**************** Korelacja Spearmana ****************************************/
- proc corr data=Dane.Production_&VINTAGE._&product_typ._sen&seniority._grp outs=Dane.corr_&VINTAGE._&product_typ._sen&seniority. noprint;
- with &VINTAGE;
- var GRP:;
- run;
- /* Transpozycja, zostawiamy tylko wartosc corr */
- proc transpose data=Dane.corr_&VINTAGE._&product_typ._sen&seniority. out=Dane.corr_&VINTAGE._&product_typ._sen&seniority._t;
- run;
- /* Zostawiamy wartosc bezwzgledna z corr */
- data Dane.corr_&VINTAGE._&product_typ._sen&seniority._t;
- set Dane.corr_&VINTAGE._&product_typ._sen&seniority._t;
- abs_corr_&VINTAGE = abs(&VINTAGE);
- rename &VINTAGE = corr_&VINTAGE;
- run;
- /* I sortujemy wg absolute [corr] */
- proc sort data=Dane.corr_&VINTAGE._&product_typ._sen&seniority._t;
- by descending abs_corr_&VINTAGE;
- run;
- /* Dzielimy nasza tabele na 4 kategorie zmiennych */
- data Dane.corr_&VINTAGE._&product_typ._sen&seniority._app Dane.corr_&VINTAGE._&product_typ._sen&seniority._act Dane.corr_&VINTAGE._&product_typ._sen&seniority._agr
- Dane.corr_&VINTAGE._&product_typ._sen&seniority._ags;
- set Dane.corr_&VINTAGE._&product_typ._sen&seniority._t;
- if substr(_NAME_,5,3)="ACT" then output Dane.corr_&VINTAGE._&product_typ._sen&seniority._act;
- if substr(_NAME_,5,3)="AGR" then output Dane.corr_&VINTAGE._&product_typ._sen&seniority._agr;
- if substr(_NAME_,5,3)="AGS" then output Dane.corr_&VINTAGE._&product_typ._sen&seniority._ags;
- if substr(_NAME_,5,3)="APP" then output Dane.corr_&VINTAGE._&product_typ._sen&seniority._app;
- run;
- /* Tworzymy tabele zawierajaca po 5 najlepiej korelujacych zmiennych z kazdej kategorii i nazywamy ja np. corr_vin1_ins_sen12_best */
- data Dane.corr_&VINTAGE._&product_typ._sen&seniority._best;
- set Dane.corr_&VINTAGE._&product_typ._sen&seniority._app (firstobs=1 obs=5)
- Dane.corr_&VINTAGE._&product_typ._sen&seniority._act (firstobs=1 obs=5)
- Dane.corr_&VINTAGE._&product_typ._sen&seniority._agr (firstobs=1 obs=5)
- Dane.corr_&VINTAGE._&product_typ._sen&seniority._ags (firstobs=1 obs=5);
- run;
- /* Zbieramy do makrozmiennej liste po 5 najlepszych zmiennych z kategorii */
- proc sql noprint;
- select distinct(_name_) into : list_corr separated by ' '
- from Dane.corr_&VINTAGE._&product_typ._sen&seniority._best;
- quit;
- %put &list_corr;
- /* powstaje tabela, w ktorej sa dani klienci, viny i przygrupowanie tylko do wybranych juz kategorii */
- data Dane.Prod_&VINTAGE._&product_typ._sen&seniority._grp_best_cor;
- set Dane.Production_&VINTAGE._&product_typ._sen&seniority._grp;
- keep aid cid app_installment product period &vintage &vintage._kwotowy app_loan_amount &list_corr;
- run;
- proc sort data = Dane.Prod_&VINTAGE._&product_typ._sen&seniority._grp_best_cor nodupkey;
- by aid cid app_installment product period &vintage &list_corr;
- run;
- %mend;
- %m_variable(vintage=VIN1, seniority = 12, product_typ=ALL,level=);
- %m_variable(vintage=VIN2, seniority = 12, product_typ=ALL,level=);
- %m_variable(vintage=VIN3, seniority = 12, product_typ=ALL,level=);
- %m_variable(vintage=VIN1, seniority = 12, product_typ=CSS,level=Y);
- %m_variable(vintage=VIN1, seniority = 12, product_typ=INS,level=Y);
- %m_variable(vintage=VIN2, seniority = 12, product_typ=CSS,level=Y);
- %m_variable(vintage=VIN2, seniority = 12, product_typ=INS,level=Y);
- %m_variable(vintage=VIN3, seniority = 12, product_typ=CSS,level=Y);
- %m_variable(vintage=VIN3, seniority = 12, product_typ=INS, level=Y);
- %macro macierz(product);
- ods listing close;
- ods pdf file="&dir.raporty\vin_&product..pdf";
- %do i=1 %to 3;
- title "&PRODUCT: Vintage dla due= &i";
- proc print data=daneplot.vinttrans_&product._vin&i;
- options orientation= portrait;
- run;
- %end;
- ods pdf close;
- ods listing;
- %mend;
- %macierz(css);
- %macierz(ins);
- %macro corr (vintage=, product=, seniority=);
- /* PDF dla korelacji Spearmana */
- ods listing close;
- ods pdf file="&dir.raporty\corr_&vintage._&product._sen&seniority..pdf";
- title "Seniority=&seniority., &product.: Bezwzgledna wartosc korelacji dla zmiennych
- oraz &vintage. Grupa APP";
- proc print data= Dane.corr_&VINTAGE._&product._sen&seniority._app;
- var _NAME_ abs_corr_&vintage.;
- run;
- title "Zmienne z grupy ACT i &vintage.";
- proc print data= Dane.corr_&VINTAGE._&product._sen&seniority._act;
- var _NAME_ abs_corr_&vintage.;
- run;
- title "Zmienne z grupy AGR i &vintage.";
- proc print data= Dane.corr_&VINTAGE._&product._sen&seniority._agr;
- var _NAME_ abs_corr_&vintage.;
- run;
- title "Zmienne z grupy AGS i &vintage.";
- proc print data= Dane.corr_&VINTAGE._&product._sen&seniority._agS;
- var _NAME_ abs_corr_&vintage.;
- run;
- title "Wybrane 5 najlepszych zmiennych z 4 kategorii";
- proc print data= Dane.corr_&vintage._&product._sen&seniority._best;
- var _NAME_ abs_corr_&vintage.;
- run;
- ods pdf close;
- ods listing;
- %mend;
- %corr(vintage = vin1, product = all, seniority = 12);
- %corr(vintage = vin2, product = all, seniority = 12);
- %corr(vintage = vin3, product = all, seniority = 12);
- %corr(vintage = vin1, product = ins, seniority = 12);
- %corr(vintage = vin1, product = css, seniority = 12);
- %corr(vintage = vin2, product = ins, seniority = 12);
- %corr(vintage = vin2, product = css, seniority = 12);
- %corr(vintage = vin3, product = ins, seniority = 12);
- %corr(vintage = vin3, product = css, seniority = 12);
- %macro asymptota(vin=, product=);
- %if &vin=vin1 %then %do;
- proc transpose
- data= Daneplot.vinttrans_&product._&vin
- out= Daneplot.asymptoty&vin.&product.(rename=(Col1= vin1))
- name= Miesiac;
- by seniority;
- var M200601 M200602 M200603 M200604 M200605 M200606 M200607 M200608 M200609 M200610 M200611 M200612 M200701 M200702 M200703 M200704
- M200705 M200706 M200707 M200708 M200709 M200710 M200711 M200712 M200801 M200802 M200803 M200804 M200805 M200806 M200807 M200808
- M200809 M200810 M200811;
- run;
- %end;
- %if &vin=vin2 %then %do;
- proc transpose
- data= Daneplot.vinttrans_&product._&vin
- out= Daneplot.asymptoty&vin.&product.(rename=(Col1= vin2))
- name= Miesiac;
- by seniority;
- var M200601 M200602 M200603 M200604 M200605 M200606 M200607 M200608 M200609 M200610 M200611 M200612 M200701 M200702 M200703 M200704
- M200705 M200706 M200707 M200708 M200709 M200710 M200711 M200712 M200801 M200802 M200803 M200804 M200805 M200806 M200807 M200808
- M200809 M200810;
- run;
- %end;
- %if &vin=vin3 %then %do;
- proc transpose
- data= Daneplot.vinttrans_&product._&vin
- out= Daneplot.asymptoty&vin.&product.(rename=(Col1= vin3))
- name= Miesiac;
- by seniority;
- var M200601 M200602 M200603 M200604 M200605 M200606 M200607 M200608 M200609 M200610 M200611 M200612 M200701 M200702 M200703 M200704
- M200705 M200706 M200707 M200708 M200709 M200710 M200711 M200712 M200801 M200802 M200803 M200804 M200805 M200806 M200807 M200808
- M200809;
- run;
- %end;
- %mend;
- %asymptota(vin=vin1, product=css);
- %asymptota(vin=vin2, product=css);
- %asymptota(vin=vin3, product=css);
- %asymptota(vin=vin1, product=ins);
- %asymptota(vin=vin2, product=ins);
- %asymptota(vin=vin3, product=ins);
- %macro wykres_1(product=);
- ods listing close;
- ods pdf file="&dir.raporty\wykresy_asymptotyczne_&product..pdf";
- %do i=1 %to 3;
- proc sgplot data= Daneplot.asymptotyvin&i.&product.;
- title "vin&i, Produkt = &product ";
- series x= seniority y= vin&i / group=Miesiac;
- yaxis label="Wartosc statystyki vin&i." ;
- xaxis grid values= (0 to 35 by 1);
- run;
- %end;
- ods pdf close;
- ods listing;
- %mend;
- %wykres_1(product=css);
- %wykres_1(product=ins);
- dm 'clear log';
- /*przypisanie najlepszych zmiennych i podzial na grupy*/
- %macro create_graph(level=, vintage=, seniority=, product_typ=, typ=);
- %let cond=%str(upcase(product)="&product_typ");
- proc sql noprint;
- select distinct(name) into :var1-:var20
- from dictionary.columns
- where libname='DANE' and memname="PROD_&VINTAGE._&PRODUCT_TYP._SEN&SENIORITY._GRP_BEST_COR" and name like 'GRP%';
- %do i = 1 %to 20;
- %put ***&&var&i***;
- %end;
- %do i=1 %to 20;
- %global max&i &&var&i;
- select max(&&var&i) into : max&i
- from DANE.PROD_&VINTAGE._&PRODUCT_TYP._SEN&SENIORITY._GRP_BEST_cor;
- %put *** &&max&i ***;
- %end;
- quit;
- /* Analiza VIN dla danego produktu, dla danego seniority, dla danej zmiennej */
- %if &level = 2 %then %do;
- %let cond=%str(upcase(product)="&product_typ");
- %do j=1 %to 20;
- %do k=1 %to &&max&j;
- proc means data=dane.prod_&VINTAGE._&product_typ._sen&seniority._grp_best_cor noprint nway;
- class period;
- var &vintage;
- output out=wykres_&level._&VINTAGE._&product_typ._sen&seniority._v&j._&k(drop=_freq_ _type_)
- n()=production
- mean()=pct;
- Where &cond and &&var&j=&k;
- run;
- data wykres.wykres_&level._&VINTAGE._&product_typ._sen&seniority._v&j._&k;
- length zm_kat $100;
- set wykres_&level._&VINTAGE._&product_typ._sen&seniority._v&j._&k;
- format pct nlpct12.2;
- date_=input(period,yymmn6.);
- format date_ yymon7. ;
- zm_kat="&&var&j=&k";
- run;
- /* Zastaw danych do vin kwotowy analizy*/
- proc sql;
- create table wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority._v&j._&k as
- select period, sum(&VINTAGE._kwotowy) as zadluzone, sum(app_loan_amount) as total
- from dane.prod_&VINTAGE._&product_typ._sen&seniority._grp_best_cor where &cond and &&var&j=&k
- group by period;
- quit;
- data wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority._v&j._&k;
- set wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority._v&j._&k;
- pct=zadluzone/total;
- format pct nlpct12.2;
- zm_kat="&&var&j=&k";
- date_=input(period,yymmn6.);
- format date_ yymon7. ;
- run;
- %end;
- %end;
- %do i=1 %to 20;
- /* Zastaw danych do vin ilosciowy analizy*/
- data wykres.appended_&level._&VINTAGE._&product_typ._sen&seniority._v&i;
- set
- %do k=1 %to &&max&i;
- wykres.wykres_&level._&VINTAGE._&product_typ._sen&seniority._v&i._&k
- %end;
- ;
- run;
- /* Zastaw danych do vin kwotowy analizy - wszystkie kategorie zmiennej razem */
- data wykreskw.appended_&level._&VINTAGE._&product_typ._sen&seniority._v&i;
- set
- %do k=1 %to &&max&i;
- wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority._v&i._&k
- %end;
- ;
- run;
- %let delay = %sysfunc(substr(&Vintage,4,1));
- %let stopien=1;
- /* Raport - vin ilosciowy */
- ods listing close;
- %if &typ='HTML' %then %do;
- ods HTML path="&dir.wykresy_html" gpath="&dir.wykresy_png" body="appended_&level._&VINTAGE._&product_typ._sen&seniority._v&i..html";
- %end;
- %else %if &typ='PDF' %then %do;
- ods pdf file="&dir.wykresy_pdf\appended_&level._&VINTAGE.&product_typ._sen&seniority._v&i..pdf";
- %end;
- /* Wykres vin ilosciowy - wszystkie kategorie zmiennej */
- proc sgplot data=wykres.appended_&level._&VINTAGE._&product_typ._sen&seniority._v&i;
- vbar date_ / response=production group=zm_kat name="production" legendlabel="Liczba udzielonych kredytow" transparency=0.2;
- vline date_ / response=pct break group=zm_kat y2axis name="pct" /*legendlabel="Opoznienie >= &delay [w miesiacach] dla XXX"*/;
- xaxis fitpolicy=rotate tickvalueformat=monname. grid label='Miesiac';
- yaxis display=(nolabel) grid;
- y2axis display=(nolabel) values=(0.00 to 0.70 by 0.1);
- title "&VINTAGE (ilosciowo), Produkt = &product_typ ";
- keylegend "production" "pct";
- run;
- /* Tabela wykres vin ilosciowy - wszystkie kategorie zmiennej */
- proc report data=wykres.appended_&level._&VINTAGE._&product_typ._sen&seniority._v&i;
- column date_ production pct zm_kat;
- define date_ / display width=30 'Okres' center;
- define production / display width=30 'Liczba udzielonych kredytow' center;
- define pct / display width=30 "Opoznienie >= &delay [w miesiacach]" center;
- define zm_kat / display width=50 "Szczegolowa klasa obserwacji" center;
- title;
- footnote;
- compute after _page_ ;
- line @10 "<a href='&dir.wykresy_html\1_&vintage._&product_typ._sen&seniority..html'
- >Wroc do poprzedniego raportu</a>";
- endcomp;
- run;
- %if &typ='HTML' %then %do;
- ods HTML close;
- %end;
- %else %if &typ='PDF' %then %do;
- ods PDF close;
- %end;
- /* Raport - vin kwotowy */
- ods listing close;
- %if &typ='HTML' %then %do;
- ods HTML path="&dir.wykresy_kwot_html" gpath="&dir.wykresy_kwot_png" body="appended_&level._&VINTAGE._kwot_&product_typ._sen&seniority._v&i..html";
- %end;
- %else %if &typ='PDF' %then %do;
- ods pdf file="&dir.wykresy_kwot_pdf\appended_&level._&VINTAGE._kwot_&product_typ._sen&seniority._v&i..pdf";
- %end;
- /* Wykres vin kwotowy - wszystkie kategorie zmiennej */
- proc sgplot data=wykreskw.appended_&level._&VINTAGE._&product_typ._sen&seniority._v&i;
- vbar date_ / response=total group=zm_kat name="production" legendlabel="Suma naleznosci" transparency=0.2;
- vline date_ / response=pct break group=zm_kat y2axis name="pct" /*legendlabel="Opoznienie >= &delay [w miesiacach] dla XXX"*/;
- xaxis fitpolicy=rotate tickvalueformat=monname. grid label='Miesiac';
- yaxis display=(nolabel) grid;
- y2axis display=(nolabel) values=(0.00 to 0.70 by 0.1);
- title "&VINTAGE (kwotowo), seniority = &seniority.. Produkt = &product_typ ";
- keylegend "production" "pct";
- run;
- /* Tabela wykres vin kwotowy - wszystkie kategorie zmiennej */
- proc report data=wykreskw.appended_&level._&VINTAGE._&product_typ._sen&seniority._v&i;
- column date_ total pct zm_kat;
- define date_ / display width=30 'Okres' center;
- define total / display width=30 'Suma naleznosci' center;
- define pct / display width=30 "Opoznienie >= &delay [w miesiacach]" center;
- define zm_kat / display width=50 "Szczegolowa klasa obserwacji" center;
- title;
- footnote;
- run;
- %if &typ='HTML' %then %do;
- ods HTML close;
- %end;
- %else %if &typ='PDF' %then %do;
- ods PDF close;
- %end;
- %end;
- %end;
- * Koniec analizy;
- %if &level ne 2 %then %do;
- %if &level = 0 %then %do;
- %let cond=%str(upcase(product) ne '');
- %end;
- %if &level = 1 %then %do;
- %let cond=%str(upcase(product)="&product_typ");
- %end;
- proc means data=dane.prod_&VINTAGE._&product_typ._sen&seniority._grp_best_cor noprint nway;
- class period;
- var &vintage;
- output out=wykres_&level._&VINTAGE._&product_typ._sen&seniority (drop=_freq_ _type_)
- n()=production
- mean()=pct;
- Where &cond;
- run;
- /* Zestaw danych pod vin ilosciowy*/
- data wykres.wykres_&level._&VINTAGE._&product_typ._sen&seniority ;
- set wykres_&level._&VINTAGE._&product_typ._sen&seniority ;
- format pct nlpct12.2;
- date_= input(period,yymmn6.);
- format date_ yymon7. ;
- run;
- /* Zestaw danych pod vin kwotowy*/
- proc sql;
- create table wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority as
- select period, sum(&VINTAGE._kwotowy) as zadluzone, sum(app_loan_amount) as total
- from dane.prod_&VINTAGE._&product_typ._sen&seniority._grp_best_cor where &cond
- group by period;
- quit;
- data wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority;
- set wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority;
- pct=zadluzone/total;
- format pct nlpct12.2;
- date_=input(period,yymmn6.);
- format date_ yymon7. ;
- run;
- %let delay = %sysfunc(substr(&Vintage,4,1)); *makrozmienna otrzymuje nr vinu, czyli due;
- /* Raport - vin ilosciowy */
- ods listing close;
- %if &typ='HTML' %then %do;
- ods HTML path="&dir.wykresy_html" gpath="&dir.wykresy_png" body="&level._&VINTAGE._&product_typ._sen&seniority..html";
- %end;
- %else %if &typ='PDF' %then %do;
- ods pdf file="&dir.wykresy_pdf\&level._&VINTAGE._&product_typ._sen&seniority..pdf";
- %end;
- /* Wykres vin ilosciowy - dla produktu (level 1) lub obu (level 0) */
- proc sgplot data=wykres.wykres_&level._&VINTAGE._&product_typ._sen&seniority;
- vbar date_ /response= production name="production" legendlabel="Liczba udzielonych kredytow";
- vline date_ / response= pct y2axis name="pct" legendlabel="Opoznienie >= &delay [w miesiacach]";
- xaxis fitpolicy=rotate tickvalueformat=monname. grid label='Miesiac';
- yaxis display= (nolabel) grid;
- y2axis display= (nolabel) values=(0.00 to 0.40 by 0.05);
- title "&VINTAGE (ilosciowo), Produkt = &product_typ ";
- keylegend "production" "pct";
- run;
- /* Tabela wykres vin ilosciowy - dla produktu (level 1) lub obu (level 0) */
- proc report data=wykres.wykres_&level._&VINTAGE._&product_typ._sen&seniority;
- column date_ production pct;
- define date_ / display width=30 'Okres' center;
- define production / display width=30 'Liczba udzielonych kredytow' center;
- define pct / display width=30 "Opoznienie >= &delay [w miesiacach]" center;
- title;
- footnote;
- run;
- %if &typ='HTML' %then %do;
- ods HTML close;
- %end;
- %else %if &typ='PDF' %then %do;
- ods PDF close;
- %end;
- /* Raport - vin kwotowy */
- ods listing close;
- %if &typ='HTML' %then %do;
- ods HTML path="&dir.wykresy_kwot_html" gpath="&dir.wykresy_kwot_png" body="&level._&VINTAGE._kwot_&product_typ._sen&seniority..html";
- %end;
- %else %if &typ='PDF' %then %do;
- ods pdf file="&dir.wykresy_kwot_pdf\&level._&VINTAGE._kwot_&product_typ._sen&seniority..pdf";
- %end;
- /* Wykres vin kwotowy - dla produktu (level 1) lub obu (level 0) */
- proc sgplot data=wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority;
- vbar date_ /response=total name="production" legendlabel="Suma naleznosci";
- vline date_ / response=pct y2axis name="pct" legendlabel="Opoznienie >= &delay [w miesiacach]";
- xaxis fitpolicy=rotate tickvalueformat=monname. grid label='Miesiac';
- yaxis display=(nolabel) grid;
- y2axis display=(nolabel) values=(0.00 to 0.40 by 0.05);
- title "&VINTAGE (kwotowo), Produkt = &product_typ ";
- keylegend "production" "pct";
- run;
- /* Tabela vin kwotowy - dla produktu (level 1) lub obu (level 0) */
- proc report data=wykreskw.wykres_&level._&VINTAGE._&product_typ._sen&seniority;
- column date_ total pct;
- define date_ / display width=30 'Okres' center;
- define total / display width=30 'Suma naleznosci' center;
- define pct / display width=30 "Opoznienie >= &delay [w miesiacach]" center;
- title;
- footnote;
- run;
- %if &typ='HTML' %then %do;
- ods HTML close;
- %end;
- %else %if &typ='PDF' %then %do;
- ods PDF close;
- %end;
- %end;
- %mend;
- /*HTML*/
- %create_graph(level=2, vintage=VIN1, seniority=12, product_typ=INS, typ='HTML')
- %create_graph(level=1, vintage=VIN1, seniority=12, product_typ=INS, typ='HTML')
- %create_graph(level=2, vintage=VIN1, seniority=12, product_typ=CSS, typ='HTML');
- %create_graph(level=1, vintage=VIN1, seniority=12, product_typ=CSS, typ='HTML');
- %create_graph(level=0, vintage=VIN1, seniority=12, product_typ=ALL, typ='HTML');
- %create_graph(level=2, vintage=VIN2, seniority=12, product_typ=INS, typ='HTML')
- %create_graph(level=1, vintage=VIN2, seniority=12, product_typ=INS, typ='HTML')
- %create_graph(level=2, vintage=VIN2, seniority=12, product_typ=CSS, typ='HTML');
- %create_graph(level=1, vintage=VIN2, seniority=12, product_typ=CSS, typ='HTML');
- %create_graph(level=0, vintage=VIN2, seniority=12, product_typ=ALL, typ='HTML');
- %create_graph(level=2, vintage=VIN3, seniority=12, product_typ=INS, typ='HTML')
- %create_graph(level=1, vintage=VIN3, seniority=12, product_typ=INS, typ='HTML')
- %create_graph(level=2, vintage=VIN3, seniority=12, product_typ=CSS, typ='HTML');
- %create_graph(level=1, vintage=VIN3, seniority=12, product_typ=CSS, typ='HTML');
- %create_graph(level=0, vintage=VIN3, seniority=12, product_typ=ALL, typ='HTML');
- /*PDF*/
- %create_graph(level=2, vintage=VIN1, seniority=12, product_typ=INS, typ='PDF')
- %create_graph(level=1, vintage=VIN1, seniority=12, product_typ=INS, typ='PDF')
- %create_graph(level=2, vintage=VIN1, seniority=12, product_typ=CSS, typ='PDF');
- %create_graph(level=1, vintage=VIN1, seniority=12, product_typ=CSS, typ='PDF');
- %create_graph(level=0, vintage=VIN1, seniority=12, product_typ=ALL, typ='PDF');
- %create_graph(level=2, vintage=VIN2, seniority=12, product_typ=INS, typ='PDF')
- %create_graph(level=1, vintage=VIN2, seniority=12, product_typ=INS, typ='PDF')
- %create_graph(level=2, vintage=VIN2, seniority=12, product_typ=CSS, typ='PDF');
- %create_graph(level=1, vintage=VIN2, seniority=12, product_typ=CSS, typ='PDF');
- %create_graph(level=0, vintage=VIN2, seniority=12, product_typ=ALL, typ='PDF');
- %create_graph(level=2, vintage=VIN3, seniority=12, product_typ=INS, typ='PDF')
- %create_graph(level=1, vintage=VIN3, seniority=12, product_typ=INS, typ='PDF')
- %create_graph(level=2, vintage=VIN3, seniority=12, product_typ=CSS, typ='PDF');
- %create_graph(level=1, vintage=VIN3, seniority=12, product_typ=CSS, typ='PDF');
- %create_graph(level=0, vintage=VIN3, seniority=12, product_typ=ALL, typ='PDF');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement