Utilizando as informações do post Como combinar tabelas no SAS utilizando left join e full join, vamos imaginar que não tenhamos apenas duas tabelas, mas sim três, sendo que a terceira tabela contém as notas dos alunos que cursam Física:
Para montar uma única query que traga a nota de física, basta continuar o left join:
* notas dos alunos de calculo incluindo as de fisica dos que fizeram;
proc sql;
create table exemplo_left_join as
select a.*, b.nota_estat, c.nota_fis
from turma_calc as a
left join (select * from turma_estat ) as b
on a.nome = b.nome
left join (select * from turma_fis) as c
on a.nome= c.nome;
run;
E você poderia inclusive filtrar antes de aplicar o left join. Como?
Bem, para quem leu o post SQL dentro do SAS sobre SQL fica bem claro o que foi feito acima: foi aplicado um left join em uma base construída entre parênteses. Ou seja, se para extrair as informações da turma de Física usamos select * from turma_fis, pra extrair os alunos aprovados na disciplina bastaria utilizar select * from turma_fis where Nota_Fis >= 6, teríamos então:
* excluindo os alunos reprovados em fisica;
proc sql;
create table exemplo_left_join_2 as
select a.*, b.nota_estat, c.nota_fis
from turma_calc as a
left join (select * from turma_estat ) as b
on a.nome = b.nome
left join (select * from turma_fis where Nota_Fis >= 6) as c
on a.nome= c.nome;
run;
Agora que você sabe extrair informações utilizando o SQL e sabe que você pode fazer o que quiser dentro do parênteses antes de aplicar o left join, você poderia inclusive ser mais ousado e criar uma marcação de alunos aprovados, onde o campo Aprovado receberia 1 quando o aluno tem nota superior ou igual a 6 e 0 caso contrário:
* cria uma flag = 1 para trazer quem foi aprovado em fisica e estatistica;
proc sql;
create table exemplo_left_join_3 as
select a.*, b.Aprovado_Estat, c.Aprovado_Fis
from turma_calc as a
left join (
select *, case when Nota_Estat >= 6 then 1
else 0 end as Aprovado_Estat from turma_estat ) as b
on a.nome = b.nome
left join (
select *, case when Nota_Fis >= 6 then 1
else 0 end as Aprovado_Fis from turma_fis) as c
on a.nome= c.nome;
run;
Muito útil esse blog. Houve a necessidade da criação de um processo específico na empresa, e a consulta que realizei aqui, foi muito útil. Parabéns ao futuro professor: Andre Yukio!
Obrigado Junior! Que bom que deu certo, espero poder continuar ajudando com mais posts aqui! Abs
Cara .. Suas dicas são simplesmente sensacionais ..
Minha empresa tem o SAS e suas dicas estão contribuído muito em meu desenvolvimento..
Dê mais dicas relacionadas ao PROC SQL, Sumarizacao de dados e funções no SAS ..
Muito obrigado pelo conhecimento compartilhado
Olá Marcelo! Que bom que você gostou, espero poder continuar te ajudando. Vou passar mais dicas dessas sim, pode deixar! Abraços!