2014-07-16 6 views
0

SQL에 익숙하지 않습니다. 도움을 받으십시오.그룹 별 개별 레코드에 대한 SQL 쿼리 조작

ID account bad amount 
1 100  1 1000 
1 10001 0 0 
2 211  0 0 
2 21101 1 700 
2 21102 0 0 
5 123  0 0 
5 12301 0 0 
5 12302 1 100 
3 111  0 0 
3 11102 0 0 
4 1213  1 600 
4 121302 1 700 

내가 싶어 출력은 다음과 같습니다하십시오 ID를 위해, 그것은 mulptile 계정 (부모 계정을 가질 수 있고 :

ID account bad amount 
1 100 1 1000 
2 21101 1 700 
4 1213 1 600 

여기 규칙 즉 나는 같은 테이블이 하위 계정은 상위 계정 ID에 '01'또는 '02'또는 '03'....). 상위 계정은 '01'또는 '02 또는 '03'로 끝나지 않습니다. 그래서 ID에 대해 나쁜 것으로 정의됩니다 (불량 = 1)

1) if its parent account is bad 
2) else if sub account is bad with amount > 500 
3) for parent account and sub account both are bad, take parent account. 

감사합니다.

+1

스택 오버플로에 오신 것을 환영합니다. 그러나 사이트는 무료 서비스를위한 코드가 아닙니다. 자신의 코드에 대한 도움이 필요한 경우 지금까지 수행 한 작업 (코드 또는 리서치)을 보여 주어야하며 여기에서 직접 지시 할 수 있습니다. – indivisible

+0

'proc sql' 또는 특정 데이터베이스를 사용하고 있습니까? –

+0

예. proc SQL; – user3845799

답변

0

PROQ SQL 프로 시저를 사용하여이 질문을 받았지만이를 수행하는 방법을 모르겠습니다. 그러나, 나는 약간의 코드를 데이터 사용 단계를 사용하여 썼다.

희망이 도움이됩니다.

proc sort data=input_dataset; 
    by ID; 
run; 

data step1; 

    set input_dataset; 

    account2 = compress(put(account,8.)); 
    length_acc = length(compress(put(account,8.))); 
    if length_acc >= 2 then 
     last_two = substr(account2, length_acc-1, 2); 

    if last_two IN ("01", "02", "03") then 
     parent_acc = "N"; 
    else parent_acc = "Y"; 

    if parent_acc = "Y" and bad = 1 then 
     score = 0; 

    else if parent_acc = "N" and bad = 1 and amount >= 500 then 
     score = 0; 

    else score = 1000; 

run; 


proc sort data=step1; 
    by ID score descending parent_acc; 
run; 


data step2; 
    set step1; 
    by ID; 
    if first.ID and score = 0 then 
     output; 
    keep ID account bad amount; 
run;