2013-05-20 2 views
1

Первым шагом в процессе разработки системы показателей кредитного риска является оценка переменных, которые являются прогностическими.SPSS: вычисление информационного значения для нескольких переменных в макросе

Для этого рассчитывается информационное значение переменной. В Excel это довольно просто: Information Значение представляет собой сумму iv * 1000. IV = горе * (% товары-% антитовары) горе = п (% Товары /% антитовары)

Таким образом, в приведенном ниже примере моих переменных имеет 3 значения (1,2,3). На основании показанного распределения значение информации составляет 22,738.

Атрибуты% антитовары из Всего% товаров от общего WOE IV 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; 

спасибо. Elisabeth

ответ

1

Аналогичная базовая функция в статистике SPSS будет командой DEFINE для создания определения макросов, но вы получите гораздо большую гибкость и мощность, используя программирование на Python. Python Essentials - бесплатная загрузка через веб-сайт сообщества SPSS (www.ibm.com/developerworks/spssdevcentral) или, для статистики V21, с сайта, на котором вы сами загружаете статистику.

С этого же сайта вы можете загрузить книгу «Программирование и управление данными» из раздела «Книги и статьи». В нем показано много примеров использования этой технологии в контексте SPSS. Полная документация api доступна в Информационном центре IBM, который размещен на сайте.

Программируемость на Python может быть использована даже для создания макросов, чтобы более поздний код мог использовать встроенную функцию макроса.

НТН, Джон Пек

+0

Привет Джон, я буду смотреть в модуль Python; это было упомянуто ранее, но у нас нет доступа к нему в данный момент. Мне удалось использовать макросы в SPSS, но я застрял в попытке написать эквивалент части CALL SYMPUT, которая в основном хранит общую сумму товаров и ошибок в макропеременной, которая может быть использована позже в программе. Я попытался использовать Define в соответствии с другими примерами, которые я нашел в Интернете, но это просто не сработало. Есть ли у вас какие-либо предложения по этому поводу? Затем я могу попытаться продолжить перевод кода. Спасибо. – Enucera

Смежные вопросы