Hello
I would like to calculate PSI stability index for the following data.
May anyone show the code in SAS to calculate it.
PCT_DEV is percentile of customers in category from all customers (Development time)
PCT_last is percentile of customers in category from all customers (last time)
Data have;
input category PCT_Dev PCT_last;
cards;
1 0.9864649963 0.9923499412
2 0.0135350037 0.0076500588
;
Run;
/*********** Group=10 ****************/
data have;
input n min max n_good_real n_good_pred ;
cards;
0 406 468 24 20
1 470 484 45 42
2 485 495 43 48
3 496 508 64 66
4 509 520 80 78
5 521 531 80 84
6 532 544 85 84
7 545 556 89 87
8 557 571 97 95
9 572 624 93 96
;
run;
title 'Group=10';
proc sql;
create table temp as
select n label='组号',min label='最小得分' ,max label='最大得分',
n_good_real label='实际好客户个数',
n_good_pred label='预测好客户个数',
n_good_real/(select sum(n_good_real) from have) as A label='实际好客户占比 A' format=percent7.2,
n_good_pred/(select sum(n_good_pred) from have) as E label='预测好客户占比 E' format=percent7.2,
calculated A - calculated E as A_E label='A-E',
log(calculated A/calculated E) as logAE label='LOG(A/E)' ,
calculated A_E *calculated logAE as PSI
from have ;
select * from temp;
select sum(PSI) as PSI from temp;
select n_good_pred into : list separated by ' ' from have;
quit;
%put &list ;
title2 'Chi-Square Goodness-of-Fit Tests';
proc freq data=have order=data;
tables n / nocum chisq testf=( &list ) plots(only)=deviationplot(type=dotplot);
weight n_good_real;
run;
May you also show here ? Please direct the code to the example I sent,cheers
Hi,
I had never heard of Population Stability Index until your post, so I don't think I'd be best placed to assist.
I just Googled "PSI site:sas.com" and the first hit is the paper I sent in my post.
If the paper is not helpful then I would suggest you try performing other searches to get results from any site. Or even try posting to statistical forums here and elsewhere, or whatever PSI would be considered a sub-topic of.
If you have tried going through the paper and attempted a solution, but are getting errors then try posting the errors here to see if anyone else can help. Alternatively, are you able to ask a colleague of yours?
Lastly, I'm not sure if your confusion is over the general method of how to calculate PSI (which one can Google).
HTH.
Kind regards,
Amir.
/*********** Group=10 ****************/
data have;
input n min max n_good_real n_good_pred ;
cards;
0 406 468 24 20
1 470 484 45 42
2 485 495 43 48
3 496 508 64 66
4 509 520 80 78
5 521 531 80 84
6 532 544 85 84
7 545 556 89 87
8 557 571 97 95
9 572 624 93 96
;
run;
title 'Group=10';
proc sql;
create table temp as
select n label='组号',min label='最小得分' ,max label='最大得分',
n_good_real label='实际好客户个数',
n_good_pred label='预测好客户个数',
n_good_real/(select sum(n_good_real) from have) as A label='实际好客户占比 A' format=percent7.2,
n_good_pred/(select sum(n_good_pred) from have) as E label='预测好客户占比 E' format=percent7.2,
calculated A - calculated E as A_E label='A-E',
log(calculated A/calculated E) as logAE label='LOG(A/E)' ,
calculated A_E *calculated logAE as PSI
from have ;
select * from temp;
select sum(PSI) as PSI from temp;
select n_good_pred into : list separated by ' ' from have;
quit;
%put &list ;
title2 'Chi-Square Goodness-of-Fit Tests';
proc freq data=have order=data;
tables n / nocum chisq testf=( &list ) plots(only)=deviationplot(type=dotplot);
weight n_good_real;
run;
On this page there is a complete example with all the steps:
https://www.sasdesdecero.com/implementacion-en-sas-del-population-stability-index/
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.