Como já disse algumas vezes aqui, o SQL é uma linguagem própria para trabalhar com bases de dados. Logo, é de se esperar que alguns softwares utilizem funções semelhantes, ou até iguais, a ela. Isso porque (i) muitas pessoas que utilizam base de dados já estão acostumadas com o SQL, e (ii) é muito mais fácil se basear nessas funções já existentes do que ficar tentando criar algo novo mirabolante. O SAS, assim como outros softwares estatísticos Continuar a ler “Tutorial: Proc Sql (SAS)”
Etiqueta: create table
Introdução ao SQL
SQL (Structured Query Language) é a linguagem padrão utilizada para armazenar, manipular e recuperar informações de bancos de dados. Colocando de forma simples, é através do SQL que é possível criar e atualizar nossos dados através de um modelo relacional. Os maiores usuários da linguagem são os DBAs (Database Administrators), responsáveis por toda a gestão dos dados, desde criar tabelas até dar acesso às demais áreas (para os mais curiosos há um podcast brasileiro com foco nos DBAs chamado DatabaseCast).
Combinando três tabelas com 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;
* 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;
* 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;
Criando classes / categorias no SAS
Já expliquei no post Percentil – Conceito e Código SAS o que é percentil e como obtê-lo no SAS. Agora, uma coisa que é interessante, e eu precisei usar recentemente, é criar classes no SAS. Há uma forma bem direta de fazer isso através do proc rank. Porém, já havia um código mais “roots” para fazer isso e acho legal compartilhar. É interessante ver alternativas ao que já está preparado (outros softwares podem não ter o comando).
Para demonstrar melhor como criar classes, eu aumentei minha base de dados contendo as alturas dos indivíduos de uma amostra. Para não confundir com a tabela AMOSTRA, eu criei uma nova tabela chamada POPULACAO, contendo 60 alturas. O que vamos fazer no exemplo é criar uma coluna adicional na tabela com as letras de A a J indicando a qual percentil a altura do indivíduo pertence. Isso pode ser útil para obter dummies para regressões e até mesmo para tomar estatística descritiva dos indivíduos, e desse jeito é mais fácil do que utilizando o IF.
Para obter as classes, há dois passos:
- Primeiro você deve obter o valor de cada percentil, nesse exemplo, comecei do 10° percentil e utilizei intervalos de 10 em 10, mas você pode dividir como for melhor para sua análise:
proc univariate data= work.populacao;
var altura; output OUT=work.altura
pctlpre=p_altura_ pctlpts= 10 to 100 by 10;
run;
- Agora, vou utilizar o CASE WHEN, que é uma função para lidar com condições no SAS. Veja abaixo que a gente inicia o código com o proc sql seguido de ponto e vírgula como sempre, até aí nenhuma novidade. Em seguida ‘dizemos’ para o SAS criar uma tabela (create table) com o nome populacao_classes na nossa work. Como nós queremos gerar essa nossa nova base a partir da base populacao criada anteriormente, é preciso dizer ao SAS quais campos ele deve trazer da base original. O asterisco após o select indica que o SAS vai trazer todos os campos da base de origem, que no caso é a tabela populacao que está na work. Em seguida vem o case when, que dá o comando ao SAS para atribuir uma letra caso a altura do indivíduo esteja no percentil em questão:
proc sql;
create table populacao_classes as select *,
case
when altura <= (select p_altura_10 from work.altura) then 'A'
when altura <= (select p_altura_20 from work.altura) then 'B'
when altura <= (select p_altura_30 from work.altura) then 'C'
when altura <= (select p_altura_40 from work.altura) then 'D'
when altura <= (select p_altura_50 from work.altura) then 'E'
when altura <= (select p_altura_60 from work.altura) then 'F'
when altura <= (select p_altura_70 from work.altura) then 'G'
when altura <= (select p_altura_80 from work.altura) then 'H'
when altura <= (select p_altura_90 from work.altura) then 'I'
when altura <= (select p_altura_100 from work.altura) then 'J'
else 'outros'
end AS classe_altura
from work.populacao;
proc print;
run;
Para os que ainda estão com dúvidas, segue uma imagem para facilitar o entendimento (veja que as bases na imagem abaixo vão até a linha 25, e não até a linha 60 que é a última linha):