SPSS:计算宏中多个变量的信息值

时间:2013-05-20 12:40:46

标签: spss

开发信用风险记分卡的第一步是评估哪些变量具有预测性。

为此,计算变量的信息值。在Excel中它很简单: 信息价值是iv * 1000的总和。 IV =祸*(%用品 - %BADS) 祸= LN(%商品/ BADS%)

因此,在下面的例子中,我的变量有3个值(1,2,3)。 根据显示的分布,信息值的计算结果为22.738。

属性%总数百分比中的商品总数百分比 1 59%66%0.114653893 0.008 2 36%30%-0.168842887 0.009 3 5%4%-0.33749397 0.005 总计100%100% 22.738

在构建记分卡时,我会查看100到300个变量之间的任何变量,以找到最具预测性的变量。因此需要一个宏。 理想情况下,我还想自动将连续变量(例如收入)带入例如10个相等的带,以便信息值更有意义。

我在SAS中有一些代码来执行上述操作(然而,自动绑定是单独完成的)。我开始将其转换为SPSS语言,但我无法理解如何替换CALL SYMPUT行。 我希望有人能够轻松查看SAS代码并将其转换为SPSS。

这是SAS代码。

/* calculating total values for goods, bads and total */
/* the values are output to a data set and called later in a macro */

PROC MEANS DATA=test NOPRINT MAXDEC=4;              
VAR GOOD BAD ;                        

OUTPUT OUT=TOTALS SUM = GTC BTC ;              
RUN;

DATA TOTALS;                                              
SET TOTALS;                                              

TTC = SUM(OF GTC BTC);                                

CALL SYMPUT('GTC',GTC);                                   
CALL SYMPUT('BTC',BTC);                                   
CALL SYMPUT('TTC',TTC); 
run;

/* Calculation of information value */

%macro infov(var);

PROC SUMMARY DATA=test;                        
CLASS &var;                                        
VAR GOOD BAD ;                                        
OUTPUT OUT=RESULTS SUM=GC BC;                             
RUN;

DATA RESULTS;                                            
SET RESULTS;                                             
BY &var;                                               

IF _TYPE_=1;                                             

IF GC=. THEN GC=0;                                      
IF GC NE 0 THEN GP= GC/&GTC*100;                        
ELSE GP=0;                                              
GCP + GP;                                               

IF BC=. THEN BC=0;                                      
IF BC NE 0 THEN BP= BC/&BTC*100;             
ELSE BP=0;                                   
BCP + BP;                                    

format iv&var 5.2;                          
iv&var=0;
IV&var=(GP-BP)*log(GP/BP);

run; 

PROC MEANS DATA=results NOPRINT MAXDEC=4;              
VAR iv&var;                        
OUTPUT OUT=iv&var SUM = ivTC&var;              
RUN;

DATA IV&VAR (KEEP = &VAR); SET IV&VAR; 
RENAME IVTC&VAR=&VAR;
RUN;


%mend infov;
%infov(app_1_age);
%infov(app_1_employment_status);
%infov(app_1_marital_status);



DATA ALL; MERGE IV:;
RUN;

PROC TRANSPOSE DATA=ALL OUT=ALL;  RUN;
DATA ALL; SET ALL; RENAME COL1=iv _name_=Variable; RUN;
PROC SORT DATA=ALL;
BY DESCENDING iv;
RUN; 
PROC PRINT; 
title 'Information Value';RUN;

谢谢。 伊丽莎白

1 个答案:

答案 0 :(得分:1)

SPSS Statistics中的类似基本功能是用于创建宏定义的DEFINE命令,但是通过使用Python可编程性,您将获得更多的灵活性和强大功能。 Python Essentials可以通过SPSS社区网站(www.ibm.com/developerworks/spssdevcentral)免费下载,或者对于Statistics V21,可以从您下载Statistics本身的网站免费下载。

从同一站点,您可以从书籍和文章部分下载编程和数据管理书籍。它显示了很多在SPSS上下文中使用此技术的示例。完整的api文档可从IBM信息中心获得,该信息中心已在网站上添加了书签。

甚至可以使用Python可编程性来创建宏,以便以后的代码可以使用内置的宏工具。

HTH, 乔恩佩克