Tratando Duplicidades no SAS

É comum encontrar campos duplicados em uma tabela. Seja porque algum join ou agrupamento que poderia ter sido melhor realizado (mesmo não trazendo informações erradas), por causa de algum erro de inserção da informação ou qualquer outra coisa. No SAS, há algumas maneiras práticas de tratar esse erro. Aqui você vai aprender a ordenar sua tabela com PROC SORT, exluir duplicidades com NODUPKEY, gerar uma tabela com os valores que estavam duplicados utilizando DUPOUT e excluir duplicidades por todos os campos com BY _ALL_.

Você pode excluir informações repetidas utilizando o proc sort combinado com o nodupkey. Para quem não conhece, proc sort serve para ordenar as variáveis de sua tabela. Utilizando o nodupkey, você vai ordenar mantendo apenas a primeira linha em que aparece a informação duplicada. Vamos observar a tabela cadastro onde temos o código de identificação dos clientes, uma marcação indicando se ele é um cliente VIP, uma coluna com o CEP cadastrado e a data de cadastramento do CEP:

duplicada_1

Primeiro, vamos ordenar de forma decrescente a data de cadastro, mantendo clientes cadastrados mais recentemente no topo:

*ORDENA TABELA;
proc sort data =cadastro; 
    by cliente descending data_cadastro; 
run;

O resultado é esse:

duplicada_2

Agora, podemos tirar a duplicidade do campo cliente. Ou seja, vamos manter apenas a primeira linha que aparece contendo o cadastro de cada cliente. A saída será a tabela cadastro_sem_dup:

*TIRA DUPLICIDADE POR CLIENTE;
proc sort data =cadastro out= cadastro_sem_dup nodupkey; 
    by cliente; 
run;

dup1

Veja que precisamos incluir o nome da tabela de saída após o out, caso contrário perderíamos nossa tabela original. E precisamos também incluir o nodupkey, que faz o justamente o que queremos, excluir duplicidades.

Agora, vamos supor que a tabela tenha outras colunas que, caso não tenham repetições, você as mantenha. Por exemplo, suponha que você queira guardar os itens duplicados para análises futuras. Para isso, basta você enviar os valores duplicados para outra tabela utilizando o dupout:

*GUARDA VALORES DUPLICADOS;
proc sort data =cadastro out= cadastro_sem_dup 
    dupout= valores_dup nodupkey; 
    by cliente; 
run;

dup2.JPG

Agora, vamos supor que você possui uma tabela diferente, com várias linhas inteiramente duplicadas:

duplicada_5

E você queira tirar duplicidade por todas as colunas (não apenas a primeira como em nossos primeiros exemplos), você apenas precisa especificar ao SAS que você quer tirar a duplicidade por todas as colunas com o _all_:

*EXCLUIR DUPLICIDADES POR TODAS COLUNAS;
proc sort data =tabela_exemplo out= tabela_exemplo_sem_dup nodupkey; 
    by _all_; 
run;

dup3

Uma última análise interessante que você pode fazer com seus dados é verificar quais valores aparecem duplicados e quais são únicos. Vejamos uma outra tabela de cadastro:

dup4

proc sort
     data = cadastro;
     by cliente;
run;

data tabela_var_unica tabela_var_dup;
     set cadastro;
     by cliente;
     if first.cliente and last.cliente
          then output tabela_var_unica;
     else output tabela_var_dup;
run;
dup5
Basicamente o código verifica se a primeira vez que o cliente aparece é também a última, se for, este cliente faz parte da saída tabela_var_unica, caso contrário, faz parte da saída tabela_var_dup. Veja que para utilizar o first e o last, seus dados precisam estar ordenados. Essa mesma expressão estava no post Contador e função oposta ao lag no SAS, recomendo você dar uma lida e se acostumar, é muito útil!

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s