Filtro e Criação de Variáveis com IF no SAS

O if é provavelmente o comando mais utilizado no SAS, junto com o JOIN (ou MERGE para os fãs de data step). Isso tudo porque é ele que vai te ajudar a fazer filtros, criar alguma variável de acordo com uma condição, criar mútiplas variáveis de acordo com uma condição ou até criar múltiplas variáveis de acordo com múltiplas condições.

Primeiro, vamos criar uma tabela que será usada como exemplo:

DATA EXEMPLO;
    INPUT ID $ UF $ VLR_COMPRA;
    CARDS;
AA123 SP 1000
BB001 MG 1500
AA010 BA 1650
AA003 BA 1900
AA111 SP 1520
ZZ555 PE 1575
DD888 BA 1800
AA111 PE 10000
;
RUN;

Agora, vamos usar o if para filtrar clientes da Bahia:

DATA EXEMPLO_FILTRO;
    SET EXEMPLO;
    IF UF = "BA";
RUN;

Outra coisa que pode ser feita, é filtrar clientes da Bahia, cujo valor da compra tenha sido maior que 1700 reais. Ou seja, vamos filtrar usando múltiplas condições:

DATA EXEMPLO_FILTRO;
    SET EXEMPLO;
    IF UF = "BA" AND VLR_COMPRA > 1700;
RUN;

Agora, vamos criar uma variável para indicar que clientes da Bahia, cuja compra tenha sido maior que 1700 reais, vão receber um desconto de 10% (~0,1). Ou seja, vamos dar duas condições (ser cliente da Bahia e ter compra maior que 1700 reais) para criar uma variável (desconto):

DATA EXEMPLO_FILTRO;
    SET EXEMPLO;
    IF UF = "BA" AND VLR_COMPRA > 1700 THEN
    desconto= 0.1;
RUN;

Por fim, vamos criar dois campos de acordo com duas condições. Para os clientes da Bahia, cuja compra tenha sido maior que 1700 reais, vamos criar um campo de desconto e outro para marcar que estes são clientes VIP. Para fazer isso, vamos utilizar o IF THEN DO. A sintaxe é simples, o IF e o THEN você já sabe oque faz, o primeiro dá a condição a ser seguida e o seguinte dá a ação a ser executada pelo SAS. O DO virá depois do THEN e será encerrado por ponto e vírgula. Em seguida, todas as condições serão escritas. Após isso, feche com END. Veja como criamos os campos desconto e cliente_VIP:

DATA EXEMPLO_FILTRO;
    SET EXEMPLO;
    IF UF = "BA" AND VLR_COMPRA > 1700 THEN 
    DO;
        desconto = 0.1;
        cliente_VIP = "SIM";
    END;
RUN;

Como não queremos ter campos missing, vamos complementar o código com o ELSE, atribuindo 0 para o desconto e NAO para o campo cliente_VIP de quem não atende aos requisitos:

DATA EXEMPLO_FILTRO;
    SET EXEMPLO;
    IF UF = "BA" AND VLR_COMPRA > 1700 THEN 
    DO;
        desconto = 0.1;
        cliente_VIP = "SIM";
    END;

    ELSE DO ;
        desconto = 0;
        cliente_VIP = "NAO";
    END;
RUN;

Espero que faça bom proveito desse código. Eu costumo usar com certa frequência. Lógico que está longe de ser um left join ou um where. Mas ainda assim, costuma ser útil.

Bons estudos!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s