Soma com condição no SAS: Agrupamentos com Proc Sql

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;

3 comentários em “Soma com condição no SAS: Agrupamentos com Proc Sql”

Deixe um comentário

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