good evening. I'm having an issue builiding a code with several IF THEN DO statements and also with the LAG function. I'm using the SAS Enterprise Guide tool and coding in SQL.
The goal of the code is to classify deposits made in ATM's as 'logged deposits', 'deposits in it's own account' and 'non-logged deposits'
The classification ocurrs in the DETALHE column.
When CHAVE = lag(CHAVE) and we have a deposit after a login (DES_TRANS column), we have a 'deposit in it's own account'.
When CHAVE not equal lag(CHAVE) we need to take a look at the column 'TEMPO' wich means TIME. If TIME it's smaller than 200 seconds (means timeout), we have a 'logged deposit'. If it's bigger than 200 seconds, a 'non-logged deposit.'
The issue is when we have sucessive deposits and we need to use the value that was classified by the firsts IF-THEN statements (i'm using LAG(DETALHE) for that).
First, the code wasn't classifying all lines. Lines 287 and 288 for example.
I solved that with a RETAIN statement. Now, it's just not giving the correct output
I expect the output of line 490 to be 'Depósito Não-Logado'.
FORMAT DETALHE $CHAR50.;
RETAIN DETALHE;
IF DES_TRANS ne 'Depósito' THEN DO DETALHE = ' '; END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Login' AND CHAVE = lag(CHAVE)) THEN DO DETALHE = 'Depósito na Própria Conta';END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Login' AND CHAVE ne lag(CHAVE) AND TEMPO <=200) THEN DO DETALHE = 'Depósito Logado';END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Login' AND CHAVE ne lag(CHAVE) AND TEMPO >=200) THEN DO DETALHE = 'Depósito Não-Logado';END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Depósito' AND lag(DETALHE) = 'Depósito Não-Logado') THEN DO DETALHE = 'Depósito Não-Logado';END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Depósito' AND lag(DETALHE) = 'Depósito na Própria Conta' AND CHAVE = lag(CHAVE)) THEN DO DETALHE = 'Depósito na Própria Conta';END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Depósito' AND lag(DETALHE) = 'Depósito na Própria Conta' AND CHAVE ne lag(CHAVE) AND TEMPO <=200) THEN DO DETALHE = 'Depósito Logado';END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Depósito' AND lag(DETALHE) = 'Depósito na Própria Conta' AND CHAVE ne lag(CHAVE) AND TEMPO >=200) THEN DO DETALHE = 'Depósito Não-Logado';END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Depósito' AND lag(DETALHE) = 'Depósito Logado' AND TEMPO <=200) THEN DO DETALHE = 'Depósito Logado';END;
IF (DES_TRANS = 'Depósito' AND lag(DES_TRANS) = 'Depósito' AND lag(DETALHE) = 'Depósito Logado' AND TEMPO >=200) THEN DO DETALHE = 'Depósito Não-Logado';END;
RUN;
Aucun commentaire:
Enregistrer un commentaire