2015-09-07 4 views
-3

У меня есть следующий набор данных:PROC SQL SAS ПРОГРАММИРОВАНИЕ

Name Address   Bank_Account Ph_NO IP_Address Chargeoff 
AJ 12 ABC Street  1234  369  12.12.34   0 
CK 12 ABC Street  1234  450  12.12.34   1 
DN 15 JMP Street  3431  569  13.8.09   1 
MO 39 link street 8421  450  05.67.89   1 
LN 12 ABC Street  1234  340  14.75.06   1 
ST 15 JMP Street  8421  569  13.8.09   0` 

Использование этого набора данных Я хочу создать ниже вид в SAS:

Name CountOFAddr CountBankacct CountofPhone CountOfIP CountCharegeoff 
    AJ  3    3   1   2    2 
    CK  3    3   2   2    3 
    DN  2    1   2   2    1 
    MO  1    2   2   1    2 
    LN  3    3   1   1    2 
    ST  2    2   2   2    2 

Выходные переменные указывает, как следует:

-CountOfAddr: Для AJ countOFAddr равно 3, что означает, что AJ разделяет его адрес с самим собой, CK и LN

-CountBankAcct: Для подсчета МО BankAcct равно 2, что означает, что МО разделяет его номер банковского счета с самим собой и ST . Аналогично для переменных CountofPhone и CountOfIP.

-CountChargeoff: Это один немного сложнее это в основном означает, что AJ связан с CK И LN через адрес ... и как CK и LN были списаны так countChargeoff для AJ равен 2.

Для CKcountChargeOff является 3, потому что она связана с самим собой, MO через банковский счет, и LN/AJ через адрес ... так общая chargeoff в CK's Сеть Количество 3 (сО AJ+CO графа CK+CO графа MO+CO графа LN)

В настоящее время я работаю аналитиком рисков в финансовой службе, и код этой проблемы может помочь нам значительно сократить финансирование мошеннических счетов.

Спасибо.

+0

Вы знаете, как создать представление в SAS? Или просто нужна помощь с SQL? Поле 'Charge off' is not clear –

+0

Да, зарядка не имеет смысла. Все остальное - это тривиальный 'select count (*) from ... where bank_account = ...' например – Blindy

+0

Чтобы придерживаться правил SO, вы должны опубликовать то, что вы пробовали, это не служба написания кода. – Reeza

ответ

1

SQL Fiddle Demo

SELECT 
    Name, 
    (SELECT Count(Address) 
    FROM dataset d2 
    WHERE d1.Address = d2.Address 
    ) CountOFAddr, 

    (SELECT Count(Bank_Account) 
    FROM dataset d2 
    WHERE d1.Bank_Account = d2.Bank_Account 
    ) CountBankacct, 

    (SELECT Count(Ph_NO) 
    FROM dataset d2 
    WHERE d1.Ph_NO = d2.Ph_NO 
    ) CountofPhone, 

    (SELECT Count(IP_Address) 
    FROM dataset d2 
    WHERE d1.IP_Address = d2.IP_Address 
    ) CountOfIP, 

    (SELECT count(d2.Chargeoff) 
    FROM dataset d2 
    WHERE d1.name <> d2.name 
     and ( d1.Address = d2.Address 
      or d1.Bank_Account = d2.Bank_Account 
      or d1.Ph_NO = d2.Ph_NO 
      or d1.IP_Address = d2.IP_Address 
      ) 
    ) CountCharegeoff   
FROM dataset d1 

I Включите заряда с вычислением.

Принесите все d2 <> d1.name, где есть какое-либо общее поле. Тогда посчитайте это.

+0

I Включите калькуляцию оплаты. И включить скрипку –

+0

Почему downvote? –

+1

Я не делал ни единого голоса, но я думаю, это потому, что нет никаких объяснений и возможных, потому что ОП не публиковал никаких попыток, так что это не действительный SO, на который нужно ответить. – Reeza