TUTORIAL: PROC FREQ NO SAS

Sempre que você for trabalhar com bases grandes, você provavelmente não vai conseguir dizer o que está dentro daquela base e/ou entender se seus dados fazem sentido, somente olhando para o analítico da base. Uma das formas de se analisar o conteúdo de uma base, é verificando as frequências com que aparecem algumas informações. Verificar a frequência é importante não só para validação das informações, como também para se obter insumos para tomada de decisão. No SAS, a principal forma de se obter as frequências é através do proc freq. Vamos verificar quais as diferentes formas de se usar este comando.

SINTAXE: A sintaxe mais básica do proc freq é muito simples:

proc freq data= nome_da_tabela;
tables variavel_1 variavel_2 ... variavel_n;
run;

FREQUÊNCIA SIMPLES: Vamos aplicar agora o exemplo para saber quantos clientes temos por estado, sexo e forma de pagamento:

/*CRIA UMA TABELA DE EXEMPLO*/
DATA EXEMPLO;
    INPUT ID $ ESTADO $ SEXO $ FORMA_PAGTO $;  
    CARDS;
AA123 SP M DINHEIRO
BB001 MG F CREDITO
AA010 BA M DEBITO
AA003 BA F CREDITO
AA004 SP F CREDITO
AA006 BA F DINHEIRO
BB002 BA F CREDITO
CC333 BA F DEBITO
DD444 SP M DINHEIRO
EE441 MG F CREDITO
EE332 SP F CREDITO
EE114 MG F DINHEIRO
. MG F CREDITO
. PE M CREDITO
AA009 BA M CREDITO
AA111 PE F DINHEIRO
PP154 GO F CREDITO
PP888 GO F CREDITO
DD009 BA M CREDITO
DD111 PE F DINHEIRO
EF154 GO F CREDITO
DD888 GO F CREDITO
;
RUN;

/*OBTEM A FREQUENCIA DAS VARIAVEIS*/
PROC FREQ DATA = EXEMPLO;
TABLES ESTADO SEXO FORMA_PAGTO;
RUN;

Simples, certo?

FREQUÊNCIA CRUZADA: Mas você deve estar se perguntando: e se eu quiser obter a frequência cruzada? E se eu precisar saber qual a forma de pagamento por estado? Ou saber a distribuição dos meus clientes por sexo em cada estado?

É bem simples, basta acrescentar o asterisco entre as variáveis que você deseja cruzar. No comando abaixo, obtemos a frequência da variável sexo e forma de pagamento, por estado:

PROC FREQ DATA = EXEMPLO;
TABLES SEXO*ESTADO FORMA_PAGTO*ESTADO;
RUN;

ESCOLHENDO QUAIS INFORMAÇÕES QUER APRESENTAR: Ok, agora já sabemos como obter a frequência e como obter a frequência cruzada. No entanto, estamos trazendo muitas informações que talvez esteja confundindo e deixando nossos outputs com muito mais do que o necessário. Talvez a gente não precise do percentual acumulado, ou das informações de percentual de linha e coluna. Sendo assim, podemos inserir alguns argumentos que vão omitir estas informações. É bem intuitivo, traduzindo direto do inglês, sabemos que no é não, row é linha. Então, inserimos o norow para omitir os percentuais de linha:

PROC FREQ DATA = EXEMPLO;
TABLES SEXO*ESTADO FORMA_PAGTO*ESTADO / norow;
RUN;

Podemos também omitir os percentuais de coluna (nocol) e gerais (nopercent):

PROC FREQ DATA = EXEMPLO;
TABLES SEXO*ESTADO FORMA_PAGTO*ESTADO / norow nocol nopercent;
RUN;

GERANDO UMA TABELA DE SAÍDA: Para facilitar, seja porque você quer exportar estas tabelas mais facilmente para um Excel ou porque você quer usar as informações para fazer cruzamentos, você pode gerar uma tabela de saída no próprio SAS, utilizando o argumento out. No código abaixo, vamos criar uma nova tabela no SAS com o nome tabela_frequencia:

PROC FREQ DATA = EXEMPLO;
TABLES SEXO*UF FORMA_PAGTO*UF 
/ norow nocol nopercent out=tabela_frequencia;
RUN;

ANÁLISES TRIDIMENSIONAIS (3 VARIÁVEIS): Se você quiser ver o comportamento de três variáveis em conjunto, você tem duas opções: utilizar o agrupamento por variável (comando by) ou fazer uma frequência com 3 variáveis interagindo entre si. Primeiro, vamos ver como a variável sexo se relaciona com a forma de pagamento, isto é, se os homens e as mulheres têm preferências diferentes na forma de pagar. Mas como esta preferência pode ser algo cultural, vamos ver como ela se dá em cada estado:

/*ORDENAMOS A TABELA POR ESTADO*/
PROC SORT DATA= EXEMPLO;
BY ESTADO;
RUN;

/*GERAMOS A FREQUENCIA*/
PROC FREQ DATA = EXEMPLO;
TABLES SEXO*FORMA_PAGTO / norow nocol nopercent;
by ESTADO;
RUN;

Resultado semelhante sairia do seguinte comando:

PROC FREQ DATA = EXEMPLO;
TABLES ESTADO*SEXO*FORMA_PAGTO / norow nocol nopercent;
RUN;

VALORES ÚNICOS: Se você quiser saber quantos por valores únicos você tem por variável, acrescente nlevels. No nosso caso, sabemos que temos somente dois tipos de sexo na base, 3 formas de pagamento e 5 estados:

PROC FREQ DATA = EXEMPLO nlevels;
TABLES SEXO FORMA_PAGTO ESTADO/ norow nocol nopercent;
RUN;

VARIÁVEIS MISSING: Note que somente os IDs possuem valores missing na nossa base inicial. Vamos criar uma nova, dessa vez com alguns valores missing para ESTADO. Veja como muda nosso proc freq:

DATA EXEMPLO;
    INPUT ID $ ESTADO $ SEXO $ FORMA_PAGTO $;

    CARDS;
AA123 SP M DINHEIRO
BB001 MG F CREDITO
AA010 BA M DEBITO
AA003 BA F CREDITO
AA004 SP F CREDITO
AA006 . F DINHEIRO
BB002 BA F CREDITO
CC333 BA F DEBITO
DD444 . M DINHEIRO
EE441 MG F CREDITO
EE332 SP F CREDITO
EE114 . F DINHEIRO
. MG F CREDITO
. PE M CREDITO
AA009 BA M CREDITO
AA111 PE F DINHEIRO
PP154 GO F CREDITO
PP888 GO F CREDITO
DD009 BA M CREDITO
DD111 PE F DINHEIRO
EF154 GO F CREDITO
DD888 GO F CREDITO
;
RUN;

PROC FREQ DATA = EXEMPLO;
TABLES ESTADO ;
RUN;

Agora, temos os valores missing apresentados. Porém, se fazemos uma frequência cruzada, veja o que acontece:

PROC FREQ DATA = EXEMPLO;
TABLES ESTADO * SEXO;
RUN;

Neste caso, o missing aparece separado e não é incluído na análise. Mas pode ser de seu interesse saber o sexo dos indivíduos que não possuem a informação de estado. Para isso, inclua o argumento missing logo depois da barra invertida:

PROC FREQ DATA = EXEMPLO;
TABLES ESTADO * SEXO / missing;
RUN;

Agora já sabemos que temos duas pessoas do sexo feminino e uma do sexo masculino, dentre as 3 que não tiveram o campo estado marcado.

ANÁLISE GRÁFICA: Para encerrar, algo que eu acho muito útil e quase não vejo, é a análise gráfica da frequência. Sabemos que boa parte das pessoas são muito mais visuais, por isso, por que não criar gráficos das frequências obtidas? A sintaxe é muito simples, basta acrescentar o plots = freqplot logo depois de inserir a barra invertida (sem se esquecer de chamar ODS GRAPHICS ON):

ODS GRAPHICS ON;
PROC FREQ DATA= EXEMPLO ORDER=FREQ;
TABLES ESTADO / PLOTS=FREQPLOT (TYPE=BAR SCALE=PERCENT);
RUN;
ODS GRAPHICS OFF;

É isso aí. Espero não ter deixado nada relevante de fora, mas se você sentir falta de algo, deixe um comentário ou me escreva um e-mail. É sempre bom receber feedbacks!

Abraços e bons estudos!

4 comentários em “TUTORIAL: PROC FREQ NO SAS”

Deixe um comentário

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