Como unir tabelas no SAS?

Todo mundo precisa, cedo ou tarde – e normalmente cedo -, juntar duas bases no SAS. Conforme já expliquei em Como combinar tabelas no SAS utilizando left join e full join e Combinando três tabelas com o left join, você pode utilizar os joins do SQL dentro do SAS e combinar as tabelas. Entretanto, há ainda uma forma de fazer isso dentro do data step.

Mas por que você faria isso?

Bom, o mais comum é que você às vezes quer utilizar outras funções na hora de juntar as bases. Se você não sabe essas funções no proc sql, você teria que acrescentar mais passos no seu script ou ficar procurando como fazer o comando dentro do proc sql. Parece besteira, mas a verdade é que isso pega bastante no dia a dia.

Outra vantagem é que o data step tende a ser mais rápido que o proc sql. Sendo assim, você pode ter um ganho de tempo, dependendo do quão pesado for o processo.

Exemplo: Você tem uma tabela A com um campo id de identificação dos clientes, o campo uf contendo a Unidade Federativa, o saldo em conta e o ddd do telefone destes clientes. Em uma tabela B você possui além do campo id, a idade e o telefone dos mesmos clientes. Como você pode trazer a informação da tabela B para a sua tabela A?

 /*Cria tabela exemplo*/
data tabela_A;
     input id $ uf $ saldo ddd;
     cards;
12531 SP 2314 11
41456 SP 323.5 11
12531 SP 220.123 11
12531 MG 100 31
55564 GO 55 62
97943 PR 354 41
88712 PR 12.444 41
88712 SP 11.001 11
;
run;

data tabela_B;
     input id $ idade tel;
     cards;
12531 55 99999999
41456 32 98888888
55564 20 97777777
97943 65 96666666
88712 80 95555555
;
run;

O que você busca é a seguinte tabela:


Para chegar nela há três passos simples:

  1. Ordenar a tabela A de acordo com o campo utilizado para união;
  2. Ordenar a tabela B de acordo com o campo utilizado para união;
  3. Utilizar o comando merge identificando a variável comum às tabelas a frente do by.

O código ficará assim:

proc sort data =tabela_a; 
    by id; 
run;

proc sort data =tabela_b; 
    by id; 
run;

data une_tabelas;
     merge tabela_a tabela_b;
     by id;
run;

Se você quiser na hora da união já colocar algum comando, é tranquilo, basta escrever o comando da mesma forma que você escreveria com um data step tradicional. No exemplo abaixo, criamos um campo com o número de telefone completo (ddd da tabela A + telefone da tabela B):

proc sort data =tabela_a; 
    by id; 
run;

proc sort data =tabela_b; 
    by id; 
run;

data une_tabelas_cria_tel;
     merge tabela_a tabela_b;
     by id;
     tel_completo = cats(ddd, '-', tel);
run;

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *