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/
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.
Ready to level-up your skills? Choose your own adventure.