O group by é um método bem tranquilo de agrupar os valores de uma coluna de acordo com os valores de outra coluna. Veja os três exemplos abaixo, onde queremos primeiro saber qual o número de vendas de cada marca, o número de vendas por estado e o número de vendas de cada marca em cada estado:
PROC SQL; CREATE TABLE VENDAS_P_MARCA AS SELECT MARCA, SUM(VENDAS) AS VENDAS FROM TABELA_VENDAS GROUP BY 1; RUN;
PROC SQL; CREATE TABLE VENDAS_P_ESTADO AS SELECT ESTADO, SUM(VENDAS) AS VENDAS FROM TABELA_VENDAS GROUP BY 1; RUN;
PROC SQL; CREATE TABLE VENDAS_P_ESTADO_MARCA AS SELECT MARCA, ESTADO, SUM(VENDAS) AS VENDAS FROM TABELA_VENDAS GROUP BY 1,2; RUN;
Agora, suponha que a tabela seja um pouco mais ampla, contendo também a data em que as vendas foram feitas. Seja para fazer uma análise exploratória acompanhando a evolução das vendas, ou para fazer um modelo de séries temporais, por estado, você não conseguirá usar o group by, é aí que entra o case when. Geralmente utilizamos o case when como um if… then… e as condições. Para fazer uma interação com a soma, você talvez estranhe a sintaxe, mas é bem simples de entender visualizando a tarefa:
**** SOMA COM CONDICAO E AGRUPA *****; PROC SQL; CREATE TABLE VENDAS_MARCA_FINAL AS SELECT MARCA, DATA SUM (CASE WHEN ESTADO = "SP" THEN VENDAS ELSE 0 END) AS VENDAS_SP, SUM (CASE WHEN ESTADO = "RS" THEN VENDAS ELSE 0 END) AS VENDAS_RS, SUM (CASE WHEN ESTADO = "AM" THEN VENDAS ELSE 0 END) AS VENDAS_AM, SUM (CASE WHEN ESTADO = "GO" THEN VENDAS ELSE 0 END) AS VENDAS_GO, SUM (CASE WHEN ESTADO = "RJ" THEN VENDAS ELSE 0 END) AS VENDAS_RJ FROM TABELA_VENDAS GROUP BY 1,2; QUIT;
Existe equivalente dessa função no R?
Fala, Fernando! Desculpe a demora, mas existe sim.
Se liga nesse link: https://dplyr.tidyverse.org/reference/group_by.html