Sei sulla pagina 1di 28

/* TABELLA CR AIM

*/
proc sort data=dmdb.Fct_cr_aim(drop=data_lotto banca codice_rilevazione tipo key
)
out=tmp_Fct_cr_aim(drop=data_inizio_validita data_fine_validita) nodu
pkey;
where data_fine_validita>='01JAN5999:00:00:00'dt;
by
NDG
PROGRESSIVO
DATA_CONTABILE
TRASCINAMENTO
FLAG_SOTTOSOGLIA
FLAG_AZ_ANDATA
FLAG_AZ_RITORNO
FLAG_GRUPPO_GC
FLAG_FINANZIARIE
FLAG_BANCARI
FLAG_SISTEMA
CODICE_LOTTO
;
run;
data tmp_Fct_cr_aim;
set tmp_Fct_cr_aim;
by
NDG
PROGRESSIVO
DATA_CONTABILE
TRASCINAMENTO
FLAG_SOTTOSOGLIA
FLAG_AZ_ANDATA
FLAG_AZ_RITORNO
FLAG_GRUPPO_GC
FLAG_FINANZIARIE
FLAG_BANCARI
FLAG_SISTEMA;
if last.FLAG_SISTEMA; /*In questo modo eliminiamo le righe doppie che
differiscono solo per codice lotto e prendiamo piu recente*/
run;
/* TABELLA CR HIM
*/
proc sort data=dmdb.Fct_cr_him(drop=data_lotto banca codice_rilevazione tipo key
)
out=tmp_Fct_cr_him(drop=data_inizio_validita data_fine_validita) nodu
pkey;
where data_fine_validita>='01JAN5999:00:00:00'dt;
by
NDG
PROGRESSIVO
CODICE_CR
FENOMENO
STRUTTURA_CLASS
LOCALIZZAZIONE
DUR_ORIGINARIA
DUR_RESIDUA
DIVISA
IMPORT_EXPORT
TIPO_ATTIVITA
RUOLO_AFFIDATO
CODICE_CR_COL
NDG_COLLEGATO
STATO_RAPPORTO
TIPO_GARANZIA
FEN_GARANTITO
CODICE_LOTTO
;
run;
data mdl_rtg.tmp_Fct_cr_him_;
set tmp_Fct_cr_him;
by
NDG
PROGRESSIVO
CODICE_CR
FENOMENO
STRUTTURA_CLASS
LOCALIZZAZIONE
DUR_ORIGINARIA
DUR_RESIDUA
DIVISA
IMPORT_EXPORT
TIPO_ATTIVITA
RUOLO_AFFIDATO
CODICE_CR_COL
NDG_COLLEGATO
STATO_RAPPORTO
TIPO_GARANZIA
FEN_GARANTITO
;
if last.FEN_GARANTITO; /*In questo modo eliminiamo le righe doppie che differi
scono solo per codice lotto e prendiamo piu recente*/
run;
/*
CONTROLLO se ci sono duplicati a parit di ndg/progressivo/fenomeno e altre variab
ili.
NON CI SONO duplicati ad eccezione che per NDG_COLLEGATO e CR_COLLEGATo
proc sort data=mdl_rtg.tmp_Fct_cr_him_ ;
by
NDG
PROGRESSIVO
fenomeno
TIPO_ATTIVITA;
run;
data a;
set mdl_rtg.tmp_Fct_cr_him_;
by
NDG
PROGRESSIVO
fenomeno
TIPO_ATTIVITA;
if first.TIPO_ATTIVITA and last.TIPO_ATTIVITA and not (first.fenomeno and las
t.fenomeno);
run;
STRUTTURA_CLASS
TIPO_ATTIVITA
STATO_RAPPORTO
*/
%MACRO CREA_TAB;
%IF %SYSFUNC(exist(MDL_RTG.tab_cr)) %THEN %DO;
%END;
%ELSE %DO;
/* UNISCO AIM e HIM
*/
data MDL_RTG.tab_cr;
merge tmp_Fct_cr_aim(in=in1)
mdl_rtg.tmp_Fct_cr_him_(in=in2);
by NDG
PROGRESSIVO;
if in1 and in2;
run;
%END;
%MEND;
%CREA_TAB;
proc sql;
create table MDL_RTG.tab_cr_all_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(accordato) as accordato_tot,
sum(accordato_oper) as accordato_oper_tot,
sum(utilizzato) as utilizzato_tot,
sum(saldo_medio) as saldo_medio_tot,
sum(val_garanzia) as val_garanzia_tot,
sum(imp_garantito) as imp_garantito_tot,
sum(altri_importi) as altri_importi_tot,
sum(credito) as credito_tot,
sum(sconfino) as sconfino_tot,
sum(margine) as margine_tot
from MDL_RTG.tab_cr
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i div
ersi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
proc sql;
create table tab_cr_mutui_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(sconfino) as sconfino_mutui_tot,
sum(accordato_oper) as accordato_oper_mutui_tot
from MDL_RTG.tab_cr
where fenomeno = 550400 and TIPO_ATTIVITA=32 and dur_originaria > 5
/*ATTENZIONE:
abbiamo i mutui come descritto su
https://www.bancaditalia.it/vigilanza/normativa/norm_bi/circ-reg/c139/c139-8agg.
pdf
che sono dentro a 550400 rischi a scadenza.
Tali rischi sono distributi con i seguenti codici tipo_attivita
http://www.bancaditalia.it/sispaga/MIC/com_04_290409/Allegato4_1.pdf
noi abbiamo in piu il 25.
Per identificare il gruppo MUTUI sono stati scartati tutti i codici eccetto il 3
2. (anche come numerosit grosso)
Luca:
durata originaria >5 cio 16 17 18 significa che prendiamo solo quelli che durano
piu di un anno: non estraiamo quindi
solo i mutui ma tutti i finanziamenti a scadenza con durata originaria oltre 1 a
nno cio a medio lungo termine
Infatti una banca non distingue molto tra mutui e altro finanziamneto di 5 6 ann
i, cmqe rischioso allo stesso modo
cambia la garanzia...ma cmqe simile. Quindi decidiamo di non identificare solo i
mutui ma la scadenza a medio lungo termine
*/
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i dive
rsi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
proc sql;
create table tab_cr_gar_att_neg_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(imp_garantito) as gar_attivate_neg_tot
from MDL_RTG.tab_cr
where fenomeno = 553200 and STATO_RAPPORTO in ('62' '176' '178')
/*ATTENZIONE:
codice per calcolo PRESENZA ANOMALIE GRAVI, in particolare Garanzie attivate con
esito negativo.
dallo stato_rapporto si avrebbero i codici: (176, 178, 180, 182, 62)
ma alcuni sono riferiti solo al fenomeno 555100.
Ma noi non stiamo parlando di Crediti Ceduti ma di Garanzie, come dice anche il
PDF di Bankit,
garanzia attivata con esito negativo ----> Vale per la categoria di censimento 3
(garanzie)
Quindi utilizziamo solo i codici 176, 178, 62 che sono relativi al 553200.
*/
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i dive
rsi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
proc sql;
create table tab_cr_cred_ristrut_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(utilizzato) as uti_crediti_ristrutt
from MDL_RTG.tab_cr
where fenomeno in (550200 550400 550600) and stato_rapporto in ('80' '83' '87' '
127' '131' '135' '825' '829')
/*ATTENZIONE:
codice per calcolo PRESENZA ANOMALIE LIEVI, in particolare Utilizzato crediti ri
strutturati.
prendo tutti i codici ristrutturati
*/
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i dive
rsi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
proc sql;
create table tab_cr_cred_scaduti_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(utilizzato) as uti_crediti_scaduti
from MDL_RTG.tab_cr
where fenomeno in (550200 550400 550600) and stato_rapporto in ('82' '85' '89' '
125' '129' '133' '137' '827' '831')
/*ATTENZIONE:
codice per calcolo PRESENZA ANOMALIE LIEVI, in particolare Crediti scaduti e sco
nfinanti 180.
prendo tutti i codici scad o scon 180
*/
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i dive
rsi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
proc sql;
create table tab_cr_impag_scad_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(altri_importi) as impag_scadu
from MDL_RTG.tab_cr
where fenomeno in (555150) and stato_rapporto in ('93')
/*ATTENZIONE:
codice per calcolo PERCENTUALI DI IMPAGATO/SCADUTO, AIM (altri importi) 555150
solo stato_rapporto 93 crediti impagati su autoliq 555150
*/
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i dive
rsi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
/*Calcolo indicatore sui garantiti inizio*************************/
data him_garantiti;
set mdl_rtg.tmp_Fct_cr_him_;
where fenomeno=553200 and length(ndg_collegato) >1;
keep ndg codice_cr_col ndg_collegato fenomeno;
run;
proc sort data=him_garantiti out=him_garantiti_ndg nodupkey;
by ndg codice_cr_col; /*Esisterebbero pi ndg per lo stesso codice_cr_col ma tant
o avrebbero la stessa CR e quindi gli stessi dati
e quindi li moltiplicheremmo le informazioni:
prendiamo quindi un NDG a caso, tanto hanno tutti la stessa cr*/
run;
proc sort data=him_garantiti_ndg out=garantiti_coll(drop=codice_cr_col) nodupkey
;
by ndg_collegato ndg;
run;
data garantiti_coll(drop=ndg_collegato);
set garantiti_coll(rename=(ndg=ndg_primario));
ndg=ndg_collegato*1;
run;
proc sort data=DMDB.Fct_anagrafe(keep=ndg ndg_gruppo data_inizio_validita data_f
ine_validita) out=Fct_anagrafe nodupkey;
by NDG;
where data_inizio_validita<='31MAR2014:00:00:00'dt and data_fine_validita>='31MA
R2014:00:00:00'dt;
run;
data garantiti_coll;
merge garantiti_coll(in=in1)
Fct_anagrafe(in=in2); /*attacco NDG gruppo*/
by ndg;
if in1 and in2 then output;
else if in1 then do;
ndg_gruppo=ndg;
output;
end;
drop data_inizio_validita data_fine_validita;
run;
proc sort data=garantiti_coll(drop=ndg) nodupkey;
by ndg_gruppo ndg_primario;
run;
data garantiti_cr(drop=ndg fen_old rename=(ndg_primario=ndg))
garantiti_senza_cr(drop=flag_sottosoglia flag_az_andata flag_az_ritorno fla
g_gruppo_gc flag_finanziarie flag_bancari
progressivo data ora codice_cr codice_cr_col n
dg_collegato);
merge garantiti_coll(in=in1 rename=(ndg_gruppo=ndg))
MDL_RTG.tab_cr(in=in2 where=(flag_sistema='S' and fen_old in (550200 55040
0 550600 550800 551000 552200 552400)) rename=(fenomeno=fen_old)
/*drop=flag_sottosoglia flag_az_andata flag_az_rito
rno flag_gruppo_gc flag_finanziarie flag_bancari
progressivo data ora codice_cr codice_cr_col n
dg_collegato*/);
by ndg;
if in1 and in2 then output garantiti_cr;
else if in1 then output garantiti_senza_cr;
run;
*Esistono di gruppo ndg 3293 che non hanno cr: probabilmente vecchia;
proc sql;
create table tab_cr_garantiti_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(sconfino) as sconf_grnt,
sum(accordato_oper) as acc_ope_grnt
from garantiti_cr /* una sorta di MDL_RTG.tab_cr trasformata*/
/*ATTENZIONE:
codice per calcolo ANDAMENTALE DEI GARANTITI,
SCONFINO su ACC_OPE dei garantiti tot cassa firma:
i garantiti li trovo andando sulla HIM tramite il fenomeno 553200: prendo i ndg_
collegati (e ndg gruppo)
vado a riprendere poi le loro cr, calcolo il rapporto e sommo
*/
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i dive
rsi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
/*Calcolo indicatore sui garantiti fine*************************/
/*Calcolo indicatore su segnalazioni CC: cedneti debitori soluti solvendo
inizio*****************/
proc sql;
create table tab_cr_deb_soluto_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(altri_importi) as importo_soluto
from MDL_RTG.tab_cr
where fenomeno = 555100 and TIPO_ATTIVITA=33 /*pro soluto*/
/*ATTENZIONE:
calcolo delle segnalazioni CC:
optiamo per
3) facciamo soluto/(soluto+solvendo): se missing significa che solo cedente e v
ale poco, se 0 significa che solo solvendo,
se >0 significa che cede anche soluto cio merito creditizio migliore. Questo
per comporterebbe assegnare al missing un importanza!!
e se lo mettessimo negativo?!!!? mia ipotesi....<<<<<<<<<<<<<<<<<<<<<<<<<---
-------!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ATTENZIONE!!!!
ma in realt la logica sarebbe:
variabile cluster con pi valori in base a se ha 555100 o non ce l'ha e 0 solo ce
dente(non ha 555100),
1 debitore solo solvendo(tipo attivit 34 e non 33), 2 anche soluto (attivit 33)
*/
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i dive
rsi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
proc sql;
create table tab_cr_deb_solvendo_ok as
select NDG,
data_contabile,
fenomeno,
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema,
sum(altri_importi) as importo_solvendo
from MDL_RTG.tab_cr
where fenomeno = 555100 and TIPO_ATTIVITA=34 /*pro solvendo*/
group by NDG,
data_contabile,
fenomeno, /*SOMMARIZZO PER FENOMENO (oltre che per i dive
rsi flag)*/
flag_sottosoglia,
flag_az_andata,
flag_az_ritorno,
flag_gruppo_gc,
flag_finanziarie,
flag_bancari,
flag_sistema;
quit;
/*Calcolo indicatore su segnalazioni CC: cedneti debitori soluti solvendo
fine*****************/
data TAB_CR_OK;
merge MDL_RTG.tab_cr_all_ok(in=in1) /*Tabella guida*/
tab_cr_mutui_ok(in=in2)
tab_cr_gar_att_neg_ok(in=in3)
tab_cr_cred_ristrut_ok(in=in4)
tab_cr_cred_scaduti_ok(in=in5)
tab_cr_impag_scad_ok(in=in6)
tab_cr_garantiti_ok(in=in7)
tab_cr_deb_soluto_ok(in=in8)
tab_cr_deb_solvendo_ok(in=in9);
by NDG
DATA_CONTABILE
FENOMENO
flag_sottosoglia
flag_az_andata
flag_az_ritorno
flag_gruppo_gc
flag_finanziarie
flag_bancari
flag_sistema;
if in1 and not in2 then do;
sconfino_mutui_tot = 0;
accordato_oper_mutui_tot = 0;
end;
if in1 and not in3 then do;
gar_attivate_neg_tot = 0;
end;
if in1 and not in4 then do;
uti_crediti_ristrutt = 0;
end;
if in1 and not in5 then do;
uti_crediti_scaduti = 0;
end;
if in1 and not in6 then do;
impag_scadu = 0;
end;
if in1 and not in7 then do;
sconf_grnt = 0;
acc_ope_grnt = 0;
end;
else if in7 and not in1 then delete; /*potrebbero esserci date contabili
presenti per i collegati/garantiti ma non per il primario*/
if in1 and not in8 then do;
importo_soluto = 0;
end;
if in1 and not in9 then do;
importo_solvendo = 0;
end;
run;
proc sort data=tab_cr_ok(drop=
flag_sottosoglia
/*flag_az_andata*/
flag_az_ritorno
flag_gruppo_gc
flag_finanziarie
flag_bancari) out=cr_sistema_andata nodupkey;
by ndg data_contabile flag_sistema flag_az_andata fenomeno;
where flag_sistema='S' or flag_az_andata='S';
run;
/* TABELLA CR AIQ
*/
proc sort data=dmdb.Fct_cr_aiq(drop=data banca codice_rilevazione tipo key)
out=tmp_Fct_cr_aiq(drop=data_inizio_validita data_fine_validita) nodu
pkey; /********ATTENZIONE DATE ERRATE***/
where data_fine_validita>='01JAN5999:00:00:00'dt;
by NDG
DATA_CONTABILE
CODICE_LOTTO
;
run;
data tmp_Fct_cr_aiq;
set tmp_Fct_cr_aiq;
by NDG
DATA_CONTABILE
CODICE_LOTTO
;
if last.DATA_CONTABILE then do;
ENTI_SEGNALANTI = affidanti + non_segnalanti;
output;
end;
*drop CODICE_LOTTO CODICE_CR;
run;
/*
parlando con Checchin. I non_segnalanti e i affidanti sono disgiunti.
cio se affidanti sono 5 e non_segnalanti sono 3 (o 10) nessuno di questi 3 affida
.
ma i non_segnalanti segnalano. ad esempio come debitori...che non hanno un affid
amento.
per questi i dati che abbiamo sono o potrebbero essere farlocchi perch sono indir
etti:
sono ad esempio legati a cointestazioni o debitori e abbiamo una CR di un cointe
stato e questa
poi nei sistemi IFIS propaga le sole informazioni di AIQ sul soggetto non_segnal
ante.
Quindi come totale dei SEGNALANTI si potrebbe fare AFFIDANTI + NON_SEGNALANTI
uno richiede PI ad esempio per
soggetti gi affidati, ma non segnalabili perch il rapporto di credito intrattenuto
con
l'intermediario di importo inferiore ai vigenti limiti di censimento ovvero per al
tri motivi
NON MI CONVINCE: spesso tale somma corretta
affidanti = affidanti_mese_precedente + nuovi_affidanti - non_segnalanti
anche perch i non_segnalanti sono:
N. ENTI CHE NON SEGNALANO PI AFFIDAMENTI
NUMERO DI INTERMEDIARI CHE AD UNA DATA CONTABILE CESSANO DI SEGNALARE IL CENSITO
.
da:
CRModalita_di_scambio_7_4_4.pdf
proc sort data=Tmp_fct_cr_aiq out=Tmp_fct_cr_aiq_ nodupkey;
by ndg data_contabile;
run;
data Tmp_fct_cr_aiq_;
set Tmp_fct_cr_aiq_;
by ndg data_contabile;
retain affidanti_old annomese_meno1;
if first.ndg then do;
annomese_meno1 = put(data_contabile,monyy5.);
affidanti_old=affidanti;
end;
else do;
annomese_meno1_calcolato = put( intnx('month',data_contabile,-1,'end'), monyy
5.);
*if annomese_meno1_calcolato ne annomese_meno1 then flaganno=1;
if affidanti = affidanti_old + nuovi_affidanti - non_segnalanti or annomese_m
eno1_calcolato ne annomese_meno1 then flag=0;
else flag=1;
affidanti_old = affidanti;
annomese_meno1 = put(data_contabile,monyy5.);
end;
run;
proc sort data=Tmp_fct_cr_aiq_(where=(flag ne .)) out=Tmp_fct_cr_aiq_ndg nodupke
y;
by ndg flag;
run;
proc freq data=Tmp_fct_cr_aiq_ndg;
tables flag;
run;
*/
/* UNISCO AIM HIM AIQ
*/
%MACRO CREA_TAB;
%IF %SYSFUNC(exist(MDL_RTG.CR_SISTEMA)) %THEN %DO;
%END;
%ELSE %DO;
data MDL_RTG.CR_SISTEMA; /*ATTENZIONE: ho aggiunto le variabili qual
itative replicate per data contabile*/
merge cr_sistema_andata(in=in1)
tmp_Fct_cr_aiq(in=in2 keep=ndg data_contabile nuovi_affidanti affidanti r
ichieste_pi non_segnalanti soggetti_ceduti ENTI_SEGNALANTI);
by ndg data_contabile;
if in1; /*non prendo tutto quel che ce ma le AIQ che non match non le pre
ndo perch potrebbero essere fittizzie: avercele per via indiretta*/
run;
%END;
%MEND CREA_TAB;
%CREA_TAB;
/***************************************************************************/
/***************************************************************************/
/**************************** FINE MATCH ********************************/
/***************************************************************************/
/***************************************************************************/
/************************** INIZIO INDICATORI **************************/
/***************************************************************************/
/***************************************************************************/
/*
Richiesta da parte del Servizio Valutazione Debitori mail del 13 maggio 2014:
Includere negli indicatori l'andamento MtM dei derivati finanziari
Non abbiamo il campo VIN (accento) = valore intrinseco, fair value, MtM ----
--->>>>>>>NON POSSIAMO CALCOLARLO
Includere negli indicatori le percentuali di impagato/scaduto
AIM (altri importi) 555150 solo stato_rapporto 93 crediti impagati su autol
iq 555150
Includere negli indicatori le segnalazioni CC
CC=crediti ceduti. un indicatore che Valutazione guarda per il debitore, cio
se un debitore che gi un debitore
un buon segnale, soprattutto se soluto pi che solvendo.
Potremmo fare due modalit:
1) campo AIM per 555100: variazione media 3 mesi meno media 6 mesi? ma checc
hin non daccordo sul usare solo un importo senza
rapportarlo a niente.
2) questa info presente solo per i debitori. per i cedenti l'informazione c m
a all interno degli autoliquidanti
quindi potremmo creare una variabile dicotomica (si no 1 0) o con pi valor
i in base a se ha 555100 o non ce l'ha e
0 solo cedente(non ha 555100), 1 debitore solo solvendo(tipo attivit 34 e
non 33), 2 anche soluto (attivit 33)
3) facciamo soluto/(soluto+solvendo): se missing significa che solo cedente
e vale poco, se 0 significa che solo solvendo,
se >0 significa che cede anche soluto cio merito creditizio migliore. Ques
to per comporterebbe assegnare al missing un importanza!!
e se lo mettessimo negativo?!!!? mia ipotesi....<<<<<<<<<<<<<<<<<<<<<<<<<
----------!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ATTENZIONE!!!!
Includere negli indicatori l'andamentale dei garantiti
Checchin pensa che vorrebbero un rating/un andamentale un segnale di come va
nno i garantiti.
Potremmo fare: SCONFINO su ACC_OPE dei garantiti tot cassa firma:
i garantiti li trovo andando sulla HIM tramite il fenomeno 553200: prendo i
ndg_collegati....ecc... (gruppo, ditta individuale, ...non serve)
vado a riprendere poi le loro cr, calcolo il rapporto e sommo
*/
%LET CASSA = 550200 550400 550600 550800 551000; /*UTLIZZO ANCHE LA sofferenza
perch in documentazione bankit la CASSA definita come questi 5 fenomeni
e anche sul sistema ACCENTO
di banca ifis il totale di cassa comprensivo del importo a sofferenza*/
%LET CASSA_FIRMA = 550200 550400 550600 550800 551000 552200 552400;
%LET AUTOLIQ = 550200;
%LET REVOCA = 550600;
%LET SCADENZA = 550400;
%LET REVO_SCAD = 550400 550600;
%LET MUTUI = 550400;
%LET SCAD_AUTOLIQ = 555150;
%LET SOFFERENZE = 551000;
%LET CREDITI_PERDITA = 555200;
%LET PROCED_CONCORSUALI = 550800;
%LET GARANZIE_RICEVUTE = 553200;
%LET ANOMALIE_LIEVI = 550200 550400 550600;
%LET DEBITORI_CEDUTI = 555100;
/************************** AGGREGO PER DATA CONTABILE: CREAZIONE DEGLI INDIC
ATORI PUNTUALI **************************/
data cr_sistema_indic;
set MDL_RTG.cr_sistema;
by ndg data_contabile /*fenomeno*/ flag_sistema flag_az_andata;
retain
accordato_cassa
accordato_oper_cassa
utilizzato_cassa
accordato_cassa_firma
accordato_oper_cassa_firma
ut_cassa_firma
accordato_autoliq
scaduti_autoliq
impagato_autoliq
utilizzato_autoliq
accordato_revo_scad
utilizzato_revo_scad
accordato_oper_mutui
importo_garantito
sconfino_cassa
sconfino_cassa_firma
sconfino_scade
sconfino_revo_scad
sconfino_mutui
utilizzato_cassa_noifis
ut_cassa_firma_noifis
margine_acc_oper_scade
margine_acc_scade
margine_acc_oper_revoca
margine_cassa_acc
margine_cassa_acc_oper
margine_cassa_firma_acc
margine_cassa_firma_acc_oper
accordato_revoca
accordato_oper_revoca
utilizzato_revoca
accordato_scade
accordato_oper_scade
utilizzato_scade
pres_anomalie_gravi
pres_anomalie_lievi
garantiti_sconf
garantiti_acc_ope
segnal_cc_solu_solv
segnal_cc_solu
;
*margine_oper_tot = margine_tot;
margine_acc_tot = sum(margine_tot, (sum(accordato_tot , - accordato_oper_tot)
)); /*ATTENZIONE: definiamo margine SU accordato operativo cosi,

mantenendo lo stesso sconfino*/
*INIZIALIZZO GLI INDICATORI;
if first.data_contabile then do;
/*SISTEMA*/
accordato_cassa = 0;
accordato_oper_cassa = 0;
accordato_cassa_firma = 0;
accordato_oper_cassa_firma = 0;
accordato_autoliq = 0;
accordato_scade = 0;
accordato_revo_scad = 0;
utilizzato_cassa = 0;
ut_cassa_firma = 0;
utilizzato_autoliq = 0;
utilizzato_scade = 0;
scaduti_autoliq = 0;
impagato_autoliq = 0;
importo_garantito = 0;
garantiti_sconf = 0;
garantiti_acc_ope = 0;
segnal_cc_solu = 0;
segnal_cc_solu_solv = 0;
/*SISTEMA ESCLUSA IFIS*/
accordato_revoca = 0;
accordato_oper_revoca = 0;
accordato_oper_scade = 0;
accordato_oper_mutui = 0;
utilizzato_cassa_noifis = 0;
ut_cassa_firma_noifis = 0;
utilizzato_revoca = 0;
utilizzato_revo_scad = 0;
margine_cassa_acc = 0;
margine_cassa_acc_oper = 0;
margine_cassa_firma_acc = 0;
margine_cassa_firma_acc_oper = 0;
margine_acc_oper_revoca = 0;
margine_acc_oper_scade = 0;
margine_acc_scade = 0;
sconfino_cassa = 0;
sconfino_cassa_firma = 0;
sconfino_scade = 0;
sconfino_revo_scad = 0;
sconfino_mutui = 0;
pres_anomalie_gravi = 0;
pres_anomalie_lievi = 0;
end;
if fenomeno in (&CASSA.) then do;
if flag_sistema='S' then do;
accordato_cassa = sum(accordato_cassa, + accordato_tot);
accordato_oper_cassa = sum(accordato_oper_cassa, + accordato_oper_tot);
importo_garantito = sum(importo_garantito, + imp_garantito_tot);
margine_cassa_acc = sum(margine_cassa_acc, + margine_acc_tot);
margine_cassa_acc_oper = sum(margine_cassa_acc_oper, + margine_tot);
sconfino_cassa = sum(sconfino_cassa, + sconfino_tot);
utilizzato_cassa = sum(utilizzato_cassa, + utilizzato_tot);
utilizzato_cassa_noifis = sum(utilizzato_cassa_noifis, + utilizzato_tot);
end;
else if flag_az_andata='S' then do;
margine_cassa_acc = sum(margine_cassa_acc, + (-margine_acc_tot));
margine_cassa_acc_oper = sum(margine_cassa_acc_oper, + (-margine_tot));
sconfino_cassa = sum(sconfino_cassa, + (-sconfino_tot));
utilizzato_cassa_noifis = sum(utilizzato_cassa_noifis, + (-utilizzato_tot)
);
end;
end;
if fenomeno in (&CASSA_FIRMA.) and flag_sistema='S' then do;
if flag_sistema='S' then do;
accordato_cassa_firma = sum(accordato_cassa_firma, + accordato_tot);
accordato_oper_cassa_firma = sum(accordato_oper_cassa_firma, + accordato_o
per_tot);
margine_cassa_firma_acc = sum(margine_cassa_firma_acc, + margine_acc_tot);
margine_cassa_firma_acc_oper = sum(margine_cassa_firma_acc_oper, + margine
_tot);
sconfino_cassa_firma = sum(sconfino_cassa_firma, + sconfino_tot);
ut_cassa_firma = sum(ut_cassa_firma, + utilizzato_tot);
ut_cassa_firma_noifis = sum(ut_cassa_firma_noifis, + utilizzato_tot);
end;
else if flag_az_andata='S' then do;
margine_cassa_firma_acc = sum(margine_cassa_firma_acc, + (-margine_acc_tot
));
margine_cassa_firma_acc_oper = sum(margine_cassa_firma_acc_oper, + (-margi
ne_tot));
sconfino_cassa_firma = sum(sconfino_cassa_firma, + (-sconfino_tot));
ut_cassa_firma_noifis = sum(ut_cassa_firma_noifis, + (-utilizzato_tot));
end;
end;
if fenomeno in (&AUTOLIQ.) and flag_sistema='S' then do;
accordato_autoliq = sum(accordato_autoliq, +accordato_tot);
/*scaduti_autoliq = sum(scaduti_autoliq, +scaduti);*/
utilizzato_autoliq = sum(utilizzato_autoliq, +utilizzato_tot);
end;
if fenomeno in (&REVOCA.) and flag_sistema='S' then do;
if flag_sistema='S' then do;
accordato_revoca = sum(accordato_revoca, + accordato_tot);
accordato_oper_revoca = sum(accordato_oper_revoca, + accordato_oper_tot);
margine_acc_oper_revoca = sum(margine_acc_oper_revoca, + margine_tot)
;
utilizzato_revoca = sum(utilizzato_revoca, + utilizzato_tot);
end;
else if flag_az_andata='S' then do;
accordato_revoca = sum(accordato_revoca, + (-accordato_tot));
accordato_oper_revoca = sum(accordato_oper_revoca, + (-accordato_oper_tot
));
margine_acc_oper_revoca = sum(margine_acc_oper_revoca, + (-margine_to
t));
utilizzato_revoca = sum(utilizzato_revoca, + (-utilizzato_tot));
end;
end;
if fenomeno in (&SCADENZA.) and flag_sistema='S' then do;
if flag_sistema='S' then do;
accordato_scade = sum(accordato_scade, + accordato_tot);
accordato_oper_scade = sum(accordato_oper_scade, + accordato_oper_tot);
sconfino_scade = sum(sconfino_scade, + sconfino_tot);
utilizzato_scade = sum(utilizzato_scade, + utilizzato_tot);
end;
else if flag_az_andata='S' then do;
accordato_oper_scade = sum(accordato_oper_scade, + (-accordato_oper_tot))
;
sconfino_scade = sum(sconfino_scade, + (-sconfino_tot));
end;
end;
if fenomeno in (&REVO_SCAD.) and flag_sistema='S' then do;
if flag_sistema='S' then do;
accordato_revo_scad = sum(accordato_revo_scad, + accordato_tot);
margine_acc_scade = sum(margine_acc_scade, + margine_acc_tot);
margine_acc_oper_scade = sum(margine_acc_oper_scade, + margine_tot);
sconfino_revo_scad = sum(sconfino_revo_scad, + sconfino_tot);
utilizzato_revo_scad = sum(utilizzato_revo_scad, + utilizzato_tot);
end;
else if flag_az_andata='S' then do;
margine_acc_scade = sum(margine_acc_scade, + (-margine_acc_tot));
margine_acc_oper_scade = sum(margine_acc_oper_scade, + (-margine_tot)
);
sconfino_revo_scad = sum(sconfino_revo_scad, + (-sconfino_tot));
utilizzato_revo_scad = sum(utilizzato_revo_scad, + (-utilizzato_tot))
;
end;
end;
if fenomeno in (&SCAD_AUTOLIQ.) and flag_sistema='S' then do;
if flag_sistema='S' then do;
scaduti_autoliq = sum(scaduti_autoliq, + altri_importi_tot); /*mia assunzi
one perch altri_importi_tot unica variabile valorizzata per il 555150*/
impagato_autoliq = sum(impagato_autoliq, + impag_scadu); * per indicatore
proposto;
end;
end;
if fenomeno in (&MUTUI.) then do;
accordato_oper_mutui = sum(accordato_oper_mutui, + accordato_oper_mut
ui_tot);
sconfino_mutui = sum(sconfino_mutui, + sconfino_mutui_tot);
end;
if fenomeno in (&SOFFERENZE. &CREDITI_PERDITA. &PROCED_CONCORSUALI. &GARANZIE_RI
CEVUTE.) then do;
if flag_sistema='S' then do;
if fenomeno in (&SOFFERENZE. &PROCED_CONCORSUALI.) then do;
pres_anomalie_gravi = sum(pres_anomalie_gravi, + utilizzato_tot);
end;
else if fenomeno in (&CREDITI_PERDITA.) then do;
pres_anomalie_gravi = sum(pres_anomalie_gravi, + altri_importi_tot);
end;
else if fenomeno in (&GARANZIE_RICEVUTE.) then do;
pres_anomalie_gravi = sum(pres_anomalie_gravi, + gar_attivate_neg_tot);
/*ATTENZIONE: Controllare perch quasi sempre valorizzato!?!??!*/
garantiti_sconf = sum(garantiti_sconf, + sconf_grnt); * per indic
atore proposto;
garantiti_acc_ope = sum(garantiti_acc_ope, + acc_ope_grnt); * p
er indicatore proposto;
end;
end;
else if flag_az_andata='S' then do;
if fenomeno in (&SOFFERENZE. &PROCED_CONCORSUALI.) then do;
pres_anomalie_gravi = sum(pres_anomalie_gravi, - utilizzato_tot);
end;
else if fenomeno in (&CREDITI_PERDITA.) then do;
pres_anomalie_gravi = sum(pres_anomalie_gravi, - altri_importi_tot);
end;
else if fenomeno in (&GARANZIE_RICEVUTE.) then do;
pres_anomalie_gravi = sum(pres_anomalie_gravi, - gar_attivate_neg_tot);
/*ATTENZIONE: Controllare perch quasi sempre valorizzato!?!??!*/
end;
end;
end;
if fenomeno in (&ANOMALIE_LIEVI.) then do;
if flag_sistema='S' then do;
pres_anomalie_lievi = sum(pres_anomalie_lievi, + uti_crediti_ristrutt);
pres_anomalie_lievi = sum(pres_anomalie_lievi, + uti_crediti_scaduti);
end;
else if flag_az_andata='S' then do;
pres_anomalie_lievi = sum(pres_anomalie_lievi, - uti_crediti_ristrutt);
pres_anomalie_lievi = sum(pres_anomalie_lievi, - uti_crediti_scaduti);
end;
end;
if fenomeno in (&DEBITORI_CEDUTI.) then do;
if flag_sistema='S' then do;
segnal_cc_solu = sum(segnal_cc_solu, + importo_soluto);
segnal_cc_solu_solv = sum(segnal_cc_solu_solv, + importo_solvendo, + impor
to_soluto);
end;
end;
if last.data_contabile then do;
uti_acc_cassa = divide(utilizzato_cassa, accordato_cassa);
uti_acc_firma = divide(ut_cassa_firma, accordato_cassa_firma);
uti_acc_oper_cassa = divide(utilizzato_cassa, accordato_oper_cassa);
uti_acc_oper_firma = divide(ut_cassa_firma, accordato_oper_cassa_firma);
sco_uti_cassa = divide(sconfino_cassa, utilizzato_cassa);
sco_uti_firma = divide(sconfino_cassa_firma, ut_cassa_firma);
sco_mar_oper_cassa = divide(sconfino_cassa, margine_cassa_acc_oper);
sco_mar_oper_firma = divide(sconfino_cassa_firma, margine_cassa_firma_acc_
oper);
sco_mar_acc_cassa = divide(sconfino_cassa, margine_cassa_acc);
sco_mar_acc_firma = divide(sconfino_cassa_firma, margine_cassa_firma_acc);
uti_acc_revoca = divide(utilizzato_revoca, accordato_revoca);
uti_acc_oper_revoca = divide(utilizzato_revoca, accordato_oper_revoca);
sco_uti_rev_scad = divide(sconfino_revo_scad, utilizzato_revo_scad);
sco_mar_oper_rev_scad = divide(sconfino_revo_scad, margine_acc_oper_scade)
;
sco_mar_acc_rev_scad = divide(sconfino_revo_scad, margine_acc_scade);

ac_sca_e_rev_scd = divide(accordato_scade, accordato_revo_scad);
ut_sca_ut_rev_scd = divide(utilizzato_scade, utilizzato_revo_scad);

sco_scad_mar_oper_rev = divide(sconfino_scade, margine_acc_oper_revoca);
sco_acc_oper_scad = divide(sconfino_scade, accordato_oper_scade);
sco_acc_oper_mutui = divide(sconfino_mutui, accordato_oper_mutui);
sco_scad_uti_cassa = divide(sconfino_scade, utilizzato_cassa);
uti_acc_autoliq = divide(utilizzato_autoliq, accordato_autoliq);
sca_acc_autoliq = divide(scaduti_autoliq, accordato_autoliq);
sca_uti_autoliq = divide(scaduti_autoliq, utilizzato_autoliq);
impag_scad = divide(scaduti_autoliq, impagato_autoliq); * per
indicatore proposto;
uti_cassa_imp_gar = divide(utilizzato_cassa, importo_garantito);
imp_gar_uti_cassa = divide(importo_garantito, utilizzato_cassa);
garantiti_andament = divide(garantiti_sconf, garantiti_acc_ope); * per
indicatore proposto;
segnalazione_cc = divide(segnal_cc_solu, segnal_cc_solu_solv); * per
indicatore proposto; /*ATTENZIONE: il missing ha un significato pr
eciso! solo cedente cio peggior merito creditizio*/
output; /************ ATTENZI
ONE: non esiste piu il fenomeno ************************/
drop fenomeno;
end;
run;
%MACRO CREA_MACRO_VAR;
%LET ELENCO=
uti_acc_cassa
uti_acc_firma
uti_acc_oper_cassa
uti_acc_oper_firma
sco_uti_cassa
sco_uti_firma
sco_mar_oper_cassa
sco_mar_oper_firma
sco_mar_acc_cassa
sco_mar_acc_firma
uti_acc_revoca
uti_acc_oper_revoca
sco_uti_rev_scad
sco_mar_oper_rev_scad
sco_mar_acc_rev_scad
sco_scad_mar_oper_rev
sco_acc_oper_scad
sco_acc_oper_mutui
sco_scad_uti_cassa
uti_acc_autoliq
sca_acc_autoliq
sca_uti_autoliq
impag_scad
uti_cassa_imp_gar
pres_anomalie_gravi
pres_anomalie_lievi
garantiti_andament
segnalazione_cc
;
%let count = 1;
%let nome_var = %scan(&ELENCO.,&count.);
%do %while(&nome_var. ne %str( ));
%GLOBAL VAR&count.;
%LET VAR&count. = &nome_var.;
%let count = %eval(&count. + 1);
%let nome_var = %scan(&ELENCO.,&count.);
%end;
%GLOBAL num_var_medie;
%let num_var_medie = %eval(&count. - 1);
%LET ELENCO_VARIAZ=
uti_acc_cassa
uti_acc_firma
ut_cassa_firma
uti_acc_revoca
ac_sca_e_rev_scd
ut_sca_ut_rev_scd
ENTI_SEGNALANTI
RICHIESTE_PI /****************+++ cambio con Numero enti che non
segnalano pi somma nei 3 mesi / numero segnalanti media nei 3 mesi sistema*/
imp_gar_uti_cassa;
%let count2 = 1;
%let nome_var2 = %scan(&ELENCO_VARIAZ.,&count2.);
%PUT AAA;
%do %while(&nome_var2. ne %str( ));
%PUT BBB;
%GLOBAL VAR_VARIAZ&count2.;
%LET VAR_VARIAZ&count2. = &nome_var2.;
%let count2 = %eval(&count2. + 1);
%let nome_var2 = %scan(&ELENCO_VARIAZ.,&count2.);
%end;
%GLOBAL num_var_variaz;
%let num_var_variaz = %eval(&count2. - 1);
%PUT -----------------> &VAR17. &VAR_VARIAZ4.;
%MEND CREA_MACRO_VAR;
%CREA_MACRO_VAR;
/************************** CREAZIONE DEGLI INDICATORI - MEDIE *************
*************/
options symbolgen source source2;
/*TAPPO I BUCHI DOVE CI SONO DEI MESI ASSENTI: comunque riesco a construire alcu
ni indicatori, visto che sono delle medie degli
ultimi 3 o 6 mesi, anche se ce un missing, le medie posso farle comunque. Dove
ho dei missing per pi di 3/6 mesi ovviamente
non posso pi calcolare la media e quindi l indicatore, che risulter quindi missi
ng*/
%MACRO CREA_DT_CONTABILE_MISSING;
data tmp_cr_sistema_indic;
set cr_sistema_indic;
retain mese_precedente;
by ndg data_contabile;
if first.ndg then mese_precedente=' ';
annomese_meno1 = put(data_contabile,monyy5.);
annomese_meno1_calcolato = put( intnx('month',data_contabile,-1,'end'), monyy
5.);
if (not first.ndg) and mese_precedente ne annomese_meno1_calcolato then do;
differenza= INTCK('month',input(mese_precedente,monyy5.),input(annomese_me
no1,monyy5.));
data_contabile_reale=data_contabile;
%DO i=1 %TO &num_var_medie.;
tmp_&&VAR&I.. = &&VAR&I..;
%END;
%DO i=1 %TO &num_var_variaz.;
tmp_&&VAR_VARIAZ&I.. = &&VAR_VARIAZ&I..;
%END;
do j=1 to differenza;
data_contabile=intnx('month',data_contabile_reale,-differenza+j,'en
d');
if j ne differenza then do; /*per queste date inesistenti azz
ero tutti gli importi*/
%DO i=1 %TO &num_var_medie.;
&&VAR&I.. = .;
%END;
%DO i=1 %TO &num_var_variaz.;
&&VAR_VARIAZ&I.. = .;
%END;
flag_data_missing='S';
end;
else do; /*questa l unica data che esisteva nei dati original
i quindi lascio gli importi esistenti.*/
%DO i=1 %TO &num_var_medie.;
&&VAR&I.. = tmp_&&VAR&I..;
%END;
%DO i=1 %TO &num_var_variaz.;
&&VAR_VARIAZ&I.. = tmp_&&VAR_VARIAZ&I..;
%END;
flag_data_missing='';
end;
output;
end;
end;
else output;
mese_precedente=put(data_contabile,monyy5.);
keep ndg data_contabile flag_data_missing
%DO i=1 %TO &num_var_medie.;
&&VAR&I..
%END;
%DO i=1 %TO &num_var_variaz.;
&&VAR_VARIAZ&I..
%END;
;
run;
%MEND CREA_DT_CONTABILE_MISSING;
%CREA_DT_CONTABILE_MISSING;
/*6824 102736 102189*/
%MACRO CREA_INDICATORI_MEDI;
data cr_sistema_indic_medie;
set /*cr_sistema_indic*/ tmp_cr_sistema_indic;
by ndg data_contabile;
retain
%DO i=1 %TO &num_var_medie.;
&&VAR&I.._0_mesi_fa
&&VAR&I.._1_mesi_fa
&&VAR&I.._2_mesi_fa
&&VAR&I.._3_mesi_fa
&&VAR&I.._4_mesi_fa
&&VAR&I.._5_mesi_fa
%END;
%DO i=1 %TO &num_var_variaz.;
&&VAR_VARIAZ&I..v_0_mesi_fa
&&VAR_VARIAZ&I..v_1_mesi_fa
&&VAR_VARIAZ&I..v_2_mesi_fa
&&VAR_VARIAZ&I..v_3_mesi_fa
&&VAR_VARIAZ&I..v_4_mesi_fa
&&VAR_VARIAZ&I..v_5_mesi_fa
%END;
;
format
%DO i=1 %TO &num_var_medie.;
&&VAR&I.._0_mesi_fa
&&VAR&I.._1_mesi_fa
&&VAR&I.._2_mesi_fa
&&VAR&I.._3_mesi_fa
&&VAR&I.._4_mesi_fa
&&VAR&I.._5_mesi_fa
&&VAR&I.._3m
&&VAR&I.._6m
%END;
%DO i=1 %TO &num_var_variaz.;
&&VAR_VARIAZ&I..v_0_mesi_fa
&&VAR_VARIAZ&I..v_1_mesi_fa
&&VAR_VARIAZ&I..v_2_mesi_fa
&&VAR_VARIAZ&I..v_3_mesi_fa
&&VAR_VARIAZ&I..v_4_mesi_fa
&&VAR_VARIAZ&I..v_5_mesi_fa
&&VAR_VARIAZ&I..v_3m
%END;
commax12.8;
if first.NDG then do;
%DO i=1 %TO &num_var_medie.;
&&VAR&I.._0_mesi_fa = &&VAR&I..;
&&VAR&I.._1_mesi_fa = . ;
&&VAR&I.._2_mesi_fa = . ;
&&VAR&I.._3_mesi_fa = . ;
&&VAR&I.._4_mesi_fa = . ;
&&VAR&I.._5_mesi_fa = . ;
&&VAR&I.._3m = &&VAR&I..;
&&VAR&I.._6m = &&VAR&I..;
%END;
%DO i=1 %TO &num_var_variaz.;
&&VAR_VARIAZ&I..v_0_mesi_fa = &&VAR_VARIAZ&I..; /*prima cera VAR qui e
non variaz....*/
&&VAR_VARIAZ&I..v_1_mesi_fa = . ;
&&VAR_VARIAZ&I..v_2_mesi_fa = . ;
&&VAR_VARIAZ&I..v_3_mesi_fa = . ;
&&VAR_VARIAZ&I..v_4_mesi_fa = . ;
&&VAR_VARIAZ&I..v_5_mesi_fa = . ;
&&VAR_VARIAZ&I..v_3m = &&VAR_VARIAZ&I..;
%END;
end;
else do;
%DO i=1 %TO &num_var_medie.;
&&VAR&I.._5_mesi_fa = &&VAR&I.._4_mesi_fa;
&&VAR&I.._4_mesi_fa = &&VAR&I.._3_mesi_fa;
&&VAR&I.._3_mesi_fa = &&VAR&I.._2_mesi_fa;
&&VAR&I.._2_mesi_fa = &&VAR&I.._1_mesi_fa;
&&VAR&I.._1_mesi_fa = &&VAR&I.._0_mesi_fa;
&&VAR&I.._0_mesi_fa = &&VAR&I..;
&&VAR&I.._3m = mean(&&VAR&I.._0_mesi_fa, &&VAR&I.._1_mesi_fa, &&VA
R&I.._2_mesi_fa);
&&VAR&I.._6m = mean(&&VAR&I.._0_mesi_fa, &&VAR&I.._1_mesi_fa, &&VA
R&I.._2_mesi_fa,
&&VAR&I.._3_mesi_fa, &&VAR&I.._4_mesi_fa, &&VAR&I.
._5_mesi_fa);
%END;
%DO i=1 %TO &num_var_variaz.;
&&VAR_VARIAZ&I..v_5_mesi_fa = &&VAR_VARIAZ&I..v_4_mesi_fa;
&&VAR_VARIAZ&I..v_4_mesi_fa = &&VAR_VARIAZ&I..v_3_mesi_fa;
&&VAR_VARIAZ&I..v_3_mesi_fa = &&VAR_VARIAZ&I..v_2_mesi_fa;
&&VAR_VARIAZ&I..v_2_mesi_fa = &&VAR_VARIAZ&I..v_1_mesi_fa;
&&VAR_VARIAZ&I..v_1_mesi_fa = &&VAR_VARIAZ&I..v_0_mesi_fa;
&&VAR_VARIAZ&I..v_0_mesi_fa = &&VAR_VARIAZ&I..;
&&VAR_VARIAZ&I..v_3m = mean(&&VAR_VARIAZ&I..v_0_mesi_fa, &&VAR_VAR
IAZ&I..v_1_mesi_fa, &&VAR_VARIAZ&I..v_2_mesi_fa);

&&VAR_VARIAZ&I..v_var_3_6 = &&VAR_VARIAZ&I..v_3m -
mean(&&VAR_VARIAZ&I..v_3_mesi_fa, &&VAR_
VARIAZ&I..v_4_mesi_fa, &&VAR_VARIAZ&I..v_5_mesi_fa);
%END;
end;
drop
%DO i=1 %TO &num_var_medie.;
&&VAR&I.._5_mesi_fa
&&VAR&I.._4_mesi_fa
&&VAR&I.._3_mesi_fa
&&VAR&I.._2_mesi_fa
&&VAR&I.._1_mesi_fa
&&VAR&I.._0_mesi_fa
&&VAR&I..
%END;
%DO i=1 %TO &num_var_variaz.;
&&VAR_VARIAZ&I..v_5_mesi_fa
&&VAR_VARIAZ&I..v_4_mesi_fa
&&VAR_VARIAZ&I..v_3_mesi_fa
&&VAR_VARIAZ&I..v_2_mesi_fa
&&VAR_VARIAZ&I..v_1_mesi_fa
&&VAR_VARIAZ&I..v_0_mesi_fa
&&VAR_VARIAZ&I..
%END;
;
run;
%MEND CREA_INDICATORI_MEDI;
%CREA_INDICATORI_MEDI;
/*****************************AGGANCIO NDG PER DITTE INDIVIDUALI ***************
*********/
proc sort data=DMDB.ANG_CONNESSIONI (keep= DATA_FINE_VALIDITA data_inizio_validi
ta
ID_ANAG_GRUPPO ID_ANAG_COLL TIPO_COLL
where=(data_inizio_validita<='31MAR2014:00:
00:00'dt and
data_fine_validita>='31MAR2014:00:00
:00'dt and
TIPO_COLL eq 60)
)
out=ANG_CONNESSIONI(drop=DATA_FINE_VALIDITA data_inizio_validita TIPO_
COLL);
by ID_ANAG_GRUPPO;
run;
data CR_indicatori;
merge cr_sistema_indic_medie (in=a rename=(NDG=NDG_GRUPPO))
ANG_CONNESSIONI (in=b rename=(ID_ANAG_GRUPPO=NDG_GRUPPO));
by NDG_GRUPPO;
if a ;
if ID_ANAG_COLL eq . then NDG_CR=NDG_GRUPPO;
else NDG_CR=ID_ANAG_COLL;
drop NDG_GRUPPO ID_ANAG_COLL;
run;
proc sort data=CR_indicatori nodupkey;
by NDG_CR DATA_CONTABILE;
run;
data MDL_RTG.CR_indicatori;
retain ndg;
set CR_indicatori(rename=(ndg_cr=ndg_gruppo));
run;
/*****************************AGGANCIO NDG PER DITTE INDIVIDUALI ***************
*********/
%LET SNAPSHOT_MINIMO=2010;
/*************************PRENDO PTF REALE DEI CEDENTI *********************/
proc sort data=MDL_RTG.PILOTA_DEFAULT(keep=ndg_gruppo ndg data_soff flag_default
snapshot tipo data_aggancio)
out=campione nodupkey;
by NDG_GRUPPO data_aggancio snapshot;
where SNAPSHOT >= &SNAPSHOT_MINIMO.;
run;
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* attenzione: qui faccio una merge bruta in realt nel
pgm analisi missing ho estratto alcuni delle date aggancio
mancanti. prendere quel codice*/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
data MDL_RTG.LONG_LIST_CR;
merge campione(in=a rename=(data_aggancio=data_rif))
MDL_RTG.CR_indicatori (in=b
rename=(data_contabile=data_rif)
);
by NDG_GRUPPO data_rif;
if a then output;
run;
%MACRO MEANS(VAR=uti_acc_firma_3m);
proc means data=MDL_RTG.LONG_LIST_CR mean min p1 p5 p10 p25 p50 p75 p90 p95 p99
max missing noprint;
var &VAR. ;
output out=_&VAR. nmiss=num_missing mean=mean min=min
p1=p1 p5=p5 p10=p10 p25=p25 p50=p50 p75=p75 p90=p90 p95=p95 p99=
p99 max=max ;
run;
data _&VAR.;
length nome_var $32.;
set _&VAR.;
nome_var="&VAR.";
run;
%IF %SYSFUNC(exist(stat)) %THEN %DO;
data stat;
set stat(where=(nome_var ne "&VAR."))
_&VAR.;
run;
%END;
%ELSE %DO;
data stat;
set _&VAR.;
run;
%END;
proc datasets lib=work noprint;
delete _&VAR.;
quit;
%MEND MEANS;
%MEANS(VAR= uti_acc_cassa_3m );
%MEANS(VAR= uti_acc_cassa_6m );
%MEANS(VAR= uti_acc_firma_3m );
%MEANS(VAR= uti_acc_firma_6m );
%MEANS(VAR= uti_acc_oper_cassa_3m );
%MEANS(VAR= uti_acc_oper_cassa_6m );
%MEANS(VAR= uti_acc_oper_firma_3m );
%MEANS(VAR= uti_acc_oper_firma_6m );
%MEANS(VAR= sco_uti_cassa_3m );
%MEANS(VAR= sco_uti_cassa_6m );
%MEANS(VAR= sco_uti_firma_3m );
%MEANS(VAR= sco_uti_firma_6m );
%MEANS(VAR= sco_mar_oper_cassa_3m );
%MEANS(VAR= sco_mar_oper_cassa_6m );
%MEANS(VAR= sco_mar_oper_firma_3m );
%MEANS(VAR= sco_mar_oper_firma_6m );
%MEANS(VAR= sco_mar_acc_cassa_3m );
%MEANS(VAR= sco_mar_acc_cassa_6m );
%MEANS(VAR= sco_mar_acc_firma_3m );
%MEANS(VAR= sco_mar_acc_firma_6m );
%MEANS(VAR= uti_acc_revoca_3m );
%MEANS(VAR= uti_acc_revoca_6m );
%MEANS(VAR= uti_acc_oper_revoca_3m );
%MEANS(VAR= uti_acc_oper_revoca_6m );
%MEANS(VAR= sco_uti_rev_scad_3m );
%MEANS(VAR= sco_uti_rev_scad_6m );
%MEANS(VAR= sco_mar_oper_rev_scad_3m );
%MEANS(VAR= sco_mar_oper_rev_scad_6m );
%MEANS(VAR= sco_mar_acc_rev_scad_3m );
%MEANS(VAR= sco_mar_acc_rev_scad_6m );
%MEANS(VAR= sco_scad_mar_oper_rev_3m );
%MEANS(VAR= sco_scad_mar_oper_rev_6m );
%MEANS(VAR= sco_acc_oper_scad_3m );
%MEANS(VAR= sco_acc_oper_scad_6m );
%MEANS(VAR= sco_acc_oper_mutui_3m );
%MEANS(VAR= sco_acc_oper_mutui_6m );
%MEANS(VAR= sco_scad_uti_cassa_3m );
%MEANS(VAR= sco_scad_uti_cassa_6m );
%MEANS(VAR= uti_acc_autoliq_3m );
%MEANS(VAR= uti_acc_autoliq_6m );
%MEANS(VAR= sca_acc_autoliq_3m );
%MEANS(VAR= sca_acc_autoliq_6m );
%MEANS(VAR= sca_uti_autoliq_3m );
%MEANS(VAR= sca_uti_autoliq_6m );
%MEANS(VAR= impag_scad_3m );
%MEANS(VAR= impag_scad_6m );
%MEANS(VAR= uti_cassa_imp_gar_3m );
%MEANS(VAR= uti_cassa_imp_gar_6m );
%MEANS(VAR= pres_anomalie_gravi_3m );
%MEANS(VAR= pres_anomalie_gravi_6m );
%MEANS(VAR= pres_anomalie_lievi_3m );
%MEANS(VAR= pres_anomalie_lievi_6m );
%MEANS(VAR= garantiti_andament_3m );
%MEANS(VAR= garantiti_andament_6m );
%MEANS(VAR= segnalazione_cc_3m );
%MEANS(VAR= segnalazione_cc_6m );
%MEANS(VAR= uti_acc_cassav_3m );
%MEANS(VAR= uti_acc_firmav_3m );
%MEANS(VAR= ut_cassa_firmav_3m );
%MEANS(VAR= uti_acc_revocav_3m );
%MEANS(VAR= ac_sca_e_rev_scdv_3m );
%MEANS(VAR= ut_sca_ut_rev_scdv_3m );
%MEANS(VAR= ENTI_SEGNALANTIv_3m );
%MEANS(VAR= RICHIESTE_PIv_3m );
%MEANS(VAR= imp_gar_uti_cassav_3m );
%MEANS(VAR= uti_acc_cassav_var_3_6 );
%MEANS(VAR= uti_acc_firmav_var_3_6 );
%MEANS(VAR= ut_cassa_firmav_var_3_6 );
%MEANS(VAR= uti_acc_revocav_var_3_6 );
%MEANS(VAR= ac_sca_e_rev_scdv_var_3_6 );
%MEANS(VAR= ut_sca_ut_rev_scdv_var_3_6 );
%MEANS(VAR= ENTI_SEGNALANTIv_var_3_6 );
%MEANS(VAR= RICHIESTE_PIv_var_3_6 );
%MEANS(VAR= imp_gar_uti_cassav_var_3_6 );
proc datasets lib=MDL_RTG;
contents data=LONG_LIST_CR order=varnum nodetails;
run;
/***************************************************************************/
/***************************************************************************/
/**************************** FINE INDICATORI ******************************/
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/
/**************************** FINE INDICATORI ******************************/
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/
/**************************** FINE INDICATORI ******************************/
/***************************************************************************/
/***************************************************************************/

Potrebbero piacerti anche