É 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:
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:
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;
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;
Agora, vamos supor que você possui uma tabela diferente, com várias linhas inteiramente duplicadas:
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;
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:
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;
Muito bom artigo, parabéns!!
Obrigado, Clodoaldo!
Fantástico, obrigado por compartilhar!!!!