0% acharam este documento útil (0 voto)
31 visualizações290 páginas

PROG194

Enviado por

Alexandre Fukuda
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
31 visualizações290 páginas

PROG194

Enviado por

Alexandre Fukuda
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Programação SAS® 1:

Fundamentos

Course Notes
O Curso Notes Programação SAS® 1: Fundamentos, foi desenvolvido por Stacey Syphus e Beth
Hardin. Contribuições adicionais foram feitas por Bruce Dawless, Brian Gayle, Anita Hillhouse, Marty
Hultgren, Mark Jordan, Eva-Maria Kegelmann, Gina Repole, Gemma Robson, Samantha Rowland,
Allison Saito, Prem Shah, Charu Shankar, Kristin Snyder, Peter Styliadis, Su Chee Tay e Kitty Tjaris.
O Design, edição e suporte à produção foram providos pelo grupo Learning Design and
Development. Tradução Elias Tavares. Revisão ortográfica e Técnica por Gustavo Favaro.
SAS e todos os nomes de serviços e produtos do SAS Institute Inc. são marcas registras do SAS
Institute Inc. nos Estados Unidos e outros países. ® indica registro nos Estados Unidos.

Outras marcas e nomes de produtos são marcas registradas de suas respectivas companhias.

Course Notes Programação SAS® 1: Fundamentos

Copyright © 2018 SAS Institute Inc. Cary, NC, USA. Todos os direitos reservados. Impresso no
Brasil. Nenhuma parte dessa publicação pode ser reproduzida, armazenada em um Sistema de
recuperação ou transmitida, em qualquer forma o por qualquer meio, eletrônico, mecânico, de
fotocópia ou qualquer outro, sem permissão prévia por escrito, do editor, SAS Institute Inc.

Book code E71236, course code LWPG194/PG194, preparado em 21Set2018. LWPG194_001

ISBN 978-1-63526-923-9
Para Sua Informação iii

Tabela de Conteúdo

Para aprender mais .............................................................................................. vii

Capítulo 1 Introdução ................................................................................................... 1-1

1.1 O Processo da Programação SAS ........................................................................... 1-3


Demonstração: O Processo da Programação SAS ........................................... 1-6

1.2 Usando as Ferramentas de Programação SAS ..................................................... 1-11


Demonstração: Executando um programa SAS no SAS Enterprise Guide ..... 1-13

Demonstração: Executando um programa SAS no SAS Studio ..................... 1-15

Exercício ............................................................................................................ 1-18

1.3 Entendendo a Sintaxe do SAS ............................................................................... 1-29

Demonstração: Entendendo a Sintaxe da Progamação SAS ......................... 1-35


Demonstração: Entendendo e Resolvendo Erros de Sintaxe ......................... 1-38

1.4 Soluções .................................................................................................................. 1-42

Soluções das Atividades e Perguntas .............................................................. 1-42

Capítulo 2 Acessando os Dados ................................................................................. 2-1

2.1 Entendendo os Dados SAS ...................................................................................... 2-3

2.2 Acessando os Dados por meio de Libraries ........................................................... 2-12


Demonstração: Explorando as Libraries SAS Automáticas ............................. 2-19

Demonstração: Usando uma Library para acessar arquivos Excel ................ 2-22

2.3 Importando Dados para o SAS .............................................................................. 2-25

Demonstração: Importando um Arquivo CSV .................................................. 2-27

Exercícios .......................................................................................................... 2-31

2.4 Soluções .................................................................................................................. 2-34

Soluções dos Exercícos ................................................................................... 2-34


Soluções das Atividades e Perguntas ............................................................. 2-35
iv Para Sua Informação

Capítulo 3 Explorando e Validando Dados ................................................................. 3-1

3.1 Explorando os Dados ............................................................................................... 3-3


Demonstração: Explorando os dados com Procedures .................................. 3-10

Exercícios .......................................................................................................... 3-14

3.2 Filtrando Linhas ...................................................................................................... 3-18


Demonstração: Filtrando Linhas com Operações Básicas............................... 3-21

Demonstração: Filtrando Linhas Usando Variáveis Macro .............................. 3-29


Exercícios .......................................................................................................... 3-32

3.3 Formatando Colunas .............................................................................................. 3-35

Demonstração: Formatando Valores de Dados em Resultados ..................... 3-39

3.4 Classificando Dados e Removendo Duplicações .................................................. 3-42

Demonstração: Identificando e Removendo Valores Duplicados ................... 3-47


Exercícios .......................................................................................................... 3-50

3.5 Soluções .................................................................................................................. 3-52

Soluções dos Exercícos ................................................................................... 3-52


Soluções das Atividades e Perguntas .............................................................. 3-55

Capítulo 4 Preparando Dados ..................................................................................... 4-1

4.1 Lendo e Filtrando Dados .......................................................................................... 4-3

Exercícios ......................................................................................................... 4-11

4.2 Calculando Novas Colunas .................................................................................... 4-13


Demonstração: Usando Expressões para Calcular Novas Colunas ................ 4-14

Demonstração: Usando Funções Caracter ..................................................... 4-20

Demonstração: Usando Funções Data ............................................................ 4-24


Exercícios ......................................................................................................... 4-26

4.3 Processamento Condicional ................................................................................... 4-28


Demonstração: Processamento Condicional IF-THEN .................................... 4-29

Demonstração: Processado Múltiplos Comandos com IF-THEN/DO .............. 4-40


Exercícios .......................................................................................................... 4-44
Para Sua Informação v

4.4 Combinando Tabelas

4.5 Soluções .................................................................................................................. 4-46


Soluções dos Exercícos ................................................................................... 4-46

Soluções das Atividades e Perguntas .............................................................. 4-49

Lesson 5 Analyzing and Reporting on Data ............................................................. 5-1

5.1 Melhorando Relatórios com Títulos, Rodapés e Labels ........................................... 5-3

Demonstração: Melhorando os Relatórios.......................................................... 5-9

5.2 Criando Relatórios de Frequência .......................................................................... 5-12

Demonstração: Criando Relatórios e Gráficos de Frequência ......................... 5-14

Demonstração: Criando Relatórios de Frequência .......................................... 5-17


Exercícios .......................................................................................................... 5-19

5.3 Criando Relatórios Estatísticos Sumarizados ......................................................... 5-23


Demonstração: Criando Relatórios Estatísticos Sumarizados ......................... 5-24
Exercícios .......................................................................................................... 5-30

5.4 Soluções .................................................................................................................. 5-33


Soluções dos Exercícos ................................................................................... 5-33

Soluções das Atividades e Perguntas .............................................................. 5-36

Capítulo 6 Exportando Resultados ............................................................................. 6-1

6.1 Exportando Dados .................................................................................................... 6-3

Demonstração: Exportando Dados Para um Arquivo Excel ............................... 6-7

6.2 Exportando Relatórios ............................................................................................ 6-10

Demonstração: Exportando Resutados para o Excel ...................................... 6-14

Demonstração: Exportando Resutados para o PDF ....................................... 6-19


Exercícios .......................................................................................................... 6-22

6.3 Soluções .................................................................................................................. 6-26


Soluções dos Exercícos ................................................................................... 6-26
Soluções das Atividades e Perguntas .............................................................. 6-28
vi Para Sua Informação

Capítulo 7 Usando SQL no SAS® ................................................................................ 7-1

7.1 Usando Structured Query Language (SQL) no SAS ............................................... 7-3


Demonstração: Lendo e Filtrando Dados com SQL ........................................... 7-8

7.2 Combinando Tabelas usando SQL no SAS ............................................................ 7-12


Demonstração: Combinando Tabelas com a PROC SQL ............................... 7-14

7.3 Soluções .................................................................................................................. 7-20

Soluções das Atividades e Perguntas .............................................................. 7-20


Para Sua Informação vii

Para aprender mais…


Para informações sobre outros cursos no curriculum, contate a SAS
Education Division pelo telefone 1-800-333-7660, ou envie um e-mail
para [email protected]. Você também pode encontrar essas
informações na web, em http://support.sas.com/training/, bem como no
Training Course Catalog.

Para obter uma lista de livros SAS (incluindo e-books) relacionados com
os tópicos cobertos nesse manual, visite
https://www.sas.com/sas/books.html ou ligue para 1-800-727-0025.
Clientes nos Estados Unidos tem remessa gratuita para endereços nos
Estados Unidos.
viii Para Sua Informação
Capítulo 1. Fundamentos
1.1 O Processo da Programação SAS 1-3
O Processo da Programação SAS 1-6

1.2 Usando as Ferramentas de Programação SAS 1-11


Executando um Programa SAS no SAS Enterprise Guide 1-13
Executando um Programa SAS no SAS Studio 1-15
Exercício 1-18

1.3 Entendendo a Sintaxe do SAS 1-29


Entendendo a Sintaxe dos Programas SAS 1-35
Encontrando e Solucionando Erros de Sintaxe 1-38

1.4 Soluções 1-42


Soluções dos Exercícios e Perguntas 1-42
1-2 Fundamentos

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.1 O Processo da Programação SAS 1-3

1.1 O Processo da Programação SAS

É impossível entender os dados sem o uso de ferramentas que nos ajudem a obter significado dos
números e textos. O SAS oferece uma enorme coleção de ferramentas e soluções para resolver
suas necessidades de dados, mas no centro de tudo está a Linguagem de Programação SAS.
Independente da suíte de ferramentas que você licenciou, a Linguagem de Programa SAS está
incluída. Nesse curso você vai aprender como escrever programas SAS para resolver as tarefas
mais comuns de processamento de dados.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-4 Fundamentos

À medida que você avança no processo de extrair significado dos dados e efetuar ações baseadas
neles, você estará seguindo essas etapas básicas: acesso aos dados ou leitura deles em um
programa, exploração dos dados para ver o que está ali e como você pode precisar alterá-los ou
complementá-los, preparação dos dados para deixá-los prontos para análise e geração de
relatórios, e exportação para vários relatórios e formatos de dados. Vamos usar esse processo
como a estrutura para apresentar-lhe os fundamentos da Linguagem de Programação SAS.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.1 O Processo da Programação SAS 1-5

À medida que você prossegue no processo de programação, você aprende a escrever programas
SAS que convertem os dados em relatórios, tabelas e gráficos informativos.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-6 Fundamentos

O Processo da Programação SAS

Cenário
Examine os dados internacionais de tempestades que são usados nas demonstrações do curso.
Abra e execute o programa SAS abaixo. O código incluído no programa será explicado durante o
treinamento.

Arquivos
• p101d01.sas
• Storm.xlsx – uma planilha Microsoft Excel que contém dados detalhados e sumarizados sobre
tempestades internacionais.

Demo (Apenas para os instrutores)


Nota: O objetivo dessa demo não é estudar a sintaxe específica do programa. O objetivo é ver um
programa completo que demonstra os passos do processo da Programação SAS e observar
os resultados criados pelo SAS. Os detalhes da sintaxe da programação serão discutidos
nas lições subsequentes.
1. Inicie o SAS Studio ou o SAS Enterprise Guide. Abra o programa cre8data.sas na pasta de
arquivos do curso. Se necessário mude s:/workshop para o diretório dos seus arquivos do
curso. Execute o programa e verifique que o relatório informa que 22 tabelas foram criadas.
2. Inicie o Excel e abra Storm.xlsx na pasta data dos arquivos do curso. Examine cada planilha:
a. Storm_Summary contém uma linha por tempestade entre 1980 e 2016. A velocidade do
vento é medida em milhas por hora (MPH).
Nota: Refira-se às planilhas Basin_Codes, SubBasin_Codes e Type_Codes para obter
as descrições correspondentes aos códigos de seus respectivos campos.
b. Storm_Detail contém uma medição para cada seis horas de uma tempestade. A velocidade
do vento foi medida em nós.
c. Storm_Damage inclui uma descrição e estimativa de danos (ajustada pela inflação) para
tempestades nos Estados Unidos com danos superiores a um bilhão de dólares.
d. Storm_Range contém uma linha por tempestade com um mínimo de quatro medições de
vento. As quatro maiores medições estão nas colunas Wind1 a Wind4.
e. Storm_2017 contém uma linha por tempestade em 2017.
f. Basin_Codes, SubBasin_Codes, and Type_Codes são tabelas de lookup com códigos e
suas respectivas descrições.
3. Feche o arquivo Storm.xlsx.
4. No SAS Studio ou no SAS Enterprise Guide, abra p101d01.sas da pasta demos.
5. Encontre a seção chamada Section 1: Access Data. Selecione o código da Section 1 e
execute a porção selecionada do programa.
SAS Studio: Clique Run ou pressione F3.
Enterprise Guide: Clique na seta para baixo próximo a Run e selecione
Run Selection, ou pressione F3.

Examine a aba Output Data e verifique a tabela importada.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.1 O Processo da Programação SAS 1-7

O código SAS nessa seção faz o seguinte:


a. Estabelece opções de sistema
b. Estabelece a localização dos arquivos do curso e dos resultados gerados
c. Conecta-se ao arquivo Excel Storm.xlsx de forma que os dados possam ser usados no
programa
d. Cria uma cópia temporária da planilha Excel Storm_Damage como uma tabela SAS
6. Clique na aba Code ou Program. Selecione o código na seção 2 e pressione F3 para executa-
lo. Selecione a aba Results para ver os relatórios
O código SAS nessa seção faz o seguinte:
a. Cria um relatório de frequências para examinar os valores únicos das colunas Basin e Type
b. Calcula estatísticas sumarizadas das colunas MaxWindMPH e MinPressure
c. Imprime as primeiras cinco linhas da tabela storm_damage que foi importada do Excel
7. Clique na aba Code ou Program. Selecione o código contido na Section 3 e pressione F3 para
executa-lo. Examine a aba Output Data para ver as tabelas geradas.
O código SAS nessa seção faz o seguinte:
a. Acrescenta dados adicionais de 2017
b. Padroniza os dados corrigindo diferenças de grafia e atribuindo descrições aos valores
codificados
c. Cria colunas novas colunas com cálculos numéricos e manipulação de caracteres
d. Combina tabelas para relacionar suas colunas
8. Clique na aba Code ou Program. Selecione o código da Section 4 e pressione F3 para
executa-lo. Selecione a aba Results para ver os relatórios.
O código SAS nessa seção faz o seguinte:
a. Define valores de filtros para relatórios como 2016 e NA (North Atlantic basin)
b. Gera relatórios padrão bem como arquivos Excel com os relatórios
c. Cria um relatório de frequências para BasinName para o ano selecionado
d. Cria um relatório de estatísticas sumarizadas e uma tabela que incluem estatísticas das
tempestades em um ano selecionado
e. Cria um mapa das tempestades em um ano e bacia selecionados
9. Abra o arquivo Storm_Report2016.xlsx na pasta output e veja os resultados que foram criados
no Excel.
a. SAS Studio: Selecione Files and Folders, navegue para a pasta output e selecione o
arquivo Storm_Report2016.xlsx. Clique Download e abra o arquivo quando solicitado
pelo seu browser.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-8 Fundamentos

b. Enterprise Guide: Clique na aba Results - Excel e clique Download.

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.1 O Processo da Programação SAS 1-9

Nesse curso queremos que você escreva tanto código quanto possível – porque essa é a melhor
maneira de aprender! Nosso foco principal será a análise dos dados das tempestades que você
acabou de ver na demo, mas também vamos usar algumas tabelas de exemplo, fornecidas pelo
SAS.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-10 Fundamentos

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-11

1.2 Usando as Ferramentas de


Programação SAS

O SAS tem diversas interfaces de programação que você pode usar interativamente para escrever
e executar código.

• SAS Studio – uma interface do SAS baseada na web que pode ser usada em qualquer
computador. O SAS Studio é a interface usada no SAS OnDemand for Academics e no SAS
University Edition. O SAS University Edition pode ser baixado gratuitamente para uso pessoal. O
SAS OnDemand for Academics é um sistema baseado na nuvem. Para mais informações visite
https://www.sas.com/en_us/learn/academic-programs/software.html.
• SAS Enterprise Guide – uma aplicação Windows client que é executada no seu PC e acessa um
servidor SAS local ou remoto.
• SAS windowing environment – Uma interface legada, que é parte do SAS.

Além das interfaces SAS também é possível escrever e executar código em aplicações como o
Notebook Jupyter, mas você não terá acesso a algumas ferramentas de programação que o SAS
oferece.

• Nota: Nesse curso usamos o SAS Studio e o SAS Enterprise Guide porque eles incluem as
ferramentas de programação mais modernas.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-12 Fundamentos

O SAS Studio, SAS Enterprise Guide e SAS windowing environment permitem que você escreva
código, veja o log e as saídas do seu programa na mesma interface.
Você também pode submeter os programas ao ambiente operacional nos bastidores. Isso é
chamado de batch processing ou background submit. O log e os resultados são salvos, por default,
como arquivos separados no mesmo local do programa SAS. Submissões em background são
usadas frequentemente por programas que são executados regularmente, com base em uma rotina.
Esses programas normalmente foram bem testados e podem ser executados sem
acompanhamento.
O SAS Studio também permite que você execute programas clicando com o botão direito num
arquivo .sas na seção Files and Folders e selecionando Background Submit. Você pode
acompanhar o status dos programas em background e acessar os logs e arquivos resultantes
clicando no ícone More application options e selecionando Background Job Status.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-13

Executando um Programa SAS no SAS Enterprise Guide

Cenário
Escreva e execute um programa SAS simples no SAS Enterprise Guide e examine o log e os
resultados.

Arquivos
• sashelp.class – uma tabela de exemplo fornecida pelo SAS que inclui informações sobre 19
estudantes.

Notas
• Os programas podem ser executados clicando Run ou pressionando a tecla F3.
• A execução de um programa gera um log. Dependendo do código o programa também pode
gerar dados e resultados de saída.
• Para executar uma parte de um programa selecione o código desejado. Então clique na seta ao
lado de Run e selecione Run Selection ou pressione F3.
• Quando você reexecuta um programa, um prompt aparece. Se você clicar Yes, o log e os
resultados existentes serão substituídos. Se clicar em No, uma cópia do programa será criada, e
novos log e resultados serão gerados.

Demo
1. Veja as tabelas de exemplo do Sashelp.
Nota: Sashelp é uma coleção de tabelas de exemplo fornecida pelo SAS, que é útil para
testes e exercício. Esse curso usa várias tabelas do Sashelp para ilustrar a sintaxe de
programação.
a. Abra o SAS Enterprise Guide. Na tela inicial clique em New Project.
Nota: No Enterprise Guide seu trabalho é organizado em projetos. À medida que você
abre tabelas e programas, ou cria novos programas, você verá que são adicionados
novos ícones na janela Project Tree. O projeto pode ser salvo selecionando File 
Save Project.
b. Na janela Servers, no canto inferior esquerdo, selecione Servers  Local  Libraries 
SASHELP.
c. Clique duas vezes na tabela CLASS para abri-la e ver os seus dados. Você não precisa
fechar a tabela.
2. Escreva e execute um programa no SAS Enterprise Guide.
a. Selecione File  New  Program, ou clique New na barra de ferramentas e
selecione Program.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-14 Fundamentos

b. Digite ou copie o programa abaixo na aba Program e clique em Run.


Nota: Se você copiou o programa, selecione Edit  Format Code para melhorar o
espaçamento do programa.
data myclass;
set sashelp.class;
run;

proc print data=myclass;


run;
c. Clique na aba Log. O log inclui o programa e mensagens retornadas pelo SAS. O resumo
do log (Log Summary) é exibido por default na parte inferior da janela. Você pode clicar em
qualquer mensagem no Log Summary para encontrar a mensagem correspondente no log.
Nota: Se o Log Summary estiver fechado clique em Log Summary na barra de
ferramentas.
d. Clique nas abas Output Data e Results para examinar as saídas.
e. Volte à aba Program. Selecione os comandos PROC PRINT e RUN, clique na seta próximo
a Run e selecione Run Selection, ou pressione F3.
Nota: Em muitos dos programas desse curso, você precisa executar apenas uma parte do
programa.
f. Clique Yes para confirmar que os resultados sejam substituídos. Confirme que o log e os
resultados foram substituídos.
g. Muitas vezes é útil ver dois itens de projeto ao mesmo tempo. Por exemplo, você pode
querer ver um programa e seus resultados, ou, talvez, comparar duas tabelas. Para ver
duas janelas ao mesmo tempo, clique no botão Workspace Layout na barra de ferramentas
e selecione Stacked ou Side By Side. Você pode selecionar itens diferentes em cada seção
do layout. Feche uma das janelas quando terminar.

Nota: Se você tiver mais que um programa aberto no Enterprise Guide, você pode
selecionar o programa a ser visto na lista no topo de cada seção.

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-15

Executando um Programa SAS no SAS Studio

Cenário
Escreva e execute um programa SAS simples no SAS Studio e examine o log e os resultados.

Files
• sashelp.class – uma tabela de exemplo fornecida pelo SAS que inclui informações sobre 19
estudantes.

Notas
• Os programas podem ser executados clicando Run ou pressionando a tecla F3.
• A execução de um programa gera um log. Dependendo do código o programa também pode
gerar dados e resultados de saída.
• Para executar uma parte de um programa selecione o código desejado, clique Run e selecione
Run, ou pressione F3.
• Quando você reexecuta um programa o log, resultados e os dados criados serão substituídos.

Demo
1. Veja as tabelas de exemplo do Sashelp.
Nota: Sashelp é uma coleção de tabelas de exemplo fornecida pelo SAS, que é útil para
testes e exercícios. Esse curso usa várias tabelas do Sashelp para ilustrar a sintaxe de
programação.
a. Abra o SAS Studio. No painel Navigation do lado esquerdo da janela, selecione Libraries.
Expanda My Libraries  SASHELP.
b. Clique duas vezes na tabela CLASS para abri-la e ver seus dados. Um painel à esquerda
dos dados lista as colunas da tabela. O painel das colunas pode ser retraído clicando em
c. Feche a aba SASHELP.CLASS.
2. Escreva e execute um programa no SAS Studio.
a. Uma janela nova de programa chamada Program 1, está aberta. Observe que há abas
chamadas CODE, LOG e RESULTS.

Nota: Se você não tem uma nova aba de programa, pressione F4 ou clique New e
selecione SAS Program.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-16 Fundamentos

b. Digite ou copie o programa abaixo na aba CODE e clique Run.


Nota: Se você copiou o programa, clique no botão Format Code para melhorar o
espaçamento do programa.
data myclass;
set sashelp.class;
run;

proc print data=myclass;


run;
1. Clique na aba LOG. O log inclui o programa e mensagens retornadas pelo SAS. Você pode
expandir as seções Errors, Warnings ou Notes para ver todas as mensagens em uma lista
sumarizada. Você pode clicar em qualquer mensagem para ver a mensagem correspondente no
log.
2. Clique nas abas RESULTS e OUTPUT DATA para examinar as saídas.
Nota: Para otimizar a exibição da tabela na aba OUTPUT DATA, clique com o botão direito
no cabeçalho de qualquer coluna e selecione Size grid columns to content. Para
registrar essa opção para todas as tabelas, clique em More Application Options
e então em Preferences. Marque a check box Size grid columns to content e
clique em Save.
c. Volte para a aba CODE. Selecione os comandos PROC PRINT e RUN e clique Run ou
pressione F3. Confirme que o log e os resultados serão substituídos.
Para ver múltiplas abas simultaneamente, clique em uma das abas (CODE, LOG, OUTPUT
DATA ou RESULTS) e a arraste para o lado ou para a parte de baixo da área de trabalho,
até que região seja destacada. Para voltar a uma única janela, arraste a aba separada de
volta para a área principal.

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-17

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-18 Fundamentos

Exercício

Nota: Por favor, para o exercício escolha entre o SAS Enterprise Guide e o SAS Studio para
explorar melhor sua interface escolhida.

Nível 1 - SAS Enterprise Guide


1. Explorando a Janela de programação do SAS Enterprise Guide
a. Inicie o SAS Enterprise Guide e feche a janela inicial. O Enterprise Guide apresenta a
project tree e o painel de recursos do lado esquerdo e uma área de trabalho do lado direito.

b. Selecione File  New  Program (ou clique na ferramenta New e selecione Program)
para começar a escrever um programa SAS. Na aba Program digite ou copie o seguinte
código. É um programa SAS simples chamado de DATA Step.
Nota: Se você copiou o programa, selecione Edit  Format Code para melhorar o
espaçamento do programa.
data work.shoes;
set sashelp.shoes;
NetSales=Sales-Returns;
run;

c. Clique Run ou pressione F3 para executar o código. Examine as abas Log e


Output Data.
d. Clique na aba Log. Observe que há alguns comandos adicionais antes e depois do DATA
Step. Isso é chamado de wrapper code, e inclui comandos adicionados pelo Enterprise
Guide para definir o ambiente e os resultados. Para facilitar a leitura do log, os comandos do
wrapper code podem ser ocultados. Selecione Tools  Options  Results General e
desmarque a check box Show generated wrapper code in SAS log. Clique OK.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-19

e. Volte à aba Program e reexecute o programa. Selecione Yes quando for perguntado se quer
substituir os resultados.
Nota: para eliminar o prompt de substituição dos resultados ao reexecutar um programa,
selecione Tools  Options  Results General. Mude na lista drop-down de
Replace results para Replace without prompting e clique OK.
f. Na aba Program, adicione código para calcular estatísticas sumarizadas. Após o final do
programa, comece digitando pr. Observe que aparece um prompt com os comandos
válidos. Pressione a tecla enter ou a barra de espaços para incluir a palavra proc no
programa. Tecle espaço e digite me. Tecle enter novamente para incluir means no
programa.

g. Pressione a barra de espaços, use os prompts para selecionar data=work.shoes e


pressione Enter. Observe que o prompt lista todas as opções válidas. Digite ou selecione as
opções na janela para completar o seguinte comando:
proc means data=work.shoes mean sum maxdec=2;
Nota: Os prompts de Autocomplete podem ser modificados ou desabilitados selecionando
Program  Editor Options e clicando a aba Autocomplete. Na aba você pode
configurar os prompts.
h. Complete o programa digitando os comandos destacados abaixo. Observe que após digitar
os comandos VAR e CLASS, o prompt inclui uma lista das colunas da tabela work.shoes.
proc means data=work.shoes mean sum maxdec=2;
var NetSales;
class region;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-20 Fundamentos

i. Selecione o código desde PROC MEANS até RUN, clique na seta próximo a Run e
selecione Run Selection ou pressione F3.
Nota: O formato padrão da saída do Enterprise Guide é SAS Report. A saída do SAS
Report é um arquivo XML, que pode ser aberto nas aplicações SAS.

j. Para ver duas abas ao mesmo tempo, clique no botão Workspace Layout da barra de
ferramentas e selecione ou Stacked ou Side By Side. Veja a aba Program em uma seção e
a Results na outra.

k. Para voltar a uma única janela, clique no botão Workspace Layout da barra de ferramentas
e selecione Single. Você também pode clicar no X no canto superior direito de qualquer
uma das janelas.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-21

l. Além de criar uma saída SAS Report, você pode criar outros tipos de relatórios. Clique na
aba Program e clique Properties. Selecione Results  Customize result formats, styles,
and behavior. Limpe qualquer opção marcada nas check boxes e marque PDF e Excel.
Clique OK.

m. Execute o programa novamente. Uma aba separada é criada para cada tipo de relatório.
Nota: Os resultados PowerPoint, Excel, PDF e RTF podem ser vistos fora do Enterprise
Guide. Clique no botão View na janela do Excel ou do PDF para abrir o arquivo.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-22 Fundamentos

n. Para salvar o programa, volte para a aba Program e selecione Save  Save Program As.
Navegue para a pasta output nos arquivos do curso. Digite shoesprogram em File name e
clique Save. A extensão .sas será adicionada automaticamente ao nome do arquivo.

Nível 1 - SAS Studio


2. Explorando o editor do SAS Studio
a. Inicie o SAS Studio. A janela principal do SAS Studio consiste em um painel de navegação à
esquerda, e uma área de trabalho à direita.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-23

b. Há opções disponíveis na área de banner para customizar o ambiente do SAS Studio.

Pesquisa por arquivos e pastas.


Search

Abre arquivos do seu files e shortcuts.


Open

Novo programa, importação de novos dados, nova pesquisa, fechar


New Options todas as abas e visão maximizada.

O SAS Studio inclui duas perspectivas: a perspectiva do Programador


SAS e a do Programador Visual. Uma perspectiva é um conjunto pré-
determinado de recursos customizados para atender as necessidades
de um tipo específico de usuário. Esse curso é sobre Programação
SAS. Assegure-se que a perspectiva SAS Programmer está
selecionada na barra de ferramentas no topo da aplicação. Você
encontra mais informações sobre essas perspectivas no SAS® Studio
User's Guide.

Outras opções, incluindo: autoexec do editor, menu de visualização,


More preferências, ferramentas, status da execução em background e reset
Application Options da sessão SAS.

Um menu de Help, incluindo Help do SAS Studio, Documentação de


Help produtos SAS e versão do SAS Studio.

c. Na aba Program 1, digite ou copie o código abaixo. É um programa SAS simples, chamado
DATA step.
Nota: Se você copiou o programa, clique Format Code para melhorar o espaçamento
do programa.
data work.shoes;
set sashelp.shoes;
NetSales=Sales-Returns;
run;

d. Clique Run ou pressione F3 para executar o código. Examine as abas LOG e


OUTPUT DATA. A aba RESULTS está vazia porque o programa não gerou um relatório.
e. Na aba CODE, inclua o código para calcular estatísticas sumarizadas. No final do programa
comece digitando pr. Observe que aparece um prompt com palavras chave válidas e um
help da sintaxe. Digite Enter para adicionar a palavra proc ao programa. Tecle espaço,
digite me e tecle Enter novamente para adicionar means ao programa.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-24 Fundamentos

Nota: O prompt de autocomplete oferece também uma janela com ajuda sobre a sintaxe e
links para documentação e exemplos.

f. Tecle espaço, use o prompt para selecionar data=, e digite work.shoes. Tecle espaço e veja
que o prompt lista todas as opções válidas. Digite ou selecione as opções na janela para
completar o seguinte comando:
proc means data=work.shoes mean sum;
g. O prompt autocomplete pode ser desabilitado selecionando More Application Options
e clicando Preferences  Editor. Desmarque a opção Enable autocomplete e clique
Save.
h. Volte à aba CODE e tecle espaço após a opção SUM e antes do ponto e vírgula. Observe
que o prompt não aparece. Digite MAXDEC=2 para arredondar as estatísticas para duas
casas decimais.
Nota: Se o autocomplete estiver desligado, você pode habilita-lo temporariamente
pressionado as teclas Ctrl+space para ver o prompt.
i. Complete o programa adicionando os comandos destacados abaixo:
proc means data=work.shoes mean sum maxdec=2;
var NetSales;
class region;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-25

j. Selecione o código desde PROC MEANS até RUN e clique Run , ou pressione F3
para executar apenas a parte selecionada. Confirme os resultados.
Nota: A saída padrão do SAS Studio é HTML.

k. Para ver diversas abas ao mesmo tempo, clique na aba RESULTS e a arraste para o lado
direito da área de trabalho até que apareça uma região destacada. Para voltar a uma única
janela, arraste a aba RESULTS de volta para a área principal.

l. Na aba RESULTS clique o ícone HTML, PDF ou Word para abrir os resultados no formato de
arquivo correspondente. Você será convidado a abrir o arquivo no browser.

Nota: Opções adicionais de formatos de saída estão disponíveis em More application


options  Preferences  Results.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-26 Fundamentos

m. Para salvar o programa retorne à aba CODE e clique no botão Save As da barra de
ferramentas. Navegue até a pasta output nos arquivos do curso. Digite shoesprogram no
campo Name e clique Save. A extensão .sas é adicionada automaticamente ao nome.

Fim do Exercício

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-27

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-28 Fundamentos

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.3 Entendendo a Sintaxe do SAS 1-29

1.3 Entendendo a Sintaxe do SAS

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-30 Fundamentos

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.3 Entendendo a Sintaxe do SAS 1-31

Se um comando RUN ou QUIT não for usado no final de um step, o começo de um novo step
implica no encerramento do anterior. Se um comando RUN ou QUIT não for usado no final do último
step, o SAS Studio e o Enterprise Guide acrescentam um comando RUN e um QUIT após o código
executado.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-32 Fundamentos

Muitos comandos começam com uma palavra-chave de identificação. Além dos comandos DATA,
PROC e RUN, esse programa também inclui os comandos SET e VAR. O único comando que não
começa com uma palavra-chave é o que cria a nova coluna heightcm. Mas o que é realmente
importante lembrar é que todos os comandos terminam com um ponto e vírgula.
O comando de atribuição de valor, que cria uma nova coluna chamada heightcm é o único
comando que não começa com uma palavra-chave.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.3 Entendendo a Sintaxe do SAS 1-33

Enterprise Guide: Selecione Edit  Format Code. Você também pode clicar no programa com o
botão direito e selecionar Format Code ou pressionar Ctrl+I para formatar um programa SAS.
SAS Studio: Clique em Format Code . Você também pode clicar no programa com o botão
direito e selecionar Format Code para formatar um programa SAS.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-34 Fundamentos

Para comentar um bloco de programa usando a técnica /* */ nas interfaces SAS, você pode
selecionar o código e pressionar Ctrl+/ (barra para a direita).
• Para desfazer um comentário no SAS Studio, selecione o bloco e pressione Ctrl+/ de novo.
• Para desfazer um comentário no SAS Enterprise Guide, selecione o bloco e pressione
Ctrl+Shift+/.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.3 Entendendo a Sintaxe do SAS 1-35

Entendendo a Sintaxe dos Programas SAS

Cenário
Examine os statements do programa, melhore o espaçamento e adicione comentários.

Arquivos
• p101d02.sas
• sashelp.cars – uma tabela de exemplo fornecida pelo SAS que inclui informações básicas sobre
428 carros

Sintaxe

/*comentário*/
*comentário;

Notas
• Todos comandos (statements) terminam com ponto e vírgula.
• O espaçamento não importa num programa SAS.
• Valores que não estejam entre aspas pode estar em maiúsculas, minúsculas ou qualquer
combinação delas
• Um espaçamento consistente nos programas é uma boa prática para melhorar sua legibilidade.
• Para espaçamento automático:
SAS Studio: Clique Format Code .
Enterprise Guide: Selecione Edit  Format Code ou pressione Ctrl+I.
• Pode-se adicionar comentários para evitar que textos ou partes do programa sejam executados.

Demo
1. Abra o programa p101d02.sas da pasta demos. Execute-o. Ele é executado com sucesso?
2. Use o recurso Format Code para melhorar o espaçamento do programa.
• Enterprise Guide: Selecione Edit  Format Code. Você também pode clicar com o botão
direito no programa e selecionar Format Code ou pressionar Ctrl+I.
• SAS Studio: Clique em Format Code . Você também pode clicar com o botão direito no
programa e selecionar Format Code.
3. Adicione o seguinte texto como comentário antes do comando DATA: Program created by
<your-name>
Nota: Selecione o texto a ser comentado e pressione Ctrl+/ para rodea-lo com /* e */.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-36 Fundamentos

4. Comente o primeiro comando TITLE e o WHERE da PROC PRINT.


Execute o código e verifique que 428 linhas foram incluídas nos comentários.
/*Program created by <name>*/
data mycars;
set sashelp.cars;
AvgMPG=mean(mpg_city, mpg_highway);
run;

*title "Cars with Average MPG Over 35";

proc print data=mycars;


var make model type avgmpg;
*where AvgMPG > 35;
run;

title "Average MPG by Car Type";

proc means data=mycars


mean min max maxdec=1;
var avgmpg;
class type;
run;

title;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.3 Entendendo a Sintaxe do SAS 1-37

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-38 Fundamentos

Encontrando e Solucionando Erros de Sintaxe

Cenário
Encontrar e solucionar alguns erros sintáticos comuns.

Arquivos
• p101d03.sas
• sashelp.cars – uma tabela de exemplo fornecida pelo SAS que inclui informações básicas sobre
428 carros

Notas
• Alguns erros sintáticos comuns são erro ao abrir e fechar aspas, falta de ponto e vírgula, erro de
digitação de palavras chave e opções incorretas.
• Erros sintáticos podem resultar em um aviso (warning) ou erro (error) no log.
• Refira-se ao log para ajudar no diagnóstico e solução de erros de sintaxe.

Demo
1. Abra o programa p101d03.sas da pasta demos. Identifique os três erros de sintaxe, mas não
os corrija. Execute o programa.
2. Revise cuidadosamente as mensagens no log.
Nota: O Log Summary está disponível para ver as notes, warnings e errors.
3. Corrija o código e reexecute o programa.

data mycars;
set sashelp.cars;
AvgMPG=mean(mpg_city, mpg_highway);
run;

title "Cars with Average MPG Over 35";


proc print data=mycars;
var make model type avgmpg;
where AvgMPG > 35;
run;

title "Average MPG by Car Type";


proc means data=mycars mean min max maxdec=1;
var avgmpg;
class type;
run;

title;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.3 Entendendo a Sintaxe do SAS 1-39

A Extended Learning Page foi projetada para ampliar seu aprendizado em Programação SAS 1.
Ela inclui os seguintes recursos:
• O manual de treinamento (course notes) em versão PDF, em inglês e outras línguas.
• Arquivos do curso
• Case studies para prática e exercícios adicionais
• Links para papers, videos, blogs e outros recursos para aprender mais em tópicos relacionados.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-40 Fundamentos

Links
• Assista o vídeo Getting Started with SAS Studio.
(https://video.sas.com/detail/videos/sas-studio/video/4573016757001/getting-started-with-sas-
studio?autoStart=true)
• Veja vídeos tutoriais adicionais gratuitos sobre using SAS Studio tasks.
(https://video.sas.com/#category/videos/sas-studio)
• Assista o vídeo Writing and Submitting SAS Code: Choosing an Editor.
(https://video.sas.com/detail/video/2436474375001/writing-and-submitting-sas-code:-choosing-an-
editor?autoStart=true&q=choosing%20an%20editor)
• Faça o curso SAS Enterprise Guide 1: Querying and Reporting.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=EG1)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.3 Entendendo a Sintaxe do SAS 1-41

Links
• Leia o post How to run SAS programs in Jupyter Notebook.
(http://video.sas.com/detail/videos/sas-studio/video/4573016757001/getting-started-with-sas-
studio?autoStart=true)
• Leia as instruções e baixe o Jupyter kernel for SAS no SAS github page.
(https://github.com/sassoftware)
• Assista o vídeo An Introduction to SAS Viya Programming for SAS 9 Programmers.
(https://video.sas.com/#category/videos/an-introduction-to-sas-viya-programming-for-sas-9-
programmers)
• Faça o curso Programming for SAS Viya após o Programação SAS 1.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=PGVIYA)
• Faça o curso grátis SAS Programming for R Users.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=SP4R)
• Use o Getting Started with SAS Viya for R documentation.
(https://go.documentation.sas.com/?cdcId=pgmsascdc&cdcVersion=9.4_3.3&docsetId=caspg3r&d
ocsetTarget=titlepage.htm&locale=en)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-42 Fundamentos

1.4 Soluções
Soluções dos Exercícios e Perguntas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.4 Soluções 1-43

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
Capítulo 2. Acessando os Dados
2.1 Entendendo os Dados SAS 2-3

2.2 Acessando os Dados por meio de Libraries 2-12


Demostração: Explorando Libraries Automáticas SAS 2-19
Demostração: Usando uma Library para Ler Arquivos Excel 2-22

2.3 Importando Dados para o SAS 2-25


Demostração: Importando um Arquivo Delimitado por Vírgulas (CSV) 2-27
Exercício 2-31

2.4 Soluções 2-34


Soluções dos Exercícios 2-34
Soluções das Atividades e Perguntas 2-35
2-2

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.1 Entendendo os Dados SAS 2-3

2.1 Entendendo os Dados SAS

Acessar os dados é o primeiro passo no processo da Programação SAS. Há vários tipos de


arquivos de dados, e o SAS facilita o acesso a esses diferentes tipos de dados e o seu uso em
relatórios e análises.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-4

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.1 Entendendo os Dados SAS 2-5

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-6

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.1 Entendendo os Dados SAS 2-7

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-8

Valores Data SAS representam o número de dias entre 01/01/1960 e uma data especificada.
O SAS calcula datas variando entre 1582 A.D. e 19.900 A.D.
Valores Hora SAS representam o número de segundos desde a meia noite do dia atual.
Valores Data/Hora SAS representam o número de segundos entre a meia noite de 01/01/1960 e
uma hora/minuto/segundo em uma data especificada.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.1 Entendendo os Dados SAS 2-9

O SAS usa a representação ponto flutuante para armazenar valores numéricos. Essa representação
suporta uma ampla faixa de valores (valores muito grandes ou muito pequenos) com uma acurácia
adequada. Para mais informações sobre como o SAS armazena valores numéricos, visite SAS 9.4
Language Reference: Concepts.
(https://go.documentation.sas.com/?docsetId=lrcon&docsetTarget=p0ji1unv6thm0dn1gp4t01a1u0g6.
htm&docsetVersion=9.4&locale=en#n00dmtao82eizen1e6yziw3s31da)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-10

O path indicado no seu programa tem que ser relativo a onde o SAS está rodando. Se o SAS
estiver em um servidor remoto, o path aponta para o servidor, não para a máquina local.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.1 Entendendo os Dados SAS 2-11

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-12

2.2 Acessando os Dados por meio de


Libraries

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.2 Acessando os Dados por meio de Libraries 2-13

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-14

O SAS respeita as permissões do sistema operacional associadas com as tabelas referenciadas


pela Library. Se você tiver permissão de escrita, poderá usar o código SAS para criar, modificar ou
apagar arquivos. Se você tiver permissão de leitura, mas não de escrita, você poderá ler os
arquivos via library, mas não pode fazer nenhuma alteração usando programas SAS.
Para impedir que o SAS faça alterações em tabelas na library, você pode acrescentar
ACCESS=READONLY no final do comando LIBNAME
libname mylib base "s:/workshop/data" access=readonly;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.2 Acessando os Dados por meio de Libraries 2-15

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-16

Nota: O log pode indicar que a libref pg1 se refere à mesma localização física de outra library,
como TMP0001 ou _TEMP0. Quando uma tabela é aberta para leitura no Grid de Dados, o
SAS cria uma library que aponta para a pasta onde ela está. Você não precisa apagar uma
libref criada pelo SAS.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.2 Acessando os Dados por meio de Libraries 2-17

Work e Sashelp também são conhecidas como libraries SAS de sistema. Para maiores
informações sobre as libraries do SAS, acesse essa página no SAS Help.
(https://go.documentation.sas.com/?docsetId=lrcon&docsetTarget=n18m1vkqmeo4esn1moikt23zhp
8s.htm&docsetVersion=9.4&locale=en)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-18

Se sua plataforma SAS tem um administrador, outras libraries automáticas podem ser criadas
quando você abre sua interface SAS. Se as libraries estão definidas para você, não será necessário
executar um comando LIBNAME. Você pode usar a libref que foi criada por seu administrador e o
nome da tabela para referenciar os dados no seu programa.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.2 Acessando os Dados por meio de Libraries 2-19

Explorando Libraries Automáticas SAS

Cenário
Usar as libraries Work e Sashelp que são criadas automaticamente pelo SAS. Determinar o que
ocorre com as libraries e tabelas quando o SAS reinicia.

Arquivos
• p102d01.sas
• sashelp.class – uma tabela de exemplo fornecida pelo SAS que inclui informações sobre 19
estudantes.

Notas
• Work e Sashelp são libraries de sistema que são definidas automaticamente pelo SAS.
• As tabelas armazenadas na library Work são apagadas no final da sessão SAS.
• Work é a library default. Assim, se for informado no programa o nome de uma tabela sem libref, a
tabela será lida ou gravada na library Work.
• Sashelp contém uma coleção de tabelas de exemplo e outros arquivos que contém informações
sobre a sessão SAS.

Demo
1. Abra o programa p102d01.sas na pasta demos e encontre a seção Demo. Execute o programa
demo e use o painel de navegação para examinar o conteúdo das libraries Work e Out.
2. Que tabela está na library Work? Que tabela está na library Out?
3. Reinicie o SAS.
a. Enterprise Guide: Na Servers list, selecione Local e clique Disconnect. Clique Yes na
janela de confirmação. Expanda Local para iniciar o SAS novamente e expanda Libraries.
b. SAS Studio: Selecione More application options  Reset SAS Session.
4. Discuta as seguintes questões:
a. O que é a library Work?
b. Porque as libraries out e pg1 não estão disponíveis?
c. A tabela class_copy2 foi salva permanentemente?
d. O que é necessário fazer para reestabelecer a library out?
5. Para reestabelecer a library pg1, abra e execute o programa libname.sas que foi salvo
previamente na pasta main.
Nota: Sempre que você reiniciar o SAS Studio ou o SAS Enterprise Guide, você precisa
executar o programa libname.sas para reestabelecer a library pg1.
Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-20

O engine XLSX exige uma licença da interface SAS/ACCESS to PC Files, e também SAS 9.4M2 ou
posterior.
Nota: A interface SAS/ACCESS to PC Files está incluída no SAS University Edition.
(https://www.sas.com/en_us/software/university-edition.html)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.2 Acessando os Dados por meio de Libraries 2-21

No SAS Studio e no Enterprise Guide a opção VALIDVARNAME= é definida como ANY por default.
ANY permite que os nomes de colunas contenham caracteres especiais (inclusive brancos). Se um
nome de coluna contiver caracteres especiais, ele terá que ser expresso como um nome SAS literal:

“var-name”n

A opção VALIDVARNAME pode ser definida como V7 durante uma sessão SAS, usando o comando
OPTIONS. Você também pode alterar o valor default de VALIDVARNAME nas opções da interface.
Enterprise Guide: Selecione Tools  Options  Data General e altere Valid variable names para
Basic variable names.
SAS Studio: Selecione More application options  Preferences e altere SAS variable name
policy para V7.
Nota: No ambiente SAS windowing environment a definição default é VALIDVARNAME=V7.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-22

Usando uma Library para Ler Arquivos Excel

Cenário
Crie uma library para acessar um arquivo Excel e referenciar uma planilha Excel no programa.

Files
• p102d02.sas
• Storm.xlsx – um arquivo Excel com múltiplas planilhas que contém dados de tempestades.

Sintaxe

OPTIONS VALIDVARNAME=V7;

LIBNAME libref XLSX "path/filename.xlsx";

LIBNAME libref CLEAR;

Notas
• O engine XLSX permite que você leia dados diretamente de arquivos Excel. Para usá-lo é
necessária uma licença do SAS/ACCESS to PC Files.
• A opção de sistema VALIDVARNAME=V7 força os nomes de tabelas e colunas a seguir as regras
de nomenclatura do SAS. Espaços e caracteres especiais são substituídos por underscores e
nomes com mais que 32 caracteres são truncados.
• Valores datas são automaticamente convertidos para datas SAS e formatados para facilitar a
interpretação.
• As planilhas do arquivo Excel podem ser referenciadas no programa SAS como libref.nome-da-
planilha
• Quando você define uma conexão a uma fonte de dados não SAS, como Excel ou outros bancos
de dados, é uma boa prática apagar a libref no final do seu programa com a opção CLEAR.

Demo
1. Abra o arquivo Storm.xlsx no Excel para ver os dados. Observe que, na planilha
Storm_Summary, há espaços nos nomes das colunas Hem NS e Hem EW. Feche o arquivo
Excel depois que você terminar de vê-lo.
Nota: O arquivo tem que ser fechado antes que você o associe a uma library.
2. Abra o p102d02.sas da pasta demos e encontre a seção Demo. Complete o comando
OPTIONS para garantir que os nomes das colunas sigam os padrões do SAS.
3. Complete o statement LIBNAME para definir uma library chamada xlstorm que acesse o
arquivo Storm.xlsx.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.2 Acessando os Dados por meio de Libraries 2-23

4. Selecione os comandos OPTIONS e LIBNAME e execute o código selecionado. Use o painel de


navegação para encontrar a library xlstorm. Abra a tabela storm_summary. Veja que os
nomes Hem_NS e Hem_EW incluem underscores. Feche a tabela storm_summary.
*Complete the OPTIONS statement;
options validvarname=v7;

*Complete the LIBNAME statement;


*Update the path if necessary;

libname xlstorm xlsx "s:/workshop/data/storm.xlsx";


5. Modifique o comando PROC CONTENTS para ler a tabela storm_summary na library xlstorm.
6. Inclua um comando para fechar a library xlstorm. Selecione todo o programa de demo e
execute-o.
Nota: No SAS Studio, se você não executar a opção VALIDVARNAME=V7 com o step PROC
CONTENTS, o processador do código define, por default, a opção VALIDVARNAME=
para ANY. Isso resulta em espaços no nome das colunas Hem EW e Hem NS quando a
tabela storm_summary for lida. Para garantir que a opção VALIDVARNAME permaneça
como V7, selecione More application options  Preferences e mude o valor de SAS
variable name policy para V7. No Enterprise Guide, se você alterar o valor de
VALIDVARNAME com um comando OPTIONS, o processador do código não redefine a
opção.

*Complete the DATA= option to reference the STORM_SUMMARY


worksheet;
proc contents data=xlstorm.storm_summary;
run;

libname xlstorm clear;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-24

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.3 Importando Dados para o SAS 2-25

2.3 Importando Dados para o SAS

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-26

Tipos de DBMS que estão incluídos no Base SAS:


• CSV – valores separados por vírgulas.
• JMP – arquivos JMP, JMP 7 ou posterior.
• TAB – valores delimitados por tabs.
• DLM – arquivos delimitados. O delimitador default é um espaço. Para usar um delimitador
diferente use o comando DELIMITER=.
Tipos adicionais de DBMS incluídos na interface SAS/ACCESS to PC Files:
• XLSX – Microsoft Excel 2007, 2010 e posterior.
• ACCESS – Microsoft Access 2000 e posterior.
Outros tipos de arquivos podem ser vistos aqui no SAS Help Center.
(https://go.documentation.sas.com/?docsetId=acpcref&docsetTarget=p0jf3o1i67m044n1j0kz51ifhpvs
.htm&docsetVersion=9.4&locale=en#n1s9rbn3svpry9n1imbrjuo251j0)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.3 Importando Dados para o SAS 2-27

Importando um Arquivo Delimitado por Vírgulas (CSV)

Cenário
Usando a PROC IMPORT, importe um arquivo CSV e crie uma nova tabela SAS.

Arquivos
• p102d03.sas
• storm_damage.csv – um arquivo CSV que inclui uma descrição e estimativa de danos
(ajustada pela inflação) para tempestades nos Estados Unidos com danos superiores a um
bilhão de dólares.

Sintaxe

PROC IMPORT DATAFILE="path/file-name.csv" DBMS=CSV


OUT=output-table <REPLACE>;
<GUESSINGROWS=n|MAX;>
RUN;

Notas
• A procedure IMPORT pode ser usada para ler arquivos delimitados.
• A opção DBMS identifica o tipo de arquivo. O valor CSV está incluído no Base SAS.
• A opção OUT= identifica a library e o nome da tabela SAS de saída.
• A opção REPLACE é necessária para sobrescrever a tabela SAS, caso ela já exista.
• O SAS assume que os nomes das colunas estão na primeira linha do arquivo de texto, e que os
dados começam na segunda linha.
• Valores data são automaticamente convertidos para valores numéricas tipo data SAS e
formatados para facilidade de interpretação.
• A opção GUESSINGROWS= pode ser usada para aumentar o número de linhas que o SAS
analisa para determinar o tipo e tamanho de cada coluna, do valor default de 20 linhas até um
máximo de 32.767 linhas.

Demo
O arquivo storm_damage.csv está na pasta data. Veja, nessa visualização dos dados, que os
nomes das colunas estão na primeira linha, os dados estão separados por vírgulas e que há uma
coluna Date. Valores de dados que incluam uma vírgula estão entre aspas.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-28

1. Abra o programa p102d03.sas na pasta demos e encontre a seção Demo. Complete o step
PROC IMPORT para ler storm_damage.csv e criar uma tabela SAS temporária chamada
storm_damage_import. Substitua a tabela se já existir.
2. Complete a PROC CONTENTS para examinar as propriedades de storm_damage_import.
3. Selecione o programa de demo e execute o código selecionado.
*Complete the PROC IMPORT step;
proc import datafile="s:/workshop/data/storm_damage.csv" dbms=csv
out=storm_damage_import replace;
run;

*Complete the PROC CONTENTS step;


proc contents data=storm_damage_import;
run;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.3 Importando Dados para o SAS 2-29

Se o arquivo Excel estiver aberto quando a PROC IMPORT for executada, ocorrerá um erro.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-30

Links
• Cursos SAS/ACCESS (http://support.sas.com/training/us/paths/dmgt.html#acc)
• Documentação SAS/ACCESS (https://support.sas.com/documentation/onlinedoc/access/)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.3 Importando Dados para o SAS 2-31

Exercício

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas nos seus arquivos do
curso.

Nível 1
1. Importando dados Excel de uma única planilha
Crie uma tabela com uma cópia dos dados que estão em um arquivo Excel. O arquivo contém
apenas uma planilha.
a. Abra p102p01.sas na pasta practices. Complete o step PROC IMPORT para ler
eu_sport_trade.xlsx. Crie uma tabela chamada eu_sport_trade e substitua a tabela se ela
já existir.
b. Modifique a PROC CONTENTS para exibir o descritor da tabela eu_sport_trade. Execute o
programa e veja os dados de saída e os resultados.

Nível 2
2. Importando dados de um arquivo CSV
Crie uma tabela a partir de um arquivo CSV.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-32

np_traffic.csv
ParkName,UnitCode,ParkType,Region,TrafficCounter,ReportingDate,TrafficCount
Big Hole NB,BIHO,National Battlefield,Pacific West,TRAFFIC COUNT AT BATTLE ROAD,31JAN2016,0
Big Hole NB,BIHO,National Battlefield,Pacific West,TRAFFIC COUNT AT BATTLE ROAD,29FEB2016,0
Big Hole NB,BIHO,National Battlefield,Pacific West,TRAFFIC COUNT AT BATTLE ROAD,31MAR2016,0
Big Hole NB,BIHO,National Battlefield,Pacific West,TRAFFIC COUNT AT BATTLE ROAD,30APR2016,183
Big Hole NB,BIHO,National Battlefield,Pacific West,TRAFFIC COUNT AT BATTLE ROAD,31MAY2016,289

a. Crie um programa novo. Escreva um step PROC IMPORT para ler o arquivo np_traffic.csv
e criar a tabela SAS traffic. Adicione um step PROC CONTENTS para exibir o descritor da
nova tabela.
b. Examine os dados interativamente. Desça até a linha 37. Veja que os valores de ParkName
e TrafficCounter parecem truncados. Modifique o programa para resolver esse problema.
c. Execute o programa e veja se ParkName e TrafficCounter não estão mais truncados.

Desafio
3. Importando dados com um delimitador específico
Crie uma tabela a partir de np_traffic.dat. Os valores no texto estão delimitados por uma barra
vertical (pipe).
ParkName|UnitCode|ParkType|Region|TrafficCounter|ReportingDate|TrafficCount
Big Hole NB|BIHO|National Battlefield|Pacific West|TRAFFIC COUNT AT BATTLE ROAD|31JAN2016|0
Big Hole NB|BIHO|National Battlefield|Pacific West|TRAFFIC COUNT AT BATTLE ROAD|29FEB2016|0
Big Hole NB|BIHO|National Battlefield|Pacific West|TRAFFIC COUNT AT BATTLE ROAD|31MAR2016|0
Big Hole NB|BIHO|National Battlefield|Pacific West|TRAFFIC COUNT AT BATTLE ROAD|30APR2016|183
Big Hole NB|BIHO|National Battlefield|Pacific West|TRAFFIC COUNT AT BATTLE ROAD|31MAY2016|289

a. Acesse o SAS Procedures Guide


(https://go.documentation.sas.com/?docsetId=proc&docsetTarget=titlepage.htm&docsetVersi
on=9.4&locale=en).
Expanda Procedures e encontre a seção IMPORT Procedure. Veja a sintaxe e os
exemplos para determinar como ler um arquivo delimitado por um caracter especial
específico.
b. Use a PROC IMPORT para importar o arquivo np_traffic.dat e criar a tabela SAS
temporária traffic2.
Resultados parciais (linhas 37-46 de 2,784)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.3 Importando Dados para o SAS 2-33

4. SAS Studio: Associando uma library automática na abertura


Lembre que, quando a seção SAS é encerrada, as referências às libraries são apagadas. Pode
ser útil ter certas libraries que são definidas automaticamente quando o SAS inicia.
a. Na seção Files and Folders do painel de navegação, navegue para a pasta onde seus
dados do curso estão armazenados (por exemplo, s:/workshop/data). Clique com o botão
direito na pasta e selecione Create  Library. Se necessário digite PG1 no campo Name e
ative o check box Re-create this library at start-up. Clique OK.
b. Um statement LIBNAME é adicionado a um programa autoexec que é executado sempre
que o SAS inicia. O programa pode ser acessado e modificando selecionando More
application options  Edit Autoexec File.
c. Para testar a library selecione More application options  Reset SAS Session. Expanda
a seção Libraries do painel de navegação e verifique se a library pg1 está disponível.
5. SAS Enterprise Guide: Associando uma library automática na abertura
6. Lembre que, quando a seção SAS é encerrada, as referências às libraries são apagadas. Pode
ser útil ter certas libraries que são definidas automaticamente quando o SAS inicia.
a. Selecione Tools  Options  SAS Programs. Ative o check box Submit SAS code when
server is connected e clique Edit. Você pode incluir qualquer código SAS que você queira
executar cada vez que o SAS iniciar. Digite um comando LIBNAME, clique Save e OK.
Nota: Se necessário altere o path para apontar para a pasta com os dados do seu curso.
libname pg1 base "s:/workshop/data";
b. Para testar a library selecione Local na lista de servidores (Servers list), clique Disconnect
e Yes. Expanda Local para reiniciar o SAS, expanda Libraries para confirmar que a library
pg1 está disponível.

Fim do Exercício

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-34

2.4 Soluções
Soluções dos Exercícios
1. Importando dados Excel de uma única planilha
*Modify the path if necessary;
proc import datafile="s:/workshop/data/eu_sport_trade.xlsx"
dbms=xlsx
out=eu_sport_trade
replace;
run;

proc contents data=eu_sport_trade;


run;
2. Importando dados de um arquivo CSV
*Modify the path if necessary;
proc import datafile="s:/workshop/data/np_traffic.csv"
dbms=csv
out=traffic
replace;
guessingrows=max;
run;

proc contents data=traffic;


run;
3. Importando dados com um delimitador específico
*Modify the path if necessary;
proc import datafile="s:/workshop/data/np_traffic.dat"
dbms=dlm
out=traffic2
replace;
guessingrows=3000;
delimiter="|";
run;
4. SAS Studio: Associando uma Library automaticamente na abertura
Veja o exercício para passos detalhados.
5. SAS Enterprise Guide: Associando uma Library automaticamente na abertura
6. Veja o exercício para passos detalhados.
Fim das Soluções

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.4 Soluções 2-35

Soluções das Atividades e Perguntas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-36

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.4 Soluções 2-37

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-38

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
Capítulo 3. Explorando e Validando
Dados
3.1 Explorando os Dados 3-3
Demonstração: Explorando os Dados com PROCs SAS 3-10
Exercícios 3-14

3.2 Filtrando Linhas 3-18


Demonstração: Filtrando Linhas com Operadores Básicos 3-21
Demonstração: Filtrando Linhas usando Variáveis Macro 3-29
Exercícios 3-32

3.3 Formatando Colunas 3-35


Demonstração: Formatando os Valores dos Dados nas Saídas 3-39

3.4 Classificando Dados e Removendo Duplicações 3-42


Demonstração: Identificando e Removendo Valores Duplicados 3-47
Exercícios 3-50

3.5 Soluções 3-52


Soluções dos Exercícios 3-52
Soluções das Atividades e Perguntas 3-55
3-2 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-3

3.1 Explorando os Dados

A exploração dos dados pode incluir o aprendizado sobre as colunas e os valores que elas têm,
bem como a validação dos dados em busca de valores incorretos ou inconsistentes. Nesse capítulo
você aprenderá a usar algumas PROCs que lhe dão algumas dessas visões. Você vai aprender
também como criar subconjuntos dos dados, de forma a poder focar em segmentos particulares,
formatar os dados para entende-los facilmente, classificar os dados e identificar e limpar valores
duplicados.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-4 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-5

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-6 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-7

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-8 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-9

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-10 Capítulo 3 Explorando e Validando Dados

Explorando os Dados com PROCs SAS

Cenário
Use as PROCs PRINT, MEANS, UNIVARIATE e FREQ para explorar e validar os dados.

Arquivos
• p103d01.sas
• storm_summary – Uma tabela SAS que contém uma linha por tempestade entre 1980 e 2016.

Sintaxe

PROC PRINT DATA=tabela de entrada(OBS=n);


VAR coluna(s);
RUN;

PROC MEANS DATA= tabela de entrada;


VAR coluna(s);
RUN;

PROC UNIVARIATE DATA= tabela de entrada;


VAR coluna(s);
RUN;

PROC FREQ DATA= tabela de entrada;


TABLES coluna(s);
RUN;

Notas
• A PROC PRINT lista todas linhas e colunas da tabela de entrada por default. A opção de tabela
OBS= limita o número de linhas lidas da tabela de entrada. O statement VAR limita e ordena as
colunas que serão listadas.
• A PROC MEANS gera estatísticas sumarizadas simples para cada coluna numérica na tabela de
entrada, por default. O statement VAR limita o número de colunas que serão analisadas.
• A PROC UNIVARIATE também gera estatísticas sumarizadas para cada coluna por default, mas
inclui estatísticas mais detalhadas relacionadas com a distribuição e valores extremos. O
statement VAR limita o número de colunas que serão analisadas.
• A PROC FREQ cria uma tabela de frequência para cada coluna da tabela de entrada, por default.
Você pode limitar as colunas a serem analisadas usando o statement TABLES.

Demo
1. Abra o p103d01.sas na pasta demos e encontre a seção Demo do programa. Complete o
statement PROC PRINT para listar os dados na tabela pg1.storm_summary. Imprima apenas
as 10 primeiras linhas. Selecione o step e execute o código selecionado.
proc print data=pg1.storm_summary (obs=10);
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-11

2. Adicione um statement VAR para incluir apenas as colunas Season, Name, Basin,
MaxWindMPH, MinPressure, StartDate e EndDate. Inclua list first 10 rows como um
comentário antes do statement PROC PRINT. Selecione o step e execute o código selecionado.
Nota para o Enterprise Guide: Para facilitar a inclusão de nomes de colunas, use o prompt
autocomplete para ver e selecionar colunas. Você pode dar um duplo clique num nome
de coluna para incluí-lo no código, ou começar a digitar o nome da coluna e pressionar a
barra de espaço quando o nome correto é destacado.
Nota para o SAS Studio: : Para facilitar a inclusão de nomes de colunas, coloque o cursor
depois da palavra-chave VAR. Use a seção Library do painel de navegação para
encontrar a library pg1. Expanda a tabela storm_summary para ver uma lista das
colunas. Mantenha a tecla Ctrl e selecione as colunas na ordem em que você quer que
elas apareçam no statement. Arraste as colunas para o statement VAR.
/*list first 10 rows*/
proc print data=pg1.storm_summary(obs=10);
var Season Name Basin MaxWindMPH MinPressure StartDate
EndDate;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-12 Capítulo 3 Explorando e Validando Dados

3. Copie o step PROC PRINT e cole-o no fim do programa. Mude PRINT para MEANS. Remova a
opção OBS= da tabela para analisar todas as linhas. Modifique o statement VAR para calcular
estatísticas sumarizadas para MaxWindMPH and MinPressure. Inclua calculate summary
statistics como um comentário antes do statement PROC MEANS. Selecione o step e execute
o código selecionado.
/*calculate summary statistics*/
proc means data=pg1.storm_summary;
var MaxWindMPH MinPressure;
run;

4. Copie o step PROC MEANS e cole-o no fim do programa. Mude MEANS para UNIVARIATE.
Inclua examine extreme values como um comentário antes do statement PROC UNIVARIATE.
Selecione o step e execute o código selecionado.
/*examine extreme values*/
proc univariate data=pg1.storm_summary;
var MaxWindMPH MinPressure;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-13

5. Copie o step PROC UNIVARIATE e cole-o no fim do programa. Mude UNIVARIATE para FREQ.
Altere o statement VAR para um statement TABLES para produzir tabelas de frequência para
Basin, Type e Season. Inclua list unique values and frequencies como um comentário antes
do statement PROC FREQ. Selecione o step e execute o código selecionado.
/*list unique values and frequencies*/
proc freq data=pg1.storm_summary;
tables Basin Type Season;
run;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-14 Capítulo 3 Explorando e Validando Dados

Exercícios

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas.

Nível 1
1. Explorando os dados usado PROCs
A tabela pg1.np_summary contêm estatísticas de uso público do Serviço Nacional de Parques.
Use as PROCs PRINT, MEANS, UNIVARIATE e FREQ para explorar os dados em busca de
possíveis inconsistências.
a. Abra o p103p01.sas na pasta practices folder. Complete o statement PROC PRINT para
listar as primeiras 20 linhas de pg1.np_summary.
b. Adicione um statement VAR para incluir apenas as variáveis Reg, Type, ParkName,
DayVisits, TentCampers e RVCampers. Selecione e execute o step.
Você vê alguma possível inconsistência nos dados?

c. Copie o step PROC PRINT e cole-o no fim do programa. Mude PRINT para MEANS e
apague a opção OBS= da tabela. Modifique o statement VAR para calcular estatísticas
sumarizadas para DayVisits, TentCampers e RVCampers. Selecione e execute o step.
Qual é o menor valor para campistas em barracas? Esse valor é inesperado?

d. Copie o step PROC MEANS e cole-o no fim do programa. Mude MEANS para
UNIVARIATE. Selecione e execute o step.
Há valores negativos para alguma das colunas?
e. Copie o step PROC UNIVARIATE e cole-o no fim do programa. Mude UNIVARIATE para
FREQ. Modifique o statement VAR para produzir tabelas de frequência para Reg e Type.
Selecione e execute o step.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-15

Há códigos escritos em minúsculas? Algum código ocorre apenas uma vez na tabela?

f. Inclua comentários antes de cada step, para documentar o programa. Salve-o como
np_validate.sas na pasta output.

Nível 2
2. Usando PROCs para validar os dados
A tabela pg1.np_summary contém informações sobre os Parques Nacionais, monumentos,
reservas, rios e costas dos Estados Unidos. Os valores válidos para Reg e Type são os
seguintes:

Reg Description
Type Description
A Alaska
NM National Monument
IM Intermountain
NP National Park
MW Midwest
NS National Seashore
NC National Capital
PRE National Preserve
NE Northeast
RVR National River
PW Pacific West

SE Southeast

a. Crie um novo programa. Escreva um step PROC FREQ que produza tabelas de frequência
para as colunas Reg e Type da tabela pg1.np_summary. Execute o step e verifique o
resultado buscando valores inválidos.
b. Escreva um step PROC UNIVARIATE para gerar estatísticas para a coluna Acres da tabela
pg1.np_summary. Note o número de linha para o maior e o menor parques.
c. Veja a tabela pg1.np_summary para identificar os nomes do maior e do menor parques.

Desafio
3. Gerando uma Tabela com os Valores Extremos
A tabela pg1.eu_occ inclui a taxa de ocupação para os países europeus entre janeiro de 2004 e
setembro de 2017.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-16 Capítulo 3 Explorando e Validando Dados

O SAS Output Delivery System (ODS) lhe dá opções para controlar o tipo e o formato das
saídas geradas pelo código SAS. O statement ODS SELECT é usado para especificar os
objetos de saída. Ele pode ser usado para gerar um relatório contendo apenas a saída “Extreme
Observations”.

Nota: Para especificar um objeto de saída você tem que saber quais objetos o programa SAS
produz. O statement ODS TRACE grava no log SAS registros que indicam o path, label
e outras informações para cada objeto de saída que o seu programa gera. Você pode
encontrar informações sobre os statements ODS TRACE e ODS SELECT no SAS Help
Facility e na sua documentação online.
a. Crie um novo programa. Escreva um step PROC UNIVARIATE para examinar Camp da
tabela pg1.eu_occ.
b. Inclua statements ODS TRACE antes e depois da PROC UNIVARIATE como abaixo.
ods trace on;
proc univariate data=pg1.eu_occ;
var camp;
run;
ods trace off;
c. Execute o programa e examine as informações do TRACE no log SAS. Determine o nome
do objeto de saída Extreme Observations.
d. Apague os statements ODS TRACE. Inclua um statement ODS SELECT imediatamente
antes do step PROC UNIVARIATE e informe o nome do objeto Extreme Observations.
Nota: Esse método pode ser usado com outras PROCs que criem diversas (como a PROC
CONTENTS) para selecionar uma parte da saída.
e. Usando a documentação SAS ou o Help de sintaxe do editor, identifique a opção que
especifica o número se observações extremas que são listadas na tabela. Use essa opção
para mudar o número de observações extremas de cinco para dez. Execute o código

Fim dos Exercícios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-17

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-18 Capítulo 3 Explorando e Validando Dados

3.2 Filtrando Linhas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.2 Filtrando Linhas 3-19

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-20 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.2 Filtrando Linhas 3-21

Filtrando Linhas com Operadores Básicos

Cenário
Use o statement WHERE e operadores básicos para criar um subconjunto dos dados em um
PROC.

Arquivos
• p103d02.sas
• storm_summary – Uma tabela SAS que contém uma linha por tempestade entre 1980 e 2016.

Sintaxe

WHERE expressão;

Operadores Básicos:
=, EQ
^= , ~= , NE
> , GT
< , LT
>= , GE
<= , LE
IN(valor1, …, valorn)

Constante Data SAS


"ddmmmyyyy"d ("01JAN2015"d)

Notas
• O statement WHERE é usado para filtrar linhas. Serão lidas apenas as linhas nas quais a
expressão seja verdadeira. Se a expressão for falsa a linha será desconsiderada.
• Valores caracter tem que estar entre aspas ou apóstrofes, e letras minúsculas são diferentes de
maiúsculas.
• Valores numéricos não ficam entre aspas, e podem conter apenas dígitos, um ponto decimal e
um sinal de menos (valor negativo).
• Podem ser criadas condições compostas usando AND e OR.
• A lógica de um operador pode ser revertida usando a palavra-chave NOT.
• Quando uma expressão contiver datas fixas, use a sintaxe de constante data: “ddmmmyyyy”d.
− dd representa o dia, com um ou dois dígitos
− mmm representa o nome do mês em inglês, abreviado em três letras. Podem ser usados
caracteres maiúsculos ou minúsculos indiferentemente.
− yyyy representa o ano, com dois ou quatro caracteres.

Demo
1. Abra o p103d02.sas na pasta demos e encontre a seção Demo do programa. Escreva um step
PROC PRINT para listar os dados da tabela pg1.storm_summary.
2. Escreva um statement WHERE para incluir apenas as linhas com o valor de MaxWindMPH
maior ou igual a 156 (tempestade Categoria 5). Selecione e execute o step PROC PRINT.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-22 Capítulo 3 Explorando e Validando Dados

where MaxWindMPH >= 156;


3. Modifique o statement WHERE para cada uma das condições abaixo. Selecione e execute o
step PROC PRINT após cada condição.
a. Basin igual a WP (West Pacific – Pacífico Oeste)
where Basin = "WP";
b. Basin igual a SI ou NI (South Indian ou North Indian – Sul da Índia ou Norte da Índia)
where Basin in ("SI" "NI");
c. StartDate em ou posterior a 1 de janeiro de 2010
where StartDate >= "01jan2010"d;
d. Type igual a TS (tropical storm – tempestade tropical) e Hem_EW igual a W (west - oeste)
where Type = "TS" and Hem_EW = "W";
e. MaxWindMPH maior que 156 ou MinPressure menor que 920
where MaxWindMPH > 156 or MinPressure < 920;
4. Após o último statement WHERE foram incluídos valores missing para MinPressure? Como
você pode excluir esses valores missing?
where MaxWindMPH>156 or 0<MinPressure<920;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.2 Filtrando Linhas 3-23

IS NULL é outro operador especial que pode ser usado com dados de Bancos de Dados (DBMS).
Eles distinguem entre valores missing e nulos (null). IS NULL e IS MISSING são sinônimos quando
você está usando uma tabela SAS.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-24 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.2 Filtrando Linhas 3-25

Imagine que você tem um programa com diversas PROCs e quer filtrar cada uma pela variável
Type igual a Wagon. Depois de ver os resultados você decide que quer relatórios semelhantes para
Type=SUV e Type=Sedan. Você tem a opção “find and replace”, mas seria melhor ter que alterar
esse valor repetido em um único local.

A linguagem SAS macro permite que você desenvolva programas dinâmicos, que podem ser
facilmente atualizados ou modificados. Uma variável macro permite armazenar um texto que pode
ser usado em seu programa.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-26 Capítulo 3 Explorando e Validando Dados

É recomendável que você não inclua aspas ou apóstrofes quando define o valor da variável macro.
Use aspas, quando necessário, depois que o nome da macro é substituído pelo seu valor.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.2 Filtrando Linhas 3-27

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-28 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.2 Filtrando Linhas 3-29

Filtrando Linhas usando Variáveis Macro

Cenário
Modifique um programa para usar variáveis SAS macro para filtrar dados em diversas PROCs.

Arquivos
• p103d03.sas
• storm_summary – uma tabela SAS que contém uma linha por tempestade entre 1980 e 2016.

Sintaxe

%LET variável-macro=valor;
WHERE valor numérico=&variável-macro;
WHERE valor caracter="&variável-macro";
WHERE valor data="&variável-macro"d;

Notas
• Uma variável macro contém texto que pode ser usada para substituir o código no seu programa.
• O statement %LET define o nome da macro e lhe atribui um valor.
• Os nomes das variáveis macro devem seguir as regras dos nomes SAS.
• As variáveis macro podem ser referenciadas num programa precedendo seu nome com um
caracter & (e comercial).
• Se a referência a uma macro estiver entre aspas, tem que ser usadas aspas, não apóstrofes.

Demo
1. Abra o p103d03.sas na pasta demos e encontre a seção Demo do programa. Selecione e
execute esse código.
2. Escreva três statements %LET para criar variáveis macro chamadas WindSpeed, BasinCode e
Date. Atribua valores a essas variáveis compatíveis com o statement WHERE.
3. Modifique o statement WHERE para referenciar as variáveis macro. Selecione o programa
demo e execute o código selecionado. Verifique se os mesmos resultados são produzidos.
%let WindSpeed=156;
%let BasinCode=NA;
%let Date=01JAN2000;
proc print data=pg1.storm_summary;
where MaxWindMPH>=&WindSpeed and Basin="&BasinCode" and
StartDate>="&Date"d;
var Basin Name StartDate EndDate MaxWindMPH;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-30 Capítulo 3 Explorando e Validando Dados

proc means data=pg1.storm_summary;


where MaxWindMPH>=&WindSpeed and Basin="&BasinCode" and
StartDate>="&Date"d;
var MaxWindMPH MinPressure;
run;

4. Modifique os valores das variáveis macro que você selecionou. Os valores possíveis para Basin
são NA, WP, SP, WP, NI e SI. Selecione e execute o código da demo.
Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.2 Filtrando Linhas 3-31

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-32 Capítulo 3 Explorando e Validando Dados

Exercícios

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas.

Nível 1
4. Filtrando Linhas num Relatório Usando Dados Caracter
A tabela pg1.np_summary contêm estatísticas de uso público do Serviço Nacional de Parques.
Os códigos de tipos de parques das reservas estão inconsistentes. Examine essas
inconsistências produzindo um relatório que liste todas a reservas.
a. Abra o p103p04.sas na pasta practices folder. Inclua um statement WHERE para imprimir
apenas as linhas nas quais ParkName inclua “Preserve”.
Nota: ParkName contém valores caracter. Maiúsculas são diferentes de minúsculas.
b. Execute o programa e veja os resultados. Quais códigos são usados para Reservas?
Nota: Se você usar aspas no statement WHERE será emitido um warning no log. Para
eliminar esse warning use apóstrofes.

5. Criando um Relatório para Dados Missing


Use a PROC PRINT e o statement WHERE para examinar a tabela pg1.eu_occ.
a. Crie um programa novo. Escreva um step PROC PRINT para ler a tabela pg1.eu_occ. Use
um statement WHERE para listar as linhas nas quais Hotel, ShortStay e Camp contenham
missing. Execute o programa. Quantas linhas foram incluídas?
b. Modifique o statement WHERE para listar as linhas com os valores de Hotel maiores que
40,000,000. Execute o programa. Que meses foram incluídos no relatório?

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.2 Filtrando Linhas 3-33

Nível 2
6. Usando Variáveis Macro para Gerar Subconjuntos em PROCs
a. Crie um programa novo. Escreva um step PROC FREQ para analisar as linhas de
pg1.np_species. Inclua apenas as linhas nas quais Species_ID comece com YOSE
(Yosemite National Park) e Category seja igual a Mammal. Crie tabelas de frequência para
Abundance e Conservation_Status.
b. Escreva um step PROC PRINT para listar o mesmo subconjunto de linhas de
pg1.np_species. Inclua Species_ID, Category, Scientific_Name e Common_Names no
relatório. Execute o programa.

c. Crie uma variável macro chamada ParkCode para armazenar YOSE e outra chamada
SpeciesCat para armazenar Mammal. Modifique o código para usar as variáveis macro.
Execute o programa e confirme que os mesmos resultados foram gerados.
Nota: Nas variáveis macro, maiúsculas e minúsculas são diferentes, quando usadas num
statement WHERE.
d. Mude os valores das macros para ZION (Zion National Park) e Bird. Execute o programa.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-34 Capítulo 3 Explorando e Validando Dados

Desafio
7. Eliminando as diferenças entre maiúsculas e minúsculas nas condições WHERE
Comparações caracter em statements WHERE diferenciam maiúsculas de minúsculas. Use
funções SAS para que essa diferença desapareça.
a. Abra o pg1.np_traffic. Verifique que a grafia dos valores de Location está inconsistente.
b. Crie um programa novo. Escreva um step PROC PRINT que liste ParkName, Location e
Count. Considere as linhas nas quais Count não seja igual a 0 e Location inclua MAIN
ENTRANCE. Execute o programa. Olhe o log para confirmar que 38 linhas foram incluídas.
Nota: Se você usar aspas no statement WHERE será emitido um warning no log. Para
eliminar esse warning use apóstrofes.
c. Você pode usar a função UPCASE para tornar maiúsculas equivalentes a minúsculas numa
expressão WHERE caracter. Use a função UPCASE na coluna Location para incluir
qualquer grafia de MAIN ENTRANCE. Execute o programa e verifique que 40 linhas foram
incluídas.

UPCASE(coluna)

Nota: A função UPCASE em um statement WHERE não converte permanentemente os


valores da coluna para maiúsculas.

Fim dos Exercícios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.3 Formatando Colunas 3-35

3.3 Formatando Colunas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-36 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.3 Formatando Colunas 3-37

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-38 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.3 Formatando Colunas 3-39

Formatando os Valores dos Dados nas Saídas

Cenário
Use o statement FORMAT em uma PROC para mostrar datas como datas e valores monetários.

Arquivos
• p103d04.sas
• storm_damage – uma tabela SAS que inclui uma descrição e estimativa de danos (ajustada pela
inflação) para tempestades nos Estados Unidos com danos superiores a um bilhão de dólares.

Sintaxe

FORMAT coluna format;

<$>nome do format<w>.<d>

Notas
• Formats são usados para definir como os dados devem ser apresentados.
• Formats não alteram o valor dos dados.
• Formats podem ser aplicados nas PROCs usando o statement FORMAT.
• Visite SAS Language Elements documentation para acessar uma lista dos formatos SAS
disponíveis.
(https://go.documentation.sas.com/?docsetId=allprodslang&docsetTarget=titlepage.htm&docsetVe
rsion=9.4&locale=en)

Demo
1. Abra o p103d04.sas na pasta demos e encontre a seção Demo do programa. Escreva um step
PROC PRINT para listar os dados a tabela pg1.storm_damage. Selecione e execute o código
da demo.
2. Acrescente um statement FORMAT para aplicar o format MMDDYY10. à coluna Date,
DOLLAR16. à Cost e COMMA5. à Deaths. Selecione e execute o step.
proc print data=pg1.storm_damage;
format Date mmddyy10. Cost dollar16. Deaths comma5.;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-40 Capítulo 3 Explorando e Validando Dados

3. Mude o tamanho de MMDDYY para 8 e DOLLAR para 14. Selecione e execute o step. Mude
MMDDYY para 6 e DOLLAR para 10. Selecione e execute o step. O que acontece com os
valores formatados?
Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.3 Formatando Colunas 3-41

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-42 Capítulo 3 Explorando e Validando Dados

3.4 Classificando Dados e Removendo


Duplicações

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.4 Classificando Dados e Removendo Duplicações 3-43

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-44 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.4 Classificando Dados e Removendo Duplicações 3-45

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-46 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.4 Classificando Dados e Removendo Duplicações 3-47

Identificando e Removendo Valores Duplicados

Cenário
Use as opções NODUPRECS e NODUPKEY na PROC SORT para identificar e remover valores
duplicados.

Arquivos
• p103d05.sas
• storm_detail – Uma tabela SAS que contém diversas linhas para cada tempestade entre 1980 e
2016. Cada linha representa uma medição para cada seis horas da tempestade.

Sintaxe
Remoção de linhas duplicadas:

PROC SORT DATA=tabela de entrada <OUT=tabela de saída>


NODUPRECS <DUPOUT=tabela de saída>;
BY _ALL_;
RUN;

Remoção de chaves duplicadas:

PROC SORT DATA=tabela de entrada <OUT= tabela de saída >


NODUPKEY <DUPOUT= tabela de saída >;
BY <DESCENDING> coluna(s);
RUN;

Notas
• A opção NODUPRECS remove linhas adjacentes que estejam totalmente duplicadas.
• A opção DUPOUT= cria uma tabela de saída que armazena as linhas duplicadas removidas.
• O uso de _ALL_ no statement BY classifica por todas as colunas, e assegura que as linhas
duplicadas fiquem adjacentes na tabela classificada e sejam removidas.
• A opção NODUPKEY preserva apenas a primeira linha para cada valor único da combinação das
colunas listadas no statement BY.

Demo
1. Abra o p103d05.sas da pasta demos e encontre a seção Demo do programa. Modifique o
primeiro step PROC SORT para classificar por todas as colunas e remover as linhas duplicadas.
Grave as linhas removidas na tabela storm_dups. Selecione e execute o step. Confirme que há
107.821 linhas na storm_clean e 214 na storm_dups.
proc sort data=pg1.storm_detail out=storm_clean
noduprecs dupout=storm_dups;
by _all_;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-48 Capítulo 3 Explorando e Validando Dados

2. O segundo step PROC SORT está filtrando por valores não missing em Name e Pressure e
classificando Season em ordem descendente, Basin, Name e Pressure. Execute o step PROC
SORT e confirme que a primeira linha de cada tempestade representa o menor valor de
Pressure.
Nota: Como os nomes das tempestades podem ser reusados em múltiplos anos e bacias,
tempestades únicas são agrupadas classificando por Season, Basin, and Name.
3. Modifique o terceiro step PROC SORT para classificar a tabela min_pressure, saída da PROC
SORT anterior, e grave a primeira linha de cada tempestade. Não é necessário armazenar as
linhas removidas. Selecione e execute o step.
proc sort data=min_pressure nodupkey;
by descending Season Basin Name;
run;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.4 Classificando Dados e Removendo Duplicações 3-49

Links
Visite a SAS 9.4 Procedures Help page
(https://go.documentation.sas.com/?docsetId=allprodsproc&docsetTarget=p1xe33sarc3zlhn1qxon
w2ul4aql.htm&docsetVersion=9.4&locale=en)
Pesquise ou faça perguntas na SAS Procedures community e veja a resposta de outros
programadores.
(https://communities.sas.com/t5/SAS-Procedures/bd-p/sas_procedures)
Faça o curso SAS Macro 1.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=MAC1)
Leia o livro SAS Macro Programming Made Easy.
(https://www.sas.com/store/books/categories/getting-started/sas-macro-programming-made-easy-
third-edition/prodBK_66298_en.html)
Aprenda sobre PROC FORMAT in SAS Help.
(https://go.documentation.sas.com/?docsetId=proc&docsetTarget=p1xidhqypi0fnwn1if8opjpqpbmn
.htm&docsetVersion=9.4&locale=en)
Faça o curso SAS Programming 2.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=PROG2)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-50 Capítulo 3 Explorando e Validando Dados

Exercícios

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas.

Nível 1
8. Classificando Dados e Gerando uma Tabela de Saída
Crie a tabela np_sort contendo dados sobre os parques nacionais ordenados pelo código da
região e pelo número de visitantes diários em ordem decrescente.
a. Abra o p103p08.sas na pasta practices. Modifique o step PROC SORT para ler a tabela
pg1.np_summary e criar uma tabela classificada temporária chamada np_sort.
b. Inclua um statement BY para classificar por Reg e DayVisits em ordem ascendente.
c. Inclua um statement WHERE para selecionar Type igual a NP. Execute o programa.

Nível 2
9. Classificando Dados para Remover Linhas Duplicadas
A tabela pg1.np_largeparks contém a área bruta dos parques nacionais em acres. Há linhas
duplicadas para certas localidades.
a. Abra e verifique a tabela pg1.np_largeparks. Observe que há linhas exatamente duplicadas
para certos parques.
b. Crie um programa novo. Escreva um step PROC SORT que crie duas tabelas (park_clean
and park_dups), e remova as linhas duplicadas. Execute o programa.
park_clean

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.4 Classificando Dados e Removendo Duplicações 3-51

park_dups

Desafio
10. Criando uma Tabela de Lookup a Partir de uma Tabela Detalhada
A tabela pg1.eu_occ inclui diversas linhas para cada código e nome de país. Crie uma tabela
de lookup que inclua uma única linha para cada código e nome de país.
a. Crie um programa novo. Escreva um step PROC SORT para classificar pg1.eu_occ e criar
uma tabela de saída chamada countrylist. Remova os valores duplicados. Classifique por
Geo e Country.
b. Para ler apenas Geo e Country da tabela pg1.eu_occ, você pode usar a opção de tabela
KEEP=. Coloque a opção KEEP= imediatamente depois do nome da tabela de entrada e
liste Geo e Country.

tabela (KEEP=lista de variáveis)

c. Execute o programa e verifique que foi incluída apenas uma linha por país.

Fim dos Exercicios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-52 Capítulo 3 Explorando e Validando Dados

3.5 Soluções
Soluções dos Exercícios
1. Explorando os dados usado PROCs
/*Parts A and B*/
/*list first 20 rows*/
proc print data=pg1.np_summary(obs=20);
var Reg Type ParkName DayVisits TentCampers RVCampers;
run;

/*Part C*/
/*calculate summary statistics*/
proc means data=pg1.np_summary;
var DayVisits TentCampers RVCampers;
run;

/*Part D*/
/*examine extreme values*/
proc univariate data=pg1.np_summary;
var DayVisits TentCampers RVCampers;
run;

/*Part E*/
/*list unique values and frequency counts*/
proc freq data=pg1.np_summary;
tables Reg Type;
run;
b. Você vê alguma possível inconsistência nos dados?
Sim. A coluna Type tem inconsistências. Veja que as Reservas Nacionais (Preserve)
tem os códigos PRES e PRESERVE.
c. Qual é o menor valor para campistas em barracas? Esse valor é inesperado?
O valor mínimo é zero. Não, porque é possível que um parquet tenha zero campistas
em barracas.
d. Há valores negativos para alguma das colunas?
Não
e. Há códigos escritos em minúsculas? Algum código ocorre apenas uma vez na tabela?
Nenhum código está em letras minúsculas. NC, NPRE e RIVERWAYS ocorrem apenas
uma vez na tabela.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.5 Soluções 3-53

2. Usando PROCs para validar os dados


*Part A;
proc freq data=pg1.np_summary;
tables Reg Type;
run;

*Part B;
proc univariate data=pg1.np_summary;
var Acres;
run;
a. Que valores inválidos existem em Reg? None
Que valores inválidos existem em Type? NPRE, PRESERVE, RIVERWAYS
c. Qual o maior e o menor Parque? Linha 78 (African Burial Ground Monument, .35 acres)
e Linha 6 (Noatak National Preserve, 6,587,071.39 acres)
3. Gerando uma Tabela com os Valores Extremos
*Part A and B;
ods trace on;
proc univariate data=pg1.eu_occ;
var camp;
run;
ods trace off;

*Part D and E;
ods select extremeobs;
proc univariate data=pg1.eu_occ nextrobs=10;
var camp;
run;
4. Filtrando Linhas num Relatório Usando Dados Caracter
proc print data=pg1.np_summary;
var Type ParkName;
where ParkName like '%Preserve%';
run;
5. Criando um Relatório para Dados Missing
*Part A;
proc print data=pg1.eu_occ;
where Hotel is missing and ShortStay is missing and
Camp is missing;
run;

*Part B;
proc print data=pg1.eu_occ;
where Hotel > 40000000;
run;
a. Quantas linhas foram incluídas? 101

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-54 Capítulo 3 Explorando e Validando Dados

b. Que meses foram incluídos no relatório? Os meses são julho ou agosto.


6. Usando Variáveis Macro para Gerar Subconjuntos em PROCs
%let ParkCode=ZION;
%let SpeciesCat=Bird;

proc freq data=pg1.np_species;


tables Abundance Conservation_Status;
where Species_ID like "&ParkCode%" and
Category="&SpeciesCat";
run;

proc print data=[pg1.np_species;


var Species_ID Category Scientific_Name Common_Names;
where Species_ID like "&ParkCode%" and
Category="&SpeciesCat";
run;
7. Eliminando as diferenças entre maiúsculas e minúsculas nas condições WHERE
proc print data=pg1.np_traffic;
var ParkName Location Count;
where Count ne 0 and upcase(Location) like '%MAIN ENTRANCE%';
run;
8. Classificando Dados e Gerando uma Tabela de Saída
proc sort data=pg1.np_summary out=np_sort;
by Reg descending DayVisits;
where Type="NP";
run;
9. Classificando Dados para Remover Linhas Duplicadas
proc sort data=pg1.np_largeparks
out=park_clean
dupout=park_dups
noduprecs;
by _all_;
run;
10. Criando uma Tabela de Lookup a Partir de uma Tabela Detalhada
proc sort data=pg1.eu_occ(keep=geo country) out=countryList
nodupkey;
by geo Country;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.5 Soluções 3-55

Soluções das Atividades e Perguntas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-56 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.5 Soluções 3-57

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3-58 Capítulo 3 Explorando e Validando Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
Capítulo 4. Preparando os Dados
4.1 Lendo e Filtrando os Dados 4-3
Exercício 4-11

4.2 Calculando Novas Colunas 4-13


Demonstração: Usando Expressões para Criar Novas Colunas 4-14
Demonstração: Usando Funções Caracter 4-20
Demonstração: Usando Funções Data 4-24
Exercício 4-26

4.3 Processamento Condicional 4-28


Demonstração: Processamento Condicional com IF-THEN 4-29
Demonstração: Processando Múltiplos Statements com IF-THEN/DO 4-40
Exercício 4-44

4.4 Soluções 4-46


Soluções dos Exercícios 4-46
Soluções das Atividades e Perguntas 4-49
4-2 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.1 Lendo e Filtrando os Dados 4-3

4.1 Lendo e Filtrando os Dados

Depois que você aprendeu sobre os seus dados, você provavelmente desejará fazer alguns ajustes
baseado no que encontrou e no que necessita. É aqui que o DATA step realmente brilha. Nessa
lição você aprenderá várias maneiras de criar subconjuntos e como calcular novas colunas usando
expressões e funções. Você também aprenderá a usar processamento condicional para ter
exatamente o que você precisa nos seus dados de saída.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-4 Capítulo 4 Preparando os Dados

O step DATA é uma ferramenta de programação robusta, embora simples, que pode fazer tudo, desde
consultas simples até a disponibilidade de estruturas para logs web complexos. Embora não seja
possível ensinar nesse treinamento tudo que o step DATA pode fazer, você aprenderá como fazer os
tratamentos de dados mais comuns, como filtrar linhas e colunas, calcular novas colunas e executar
processamento condicional. Além dessas possibilidades, o DATA step também permite que você execute
merge ou join de tabelas, leia arquivos de texto complexos e execute processamento repetitivo com
laços DO ou arrays. Esses tópicos e muitos outros são cobertos no curso Programação SAS 2, e outros
cursos avançados de programação

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.1 Lendo e Filtrando os Dados 4-5

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-6 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.1 Lendo e Filtrando os Dados 4-7

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-8 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.1 Lendo e Filtrando os Dados 4-9

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-10 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.1 Lendo e Filtrando os Dados 4-11

Exercício

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas.

Nível 1
1. Criando uma Tabela SAS
A tabela pg1.eu_occ SAS contém as taxas mensais de pernoites nos países europeus, de
janeiro de 2004 até setembro de 2017.
a. Abra a tabela pg1.eu_occ e examine os nomes e valores das colunas.
b. Abra o p104p01.sas na pasta practices. Modifique o código para criar uma tabela
temporária chamada eu_occ2016 lendo a tabela pg1.eu_occ.
c. Complete o statement WHERE para selecionar apenas os pernoites em 2016. Observe que
YearMon é uma coluna caracter, e os quatro primeiros caracteres representam o ano.
d. Complete o statement FORMAT no DATA step para aplicar o format COMMA17. às colunas
Hotel, ShortStay e Camp.
e. Complete o statement DROP para excluir Geo da tabela de saída.

Nível 2
2. Criando uma Tabela SAS permanente.
A tabela np_species contém uma linha para cada espécie encontrada em cada parque
nacional.
a. Crie um programa novo. Escreva um step para ler a tabela pg1.np_species e criar uma
nova tabela permanente chamada fox. Grave a tabela na pasta output.
b. Inclua apenas as linhas nas quais Category é Mammal e Common_Names inclui Fox.
c. Exclua as colunas Category, Record_Status, Occurrence e Nativeness. Execute o
programa.
d. Note que Fox Squirrels foram incluídos na tabela de saída. Adicione uma condição no
statement WHERE para excluir as linhas que contenham Squirrel.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-12 Capítulo 4 Preparando os Dados

e. Classifique a tabela fox por Common_Names.

Desafio
3. Criando uma Tabela SAS usando Variáveis Macro
A tabela np_species contém uma linha para cada espécie encontrada em cada parque
nacional.
a. Escreva um novo programa que crie uma tabela chamada Mammal que inclua apenas os
mamíferos (Category=Mammal) da tabela pg1.np_species. Não inclua Abundance,
Seasonality ou Conservation_Status na tabela de saída.
b. Use uma PROC FREQ pra determinar quantas espécies há para cada valor único de
Record_Status.

c. Modifique o programa para usar uma variável macro para alterar Mammal para outros
valores de Category. Altere o valor da variável macro para Bird e execute o programa.
Nota: Use a PROC FREQ para determinar os valores únicos de Record_Status.

Fim do Exercício

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.2 Calculando Novas Colunas 4-13

4.2 Calculando Novas Colunas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-14 Capítulo 4 Preparando os Dados

Usando Expressões para Criar Novas Colunas

Cenário
Leia uma tabela SAS existente e crie cópias temporárias e permanentes.

Arquivos
• p104d02.sas
• storm_summary – uma tabela SAS contém uma linha por tempestade entre 1980 e 2016.

Sintaxe

DATA tabela de saída;


SET tabela de entrada;
nova-coluna = expressão;
RUN;

Notas
• O nome da coluna a ser criada ou atualizada é digitado ao lado esquerdo do sinal de igual.
• Forneça uma expressão do lado direito do sinal de igual.
• O SAS define automaticamente os atributos necessários (nome, tipo e tamanho) para uma nova
coluna.
• O tamanho de uma coluna numérica nova é 8.
• O tamanho de uma coluna caracter nova é determinado com base no valor atribuído a ela.
• Constantes caracter tem que estar entre aspas ou apóstrofes, e maiúsculas são diferentes de
minúsculas.

Demo
1. Abra o p104d02.sas na pasta demos e encontre a seção Demo do programa. Inclua um
statement para criar a variável MaxWindKM multiplicando MaxWindMPH por 1.60934.
2. Adicione um statement FORMAT para arredondar MaxWindKM para o inteiro mais próximo.
3. Inclua um statement para criar uma coluna caracter StormType com o conteúdo Tropical Storm.
Selecione e execute o DATA step.
data tropical_storm;
set pg1.storm_summary;
drop Hem_EW Hem_NS Lat Lon;
where Type="TS";
*Add assignment and FORMAT statements;
MaxWindKM=MaxWindMPH*1.60934;
format MaxWindKM 3.;
StormType="Tropical Storm";
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.2 Calculando Novas Colunas 4-15

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-16 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.2 Calculando Novas Colunas 4-17

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-18 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.2 Calculando Novas Colunas 4-19

Os delimitadores default para a função PROPCASE são: branco, barra, hífen, abre parêntesis,
ponto e tab. Para usar uma lista diferente de delimitadores, especifique uma lista de caracteres
dentro de um único par de aspas ou apóstrofes, como segundo parâmetro da função.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-20 Capítulo 4 Preparando os Dados

Usando Funções Caracter

Cenário
Usar funções caracter para manipular valores caracter existentes.

Arquivos
• p104d03.sas
• storm_summary – uma tabela SAS que contém uma linha por tempestade entre 1980 e 2016.

Sintaxe

UPCASE(valor)

PROPCASE(valor, <delimitadores>)

CATS(valor1, valor2, ...)

SUBSTR(valor, posição, <tamanho>)

Notas
• A função UPCASE converte valores caracter para maiúsculas.
• A função PROPCASE troca a primeira letra de cada palavra para maiúscula e as demais para
minúsculas.
• A função CATS concatena valores caracter removendo brancos iniciais e finais.
• A função SUBSTR extrai uma substring de um valor caracter.

Demo
1. Abra o p104d03.sas na pasta demos e encontre a sessão Demo do programa. Adicione um
statement para converter Basin para maiúsculas usando a função UPCASE.
2. Adicione um statement para converter Name para “proper case” usando a função PROPCASE.
3. Adicione um statement para criar Hemisphere, que contatena Hem_NS e Hem_EW usando a
função CATS.
4. Adicione um statement para criar Ocean, que extrai a segunda letra de Basin usando a função
SUBSTR. Selecione e execute o DATA step.

data storm_new;
set pg1.storm_summary;
drop Type Hem_EW Hem_NS MinPressure Lat Lon;
*Add assignment statements;
Basin=upcase(Basin);
Name=propcase(Name);
Hemisphere=cats(Hem_NS, Hem_EW);
Ocean=substr(Basin,2,1);
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.2 Calculando Novas Colunas 4-21

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-22 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.2 Calculando Novas Colunas 4-23

O terceiro argumento opcional da função YRDIF é chamado basis. O valor de basis descreve como
o SAS calcula a diferença de datas um uma idade. Ao calcular a idade de uma pessoa ou evento,
'AGE' deve ser usado como basis. Visite the SAS documentation for the YRDIF function para
aprender mais sobre o valor de basis.
(https://go.documentation.sas.com/?docsetId=lefunctionsref&docsetTarget=p1pmmr2dtec32an1vbsq
mm3abil5.htm&docsetVersion=9.4&locale=en)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-24 Capítulo 4 Preparando os Dados

Usando Funções Data

Cenário
Uso de funções data para manipular valores data existentes.

Arquivos
• p104d04.sas
• storm_damage – uma tabela SAS que inclui uma descrição e estimativa de danos (ajustada pela
inflação) para tempestades nos Estados Unidos com danos superiores a um bilhão de dólares.

Sintaxe

YEAR(data-SAS)
MONTH(data-SAS)
DAY(data-SAS)
WEEKDAY(data-SAS)

TODAY()
MDY(mês, dia, ano)
YRDIF(data inicial, data final, 'AGE')

Notas
• As funções YEAR, MONTH, DAY e WEEKDAY retornam um valor numérico. Para a WEEKDAY, 1
representa domingo.
• A função TODAY retorna a data de hoje como uma data SAS, baseada no relógio do sistema.
• A função MDY cria uma data SAS baseada nos valores numéricos de mês, dia e ano.
• A função YRDIF calcula uma idade precisa entre duas datas. Há vários valores possíveis para o
terceiro argumento. No entanto, 'AGE' deve ser usado para maior acurácia.

Demo
1. Abra o p104d04.sas na pasta demos e encontre a sessão Demo do programa. Crie a variável
YearsPassed usando a função YRDIF. A diferença em anos deve tomar como base o valor de
Date e a data de hoje.
2. Crie Anniversary como dia e mês da tempestade no ano corrente.
3. Formate YearsPassed para arredondar o valor em uma casa decimal, e Date e Anniversary
como MM/DD/YYYY. Selecione e execute o DATA step.
data storm_damage2;
set pg1.storm_damage;
drop Summary;
*Add assignment and FORMAT statements;
YearsPassed=yrdif(Date,today(),'age');
Anniversary=mdy(month(Date),day(Date),year(today()));
format YearsPassed 4.1 Date Anniversary mmddyy10.;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.2 Calculando Novas Colunas 4-25

Nota: Os valores de YearsPassed e Anniversary serão diferentes, por estarem baseados na


data corrente. Podem ser diferentes a cada execução.

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-26 Capítulo 4 Preparando os Dados

Exercício

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas.

Nível 1
4. Criando Novas Colunas
Crie uma nova tabela chamada np_summary_update a partir de pg1.np_summary. Crie duas
colunas novas: SqMiles e Camping.
a. Abra o p104p04.sas na pasta practices. Crie uma nova coluna chamada SqMiles
multiplicando Acres por .0015625.
b. Crie uma nova coluna chamada Camping como a soma de OtherCamping, TentCampers,
RVCampers e BackcountryCampers.
c. Formate SqMiles e Camping para incluir separadores de milhares e zero casas decimais.
d. Modifique o statement KEEP para incluir as duas colunas novas. Execute o programa.

Nível 2
5. Criando Colunas Novas Usando Funções Caracter e Data.
A tabela pg1.eu_occ contém colunas individuais para pernoites em hotéis, acomodações de
curta duração e campings para cada mês e ano. A coluna YearMon é caracter.
a. Abra um programa novo. Escreva um DATA step para criar uma tabela temporária chamada
eu_occ_total baseada na tabela pg1.eu_occ. Crie as seguintes novas colunas:
• Year – O ano (quatro dígitos) extraído de YearMon.
• Month – O mês (dois dígitos) extraído de YearMon.
• ReportDate – O primeiro dia do mês do relatório.
Nota: Use a função MDY e as novas colunas Year e Month.
• Total – O total de pernoites em qualquer estabelecimento. Formate a nova coluna para
mostrar os separadores de milhares.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.2 Calculando Novas Colunas 4-27

b. Formate Hotel, ShortStay, Camp e Total com separadores de milhares. Formate


ReportDate para mostrar os valores no formato JAN2018.
c. Mantenha Country, Hotel, ShortStay, Camp, ReportDate e Total na nova tabela.

Desafio
6. Criando uma Nova Coluna com a Função SCAN
a. Acesse o SAS Help para aprender sobre a função SCAN.
b. Crie um programa novo. Crie uma tabela temporária nova chamada np_summary2
baseada na tabela pg1.np_summary. Use a função SCAN para criar uma coluna nova
chamada ParkType que é a última palavra na coluna ParkName.
Nota: Use um número negativo como o segundo argumento para contar as palavras da
direita para a esquerda na variável caracter.
c. Mantenha Reg, Type, ParkName e ParkType na tabela de saída.

Fim do Exercício

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-28 Capítulo 4 Preparando os Dados

4.3 Processamento Condicional

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-29

Processamento Condicional com IF-THEN

Cenário
Use a sintaxe IF-THEN para atribuir valores condicionalmente a uma nova coluna.

Arquivos
• p104d05.sas
• storm_summary – uma tabela SAS que contém uma linha por tempestade entre 1980 e 2016

Sintaxe

IF expressão THEN statement;

Notas
• A expressão após o IF define uma condição que é avaliada como falsa ou verdadeira para cada
linha.
• Se a condição for verdadeira o statement após o THEN será executado.
• É permitido apenas um statement após o THEN.

Demo
1. Abra o p104d05.sas na pasta demos e encontre a seção Demo do programa. Crie uma coluna
chamada PressureGroup baseada nas seguintes especificações:
MinPressure<=920  1
MinPressure>920  0
data storm_new;
set pg1.storm_summary;
keep Season Name Basin MinPressure PressureGroup;
*Add IF-THEN statements;
if MinPressure<=920 then PressureGroup=1;
if MinPressure>920 then PressureGroup=0;
run;
2. Selecione e execute o DATA step, e examine os dados. Qual valor é atribuído a PressureGroup
quando MinPressure é missing?
3. Insira um statement IF-THEN antes do statement IF-THEN existente para atribuir
PressureGroup=. se MinPressure for missing.
data storm_new;
set pg1.storm_summary;
keep Season Name Basin MinPressure PressureGroup;
*Add IF-THEN statements;
if MinPressure=. then PressureGroup=.;
if MinPressure<=920 then PressureGroup=1;
if MinPressure>920 then PressureGroup=0;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-30 Capítulo 4 Preparando os Dados

4. Selecione e execute o DATA step. Quais valores foram atribuídos a PressureGroup?


Quando MinPressure for missing, as duas primeiras condições IF são verdadeiras. O
último statement de atribuição de valor determina o valor de PressureGroup.

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-31

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-32 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-33

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-34 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-35

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-36 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-37

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-38 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-39

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-40 Capítulo 4 Preparando os Dados

Processando Múltiplos Statements com IF-THEN/DO

Cenário
Use a sintaxe IF-THEN/DO para executar diversos statements para cada condição.

Arquivos
• p104d07.sas
• storm_summary – uma tabela SAS que contém uma linha por tempestade entre 1980 e 2016

Sintaxe

IF expressão THEN DO;


<statements executáveis>
END;
ELSE IF expressão THEN DO;
<statements executáveis>
END;
ELSE DO;
<statements executáveis>
END;

Notas
• Após o statement IF-THEN/DO, liste qualquer número de statements executáveis.
• Feche cada bloco DO com um statement END.

Demo
Abra o p104d07.sas na pasta demos e encontre a seção Demo do programa. Modifique os
statements IF-THEN para usar a sintaxe IF-THEN/DO para gravar as linhas na tabela indian,
atlantic ou pacific dependendo do valor de Ocean. Selecione e execute o DATA step.
data indian atlantic pacific;
set pg1.storm_summary;
length Ocean $ 8;
keep Basin Season Name MaxWindMPH Ocean;
Basin=upcase(Basin);
OceanCode=substr(Basin,2,1);
*Modify the program to use IF-THEN-DO syntax;
if OceanCode="I" then do;
Ocean="Indian";
output indian;
end;
else if OceanCode="A" then do;
Ocean="Atlantic";
output atlantic;
end;
else do;
Ocean="Pacific";
output pacific;
end;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-41

Tabela indian

Tabela atlantic

Tabela pacific

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-42 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-43

Links
• Faça o curso SAS SQL 1
(https://support.sas.com/edu/schedules.html?ctry=us&crs=SQL1)
• Leia esse blog: Reasons to love PROC DS2.
(https://blogs.sas.com/content/sgf/2016/02/19/reasons-love-proc-ds2/)
• Faça o curso DS2 Programming
(https://support.sas.com/edu/schedules.html?ctry=us&crs=DS2)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-44 Capítulo 4 Preparando os Dados

Exercício

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas.

Nível 1
7. Processando Statements Condicionalmente com IF-THEN/ELSE
A tabela pg1.np_summary contêm estatísticas de uso público do Serviço Nacional de Parques.
Os valores da coluna Type representam o tipo de parque como um código. Crie uma nova
coluna chamada ParkType que contenha a descrição dos tipos.
a. Abra o p104p07.sas na pasta practices. Execute o programa e veja a saída gerada.

b. No DATA step use statements IF-THEN/ELSE para criar uma nova coluna chamada
ParkType com base no valor de Type.

Type ParkType

NM Monument

NP Park

NPRE, PRE, or PRESERVE Preserve

NS Seashore

RVR or RIVERWAYS River

c. Modifique o step PROC FREQ para gerar um relatório de frequência para ParkType.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-45

Nível 2
8. Processando Statements Condicionalmente com Grupos DO
Use o processamento condicional para dividir pg1.np_summary em duas tabelas: parks e
monuments.
a. Crie um programa novo. Escreva um DATA step para criar duas tabelas temporárias
chamadas parks e monuments baseadas na tabela pg1.np_summary. Leia apenas os
parques nacionais e monumentos da tabela de entrada. (Type = NP ou NM.)
b. Crie uma nova coluna Campers com a soma de todas as colunas que tenham contagem de
campistas. Formate a coluna para mostrar separadores de milhares.
c. Quando Type for NP, crie uma nova coluna chamada ParkType com o valor Park e grave a
linha na tabela parks. Quando Type for NM, atribua a ParkType o valor Monument e grave
a linha na tabela monuments.
d. Mantenha Reg, ParkName, DayVisits, OtherLodging, Campers e ParkType nas duas
tabelas de saída.
Tabela parks

Tabela monuments

Desafio
9. Processando Statements Condicionalmente com Grupos SELECT-WHEN
Os statements SELECT e WHEN podem ser usados no DATA step como alternativas aos
statements IF-THEN para processar código condicionalmente.
a. Use o SAS Help ou a online documentation para ler sobre o uso dos statements SELECT e
WHEN no DATA step.
b. Refaça o exercício 8 usando grupos de statements SELECT e WHEN.
Fim do Exercício

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-46 Capítulo 4 Preparando os Dados

4.4 Soluções
Soluções dos Exercícios
1. Criando uma tabela SAS
data eu_occ2016;
set pg1.eu_occ;
where YearMon like "2016%";
format Hotel ShortStay Camp comma17.;
drop geo;
run;
2. Criando uma Tabela SAS permanente
libname out "s:/workshop/output";

data out.fox;
set pg1.np_species;
where Category='Mammal' and Common_Names like '%Fox%'
and Common_Names not like '%Squirrel%';
drop Category Record_Status Occurrence Nativeness;
run;

proc sort data=out.fox;


by Common_Names;
run;
3. 3. Criando uma Tabela SAS usando Variáveis Macro
*Before macro variable;
data mammal;
set pg1.np_species;
where Category="Mammal";
drop Abundance Seasonality Conservation_Status;
run;

proc freq data=mammal;


tables Record_Status;
run;

*Using macro variable;


%let cat=Bird;

data &cat;
set pg1.np_species;
where Category="&cat";
drop Abundance Seasonality Conservation_Status;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.4 Soluções 4-47

proc freq data=&cat;


tables Record_Status;
run;
4. Criando Novas Colunas
data np_summary_update;
set pg1.np_summary;
keep Reg ParkName DayVisits OtherLodging Acres SqMiles
Camping;
SqMiles=Acres*.0015625;
Camping=sum(OtherCamping,TentCampers,
RVCampers,BackcountryCampers);
format SqMiles comma6. Camping comma10.;
run;
5. Criando Colunas Novas Usando Funções Caracter e Data
data eu_occ_total;
set pg1.eu_occ;
Year=substr(YearMon,1,4);
Month=substr(YearMon,6,2);
ReportDate=MDY(Month,1,Year);
Total=sum(Hotel,ShortStay,Camp);
format Hotel ShortStay Camp Total comma17.
ReportDate monyy7.;
keep Country Hotel ShortStay Camp ReportDate Total;
run;
6. Criando uma Nova Coluna com a Função SCAN
data np_summary2;
set pg1.np_summary;
ParkType=scan(parkname,-1);
keep Reg Type ParkName ParkType;
run;
7. Processando Statements Condicionalmente com IF-THEN/ELSE
data park_type;
set pg1.np_summary;
length ParkType $ 8;
if Type='NM' then ParkType='Monument';
else if Type='NP' then ParkType='Park';
else if Type in ('NPRE', 'PRE', 'PRESERVE') then
ParkType='Preserve';
else if Type='NS' then ParkType='Seashore';
else if Type in ('RVR', 'RIVERWAYS') then ParkType='River';
run;

proc freq data=park_type;


tables ParkType;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-48 Capítulo 4 Preparando os Dados

8. 8. Processando Statements Condicionalmente com Grupos DO


data parks monuments;
set pg1.np_summary;
where type in ('NM', 'NP');
Campers=sum(OtherCamping, TentCampers, RVCampers,
BackcountryCampers);
format Campers comma17.;
length ParkType $ 8;
if type='NP' then do;
ParkType='Park';
output parks;
end;
else do;
ParkType='Monument';
output monuments;
end;
keep Reg ParkName DayVisits OtherLodging Campers ParkType;
run;
9. Processando Statements Condicionalmente com Grupos SELECT-WHEN
data parks monuments;
set pg1.np_summary;
where type in ('NM', 'NP');
Campers=sum(OtherCamping, TentCampers, RVCampers,
BackcountryCampers);
format Campers comma17.;
length ParkType $ 8;
select (type);
when ('NP') do;
ParkType='Park';
output parks;
end;
otherwise do;
ParkType='Monument';
output monuments;
end;
end;
keep Reg ParkName DayVisits OtherLodging Campers ParkType;
run;
Fim das Soluçoes

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.4 Soluções 4-49

Soluções das Atividades e Perguntas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-50 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.4 Soluções 4-51

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-52 Capítulo 4 Preparando os Dados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.4 Soluções 4-53

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
Capítulo 5. Gerando Análises e
Relatórios
5.1 Melhorando Relatórios com Títulos, Rodapés e Labels 5-3

Demonstração: Melhorando os Relatórios 5-9

5.2 Criando Relatórios de Frequência 5-12

Demonstração: Criando Relatórios e Gráficos de Frequência 5-14

Demonstração: Criando Relatórios de Frequências Cruzadas 5-17

Exercício 5-19

5.3 Criando Relatórios Estatísticos Sumariados 5-23

Demonstração: Criando Relatórios Estatísticos Sumarizados 5-24

Exercício 5-30

5.4 Soluções 5-33

Soluções dos Exercícios 5-33

Soluções das Atividades e Perguntas 5-36


5-2 Capítulo 5 Gerando Análises e Relatórios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.1 Melhorando Relatórios com Títulos, Rodapés e Labels 5-3

5.1 Melhorando Relatórios com Títulos,


Rodapés e Labels

Agora que o acesso, validação e manipulação dos dados já ficaram para trás, estamos prontos para
tratar daquilo que eu considero o pico do processo de programação: analisar os dados e gerar
relatórios. Analisar os dados pode significar muitas coisas diferentes. Pode ser uma sumarização
básica para examinar o que aconteceu no passado, ou pode ser algoritmos complexos de data
mining ou machine learning para predizer o que vai acontecer no futuro. Nesse capítulo nos
concentraremos na sumarização dos dados. Especificamente, aprenderemos mais sobre como usar
PROCs que tocamos durante a exploração: PRINT, MEANS e FREQ. Mostraremos também como
usar títulos, labels em colunas, notas de rodapé e variáveis macro para melhorar seus relatórios e
torna-los mais significativos.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-4 Capítulo 5 Gerando Análises e Relatórios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.1 Melhorando Relatórios com Títulos, Rodapés e Labels 5-5

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-6 Capítulo 5 Gerando Análises e Relatórios

Nota: Lembre-se de usar aspas (não apóstrofes) ao referenciar variáveis macro em textos.

Labels podem ter no máximo 256 caracteres e podem incluir qualquer texto.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.1 Melhorando Relatórios com Títulos, Rodapés e Labels 5-7

No statement PROC PRINT você pode usar ou a opção LABEL ou a SPLIT= para exibir labels no
relatório. Quando você usa a opção LABEL, o SAS decide se deve dividir o label em várias linhas e,
se for o caso, onde fazer a divisão. A opção SPLIT= permite que você defina um caracter que força
a divisão dos labels.
proc print data=sashelp.cars split="*";
var Make Model MSRP MPG_Highway MPG_City;
label MSRP="Manufacturer Suggested*Retail Price"
MPG_Highway="Highway Miles*per Gallon";
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-8 Capítulo 5 Gerando Análises e Relatórios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.1 Melhorando Relatórios com Títulos, Rodapés e Labels 5-9

Melhorando os Relatórios

Cenário
Uso de títulos, notas de rodapé, labels e agrupamento para melhorar os relatórios.

Arquivos
• p105d01.sas
• storm_final – uma tabela SAS que contém uma linha por tempestade de 1980 a 2017. Os dados
foram limpos e preparados previamente usando o DATA step.

Sintaxe

TITLEn "título";
FOOTNOTEn "nota-de-rodapé";

LABEL coluna="texto-label "


coluna="texto-label ";

Relatório Agrupado (classificar antes)


PROC nome da PROC;
BY coluna(s);
RUN;

Notas
• TITLE é um statement global que estabelece um título permanente para todos os relatórios que
forem criados na sessão SAS.
• Você pode ter um máximo de 10 linhas de título. Use um número de 1 a 10 após a palavra-chave
TITLE para indicar o número da linha. TITLE e TITLE1 são equivalentes.
• Títulos podem ser substituídos por outro statement TITLE com o mesmo número. TITLE; limpa
todos os títulos.
• Você pode definir também notas de rodapé para qualquer relatório, usando o statement
FOOTNOTE. As mesmas regras dos títulos se aplicam aos rodapés.
• Podem ser usados Labels para oferecer cabeçalhos de colunas mais descritivos. Um label pode
incluir qualquer texto com até 256 caracteres.
• Todas PROCs exibem labels automaticamente, exceto a PROC PRINT. Você tem que incluir a
opção LABEL no statement PROC PRINT para exibir os labels.
• Para criar um relatório agrupado é necessário usar antes a PROC SORT para ordenar os dados
pela(s) coluna(s) de agrupamento. Use então o mesmo statement BY no relatório.

Demo
1. Abra o p105d01.sas na pasta demos e encontre a seção Demo do programa. Inclua um step
PROC SORT antes da PROC PRINT para classificar pg1.storm_final por BasinName e
MaxWindMPH em ordem descendente. Crie uma tabela temporária chamada storm_sort. Filtre
as linhas para incluir apenas MaxWindMPH>156.
proc sort data=pg1.storm_final out=storm_sort;
by BasinName descending MaxWindMPH;
where MaxWindMPH > 156;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-10 Capítulo 5 Gerando Análises e Relatórios

2. Modifique o step PROC PRINT para ler a tabela storm_sort e agrupar o relatório por
BasinName.
3. Adicione o título: Category 5 Storms. Ao final limpe o título para futuros resultados.
4. Adicione para as colunas abaixo e garanta que a PROC PRINT exiba os títulos:
MaxWindMPH  Max Wind (MPH)
MinPressure  Min Pressure
StartDate  Start Date
StormLength  Length of Storm (days)
5. Adicione a opção NOOBS no statement PROC PRINT para suprimir a coluna OBS. Selecione e
execute a seção Demo.
title "Category 5 Storms";
proc print data=storm_sort label noobs;
by BasinName;
var Season Name MaxWindMPH MinPressure StartDate StormLength;
label MaxWindMPH="Max Wind (MPH)"
MinPressure="Min Pressure"
StartDate="Start Date"
StormLength="Length of Storm (days)";
run;
title;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.1 Melhorando Relatórios com Títulos, Rodapés e Labels 5-11

Quando o statement LABEL é usado num DATA step os labels são associados às colunas como
atributos permanentes no descritor da tabela. Quando alguma PROC cria um relatório usando
esses dados, os labels são mostrados automaticamente. Observe que a opção LABEL ainda é
necessária na PROC PRINT.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-12 Capítulo 5 Gerando Análises e Relatórios

5.2 Criando Relatórios de Frequência

Usamos a PROC FREQ para validação de dados, mas há muitos outros statements e opções
disponíveis, que podem ser usados para customizar a saída e incluir estatísticas adicionais.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.2 Criando Relatórios de Frequência 5-13

Comece com relatórios de frequência baseados em colunas individuais. Por default cada coluna
listada no statement TABLES gera um relatório de frequência separado, que incluí número e
percentual de linhas para cada valor na tabela, bem como frequência e percentual acumulados. Os
números incluídos nesse relatório podem ser customizados por opções nos statements PROC
FREQ e TABLES.
Veja o SAS Help para documentação sobre a PROC FREQ:
http://support.sas.com/documentation/cdl/en/procstat/66703/HTML/default/viewer.htm#procstat_freq
_syntax.htm

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-14 Capítulo 5 Gerando Análises e Relatórios

Criando Relatórios e Gráficos de Frequência

Cenário
Use statements e opções disponíveis na PROC FREQ para customizar relatórios e gráficos de
frequência.

Arquivos
• p105d02.sas
• storm_final – uma tabela SAS que contém uma linha por tempestade de 1980 a 2017. Os dados
foram limpos e preparados previamente usando o DATA step.

Sintaxe

PROC FREQ DATA=tabela de entrada <opções da PROC>;


TABLES coluna(s) </ opções>;
RUN;

Opções do statement PROC FREQ:


ORDER=FREQ|FORMATTED|DATA
NLEVELS

Opções do statement TABLES:


NOCUM
NOPERCENT
PLOT=FREQPLOT
(necessário ativar ODS Graphics)
OUT=tabela de saída

Notas
• Podem ser usados um ou mais statements TABLES para definir as tabelas de frequência e
opções.
• O ODS Graphics habilita as opções dos gráficos a ser usadas no statement TABLES.
• Os statements WHERE, FORMAT, LABEL e BY podem ser usados na PROC FREQ para
customizar o relatório.

Demo
Nota: Selecione o programa demo e execute cada um dos steps.
1. Abra o p105d02.sas na pasta demos e encontre a seção Demo do programa. Selecione e
execute a PROC FREQ. Examine os resultados.
2. No statement PROC FREQ inclua a opção ORDER=FREQ para ordenar os resultados em
ordem descendente de frequência. Adicione a opção NLEVELS para incluir uma tabela com o
número de valores distintos.
proc freq data=pg1.storm_final order=freq nlevels;
3. Adicione a opção NOCUM no statement TABLES para suprimir as colunas acumuladas.
tables BasinName Season / nocum;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.2 Criando Relatórios de Frequência 5-15

4. Mude Season para StartDate no statement TABLES. Inclua um statement FORMAT para
mostrar StartDate como o nome do mês (MONNAME.).
proc freq data=pg1.storm_final order=freq nlevels;
tables BasinName StartDate / nocum;
format StartDate monname.;
run;
5. Adicione o statement ODS GRAPHICS ON antes da PROC FREQ. Use a opção
PLOTS=FREQPLOT no statement TABLES para criar um gráfico de barras. Use as opções do
gráfico ORIENT=HORIZONTAL e SCALE=PERCENT.
ods graphics on;
proc freq data=pg1.storm_final order=freq nlevels;
tables BasinName StartDate /
nocum plots=freqplot(orient=horizontal scale=percent);
format StartDate monname.;
run;
6. Inclua o título Frequency Report for Basin and Storm Month. Desative o título da PROC com
o statement ODS NOPROCTITLE. Inclua um statement LABEL para mostrar BasinName como
Basin e StartDate como Storm Month. Limpe os títulos e ative os títulos das PROCs de volta.
ods graphics on;
ods noproctitle;
title "Frequency Report for Basin and Storm Month";
proc freq data=pg1.storm_final order=freq nlevels;
tables BasinName StartDate /
nocum plots=freqplot(orient=horizontal scale=percent);
format StartDate monname.;
label BasinName="Basin"
StartDate="Storm Month";
run;
title;
ods proctitle;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-16 Capítulo 5 Gerando Análises e Relatórios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.2 Criando Relatórios de Frequência 5-17

Criando Relatórios de Frequências Cruzadas

Cenário
Crie um relatório de frequências cruzadas com a PROC FREQ e customize os resultados com
opções.

Arquivos
• p105d03.sas
• storm_final – uma tabela SAS que contém uma linha por tempestade de 1980 a 2017. Os dados
foram limpos e preparados previamente usando o DATA step.

Sintaxe

PROC FREQ DATA=tabela de entrada;


TABLES coluna*coluna
</ opções>;
RUN;

Opções do statement PROC FREQ:


NOPRINT

Opções do statement TABLES:


NOROW
NOCOL
NOPERCENT
CROSSLIST
LIST
OUT=tabela de saída

Notas
• Quando você põe um asterisco entre duas colunas no statement TABLES, a PROC FREQ produz
um relatório de frequências cruzadas. Os valores da primeira coluna são as linhas do relatório, e
os valores da segunda coluna são as colunas do relatório.
• Use opções no statement TABLES para customizar a estrutura da tabela e as estatísticas que
serão mostradas.

Demo
Nota: Selecione e execute o step PROC FREQ após cada alteração.
1. Abra o p105d03.sas na pasta demos e encontre a seção Demo do programa. Selecione e
execute o step PROC FREQ, e examine os resultados.
2. Adicione as opções NOPERCENT, NOROW e NOCOL no statement TABLES.
tables StartDate*BasinName / norow nocol nopercent;
3. Apague as opções do statement TABLES e adicione a opção CROSSLIST.
tables StartDate*BasinName / crosslist;
4. Mude a opção CROSSLIST para LIST no statement TABLES.
tables StartDate*BasinName / list;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-18 Capítulo 5 Gerando Análises e Relatórios

5. Apague as opções anteriores e acrescente OUT=STORMCOUNTS no statement TABLES.


Adicione NOPRINT no statement PROC FREQ para suprimir o relatório.
proc freq data=pg1.storm_final noprint;
tables StartDate*BasinName / out=stormcounts;
format StartDate monname.;
label BasinName="Basin"
StartDate="Storm Month";
run;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.2 Criando Relatórios de Frequência 5-19

Exercício

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas.

Nível 1
1. Criando Relatórios de Frequência Simples
A tabela pg1.np_species contém uma linha para cada espécie encontrada em cada parque
nacional. Use essa tabela para analisar as categorias de espécies.
a. Crie um programa novo. Escreva um step PROC FREQ para analisar as linhas de
pg1.np_species.
1) Use o statement TABLES para gerar uma tabela de frequência para Category.
2) Use a opção NOCUM para suprimir as colunas acumuladas.
3) Use a opção ORDER=FREQ no statement PROC FREQ para ordenar os resultados em
ordem decrescente de frequência.
4) Use Categories of Reported Species como título do relatório.
5) Execute o programa e veja os resultados.

b. Modifique o step PROC FREQ fazendo as seguintes alterações:


1) Inclua apenas as linhas em que Species_ID começa com EVER e Category não seja
igual a Vascular Plant.
Nota: EVER representa o Parque Nacional de Everglades.
2) Ative a opção Graphics do ODS antes do step PROC FREQ e suprima o título da
PROC.
Adicione a opção PLOTS=FREQPLOT para exibir um gráfico de frequência.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-20 Capítulo 5 Gerando Análises e Relatórios

3) Adicione in the Everglades como segundo título. Execute o programa e veja os


resultados.

Nível 2
2. Criando Relatórios de Frequência cruzada
A tabela pg1.np_codelookup é usada basicamente para encontrar o nome ou o código de um
parque. Mas ela também inclui colunas como o tipo e a região do parque. Use-a para analisar a
frequência dos tipos de parques nas diversas regiões.
a. Crie um novo programa. Escreva um step PROC FREQ para analisar as linhas de
pg1.np_codelookup. Crie um relatório de referência cruzada para Type por Region. Exclua
qualquer tipo de parque que contenha a palavra Other. Os níveis com mais linhas devem vir
em primeiro lugar. Suprima as colunas de percentuais. Use Park Types by Region como
título do relatório.
b. Execute o programa e veja os resultados. Identifique os três maiores tipos de parques,
baseado na frequência total.
Nota: Os nomes das estatísticas aparecem na tabela principal no Enterprise Guide se o
formato de saída for SAS Report.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.2 Criando Relatórios de Frequência 5-21

c. Modifique o step PROC FREQ limitando os tipos de parques aos três determinados na etapa
anterior. Adicionalmente suprima a exibição das colunas de percentuais e exiba a tabela
usando a opção CROSSLIST. Adicione um gráfico de frequência que agrupe as barras pela
variável da linha, exiba os percentuais das linhas e esteja orientado horizontalmente. Use
Selected Park Types by Region como título do relatório. Execute o programa.
Nota: Use a documentação SAS para aprender como as opções GROUPBY=, SCALE= e
ORIENT= podem ser usadas para controlar a aparência do relatório.

Desafio
3. Criando um Gráfico Customizado de uma Tabela de Frequência Cruzada
A PROC SGPLOT pode ser usada para criar gráficos estatísticos como histogramas e gráficos
de regressão, além de gráficos simples como gráficos de barras e de linhas. Statements e
opções permitem controlar a aparência do gráfico e adicionar recursos como legendas e linhas
de referência.
a. Abra o p105p03.sas na pasta practices. Selecione e execute o primeiro statement TITLE e
o step PROC FREQ, e examine o gráfico gerado. O programa gera um subset da tabela
pg1.np_codelookup para três tipos de parques: National Historic Site, National Monument
e National Park. O gráfico usa um layout de barras empilhadas e orientação horizontal.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-22 Capítulo 5 Gerando Análises e Relatórios

b. Para criar um gráfico de barras de frequência mais customizado, a PROC SGPLOT pode
ser usada com a tabela pg1.np_codelookup. Examine o step PROC SGPLOT no programa
demo.
1) O statement HBAR cria um gráfico de barras horizontais com barras separadas para
cada Region. A opção GROUP= segmenta cada barra pelos valores únicos de Type.
2) O statement KEYLEGEND customiza a aparência e a localização da legenda.
3) O statement XAXIS adiciona linhas de referência ao eixo horizontal.
c. Use o SAS Help ou o autocomplete para encontrar opções adicionais no statement HBAR
para customizar a aparência do gráfico.
1) Exiba labels em cada segmento da barra.
2) Mude os atributos de preenchimento de cada barra para deixar a cor 50% transparente.
3) Aplique valores diferentes para a opção DATASKIN para mudar os efeitos de cores das
barras.

Fim do Exercício

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.3 Criando Relatórios Estatísticos Sumarizados 5-23

5.3 Criando Relatórios Estatísticos


Sumarizados

Podemos usar a PROC MEANS para gerar relatórios complexos, que podem incluir diversas
estatísticas e agrupamentos de dados.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-24 Capítulo 5 Gerando Análises e Relatórios

Criando Relatórios Estatísticos Sumariados

Cenário
Use os statements e opções que estão disponíveis na PROC MEANS para criar um relatório
estatístico sumarizado.

Arquivos
• p105d04.sas
• storm_final – uma tabela SAS que contém uma linha por tempestade de 1980 a 2017. Os dados
foram limpos e preparados previamente usando o DATA step.

Sintaxe

PROC MEANS DATA=tabela-de-entrada lista-de-estatísticas;


VAR coluna(s);
CLASS coluna(s);
WAYS n;
RUN;

Notas
• Opções no statement PROC MEANS controlam a estatísticas a serem incluídas no relatório.
• O statement CLASS especifica as colunas para agrupar os dados antes de calcular as
estatísticas.
• O statement WAYS especifica o número de modos para fazer combinações únicas das colunas
do CLASS.

Demo
Nota: Selecione e execute o step PROC MEANS após cada etapa.
1. Abra o p105d04.sas na pasta demos e encontre a seção Demo do programa. Execute o step e
examine o relatório inicial.
2. Liste as seguintes estatísticas no statement PROC MEANS: MEAN, MEDIAN, MIN e MAX.
Adicione a opção MAXDEC=0 para arredondar as estatísticas para o inteiro mais próximo.
proc means data=pg1.storm_final mean median min max maxdec=0;
3. O statement CLASS pode ser usado para calcular estatísticas por grupos. Inclua um statement
CLASS e liste a coluna BasinName.
Nota: O statement CLASS não exige que os dados estejam classificados.
proc means data=pg1.storm_final mean median min max maxdec=0;
var MaxWindMPH;
class BasinName;
run;
4. Adicione StormType como uma coluna adicional no statement CLASS statement. Execute o
programa e observe que foi gerado um relatório com estatísticas calculadas para a combinação
dos valores de BasinName e StormType.
class BasinName StormType;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.3 Criando Relatórios Estatísticos Sumarizados 5-25

5. O statement WAYS pode ser usado para indicar a combinação das colunas de classe a ser
usada para gerar o relatório. Adicione o statement WAYS com o valor 1.
proc means data=pg1.storm_final mean median min max maxdec=0;
var MaxWindMPH;
class BasinName StormType;
ways 1;
run;
6. Mude o statement WAYS para 0, 1, and 2.
proc means data=pg1.storm_final mean median min max maxdec=0;
var MaxWindMPH;
class BasinName StormType;
ways 0 1 2;
run;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-26 Capítulo 5 Gerando Análises e Relatórios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.3 Criando Relatórios Estatísticos Sumarizados 5-27

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-28 Capítulo 5 Gerando Análises e Relatórios

O mapa foi criado com a PROC SGMAP, que exige SAS 9.4M5 ou posterior.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.3 Criando Relatórios Estatísticos Sumarizados 5-29

Links
• Reveja o SAS 9.4 ODS Graphics documentation.
(https://go.documentation.sas.com/?docsetId=grsggs&docsetTarget=p0thjeg6x02ga7n1392nsymc
3hkp.htm&docsetVersion=9.4&locale=en)
• Faça o curso ODS Graphics: Essentials.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=ODSGIN)
• Use isso ODS Graphics tip sheet como referência.
(https://support.sas.com/rnd/app/ODSGraphics/TipSheet_ODSGraphics.pdf)
• Faça o treinamento e-learning gratuito Statistics 1: Introduction to ANOVA, Regression, and
Logistic Regression (disponível apenas em inglês).
(https://support.sas.com/edu/schedules.html?ctry=us&crs=STAT1)
• Verifique outras opções de treinamento para advanced analytics.
(http://support.sas.com/training/us/paths/stat.html)
• Aprenda a usar a PROC REPORT e a PROC TABULATE no curso SAS Report Writing 1:
Essentials.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=RPT1)
• Leia PROC REPORT by Example: Techniques for Building Professional Reports Using SAS.
(https://www.sas.com/store/books/categories/examples/proc-report-by-example-techniques-for-
building-professional-reports-using-sas-/prodBK_65991_en.html)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-30 Capítulo 5 Gerando Análises e Relatórios

Exercício

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas.

Nível 1
4. Produzindo um Relatório Estatístico Descritivo
A tabela pg1.np_westweather contém informações referentes ao clima para quatro parques
nacionais: Death Valley National Park, Grand Canyon National Park, Yellowstone National Park
e Zion National Park. Use a PROC MEANS para analisar os dados dessa tabela.
a. Crie um programa novo. Escreva um step PROC MEANS para analisar as linhas da
pg1.np_westweather com as seguintes especificações:
1) Gere as estatísticas média e valores mínimo e máximo para as colunas Precip, Snow,
TempMin e TempMax.
2) Use a opção MAXDEC= para exibir os valores com um máximo de duas casas decimais.
3) Use o statement CLASS para agrupar os dados por Year e Name.
4) Use Weather Statistics by Year and Park como título para o relatório. Execute o
programa e veja os resultados.

Nível 2
5. Criando uma Tabela de Saída com Colunas Customizadas
A tabela pg1.np_westweather contém informações referentes ao clima para quatro parques
nacionais: Death Valley National Park, Grand Canyon National Park, Yellowstone National Park
e Zion National Park. Use a PROC MEANS para analisar os dados dessa tabela.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.3 Criando Relatórios Estatísticos Sumarizados 5-31

a. Crie um programa novo. Escreva um step PROC MEANS para analisar as linhas de
pg1.np_westweather cujos valores de Precip não sejam igual a zero. Analise os volumes
de precipitações por Name e Year. Crie apenas uma tabela de saída, chamada rainstats,
com colunas para as estatísticas N e SUM. Chame as colunas de RainDays e TotalRain
respectivamente. Grave apenas as linhas com a combinação de Year e Name.
b. Escreva um step PROC PRINT para imprimir a tabela rainstats. Suprima a impressão do
número da linha, e use labels. Exiba as colunas na seguinte ordem: Name, Year, RainDays
e TotalRain. Atribua o label Park Name à coluna Name, Number of Days Raining à
RainDays e Total Rain Amount (inches) à TotalRain. Use Rain Statistics by Year and
Park como título do relatório.
c. Execute o programa e veja os resultados.

Desafio
6. Identificando os Três Maiores Valores com Tabela de Saída Estatística
a. Crie um programa novo. Escreva um step PROC MEANS para analisar as linhas da
pg1.np_multiyr e crie uma tabela chamada top3parks com os seguintes atributos:
1) Suprima a geração do relatório da PROC MEANS.
2) Analise Visitors agrupando por Region e Year.
3) Não grave as colunas _FREQ_ e _TYPE_ na top3parks e grave apenas as linhas que
sejam resultado da combinação de Region e Year.
4) Crie uma coluna para TotalVisitors na tabela de saída.
5) Inclua na tabela de saída os três maiores parques em termos de número de visitantes.
Resolva automaticamente conflitos na coluna names quando for associada às novas
colunas na tabela de saída.
Nota: Use o SAS Help para aprender sobre a opção IDGROUP do statement OUTPUT.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-32 Capítulo 5 Gerando Análises e Relatórios

b. Execute o programa e veja os resultados.

Fim do Exercício

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.4 Soluções 5-33

5.4 Soluções
Soluções dos Exercícios
1. Criando Relatórios de Frequência Simples
/*part a*/
title1 "Categories of Reported Species";
proc freq data=pg1.np_species order=freq;
tables Category / nocum;
run;

/*part b*/
ods graphics on;
ods noproctitle;
title1 "Categories of Reported Species";
title2 "in the Everglades";
proc freq data=pg1.np_species order=freq;
tables Category / nocum plots=freqplot;
where Species_ID like "EVER%" and
Category ne "Vascular Plant";
run;
title;
2. Criando Relatórios de Frequência cruzada
Quais são os três maiores tipos de parques, baseado na frequência total?
National Historic Site, National Monument e National Park
/*part a, b*/
title1 'Park Types by Region';
proc freq data=pg1.np_codelookup order=freq;
tables Type*Region / nocol;
where Type not like '%Other%';
run;

/*part c*/
title1 'Selected Park Types by Region';
ods graphics on;
proc freq data=pg1.np_codelookup order=freq;
tables Type*Region / nocol crosslist
plots=freqplot(groupby=row scale=grouppercent
orient=horizontal);
where Type in ('National Historic Site', 'National Monument',
'National Park');
run;
title;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-34 Capítulo 5 Gerando Análises e Relatórios

3. Criando um Gráfico Customizado de uma Tabela de Frequência Cruzada


/*part a*/
title1 'Counts of Selected Park Types by Park Region';
ods graphics on;
proc freq data=pg1.np_codelookup order=freq;
tables Type*Region / crosslist plots=freqplot(twoway=stacked
orient=horizontal);
where Type in ('National Historic Site', 'National Monument',
'National Park');
run;

/*part b */
title1 'Counts of Selected Park Types by Park Region';
ods graphics on;
proc freq data=pg1.np_codelookup order=freq noprint;
tables Type*Region / out=park_freq;
where Type in ('National Historic Site', 'National Monument',
'National Park');
run;

/*part c*/
proc sgplot data=pg1.np_codelookup;
where Type in ('National Historic Site', 'National Monument',
'National Park');
hbar region / group=type;
keylegend / opaque across=1 position=bottomright
location=inside;
xaxis grid;
run;

/*part d*/
proc sgplot data=pg1.np_codelookup;
where Type in ('National Historic Site', 'National Monument',
'National Park');
hbar region / group=type seglabel
fillattrs=(transparency=0.5) dataskin=crisp;
keylegend / opaque across=1 position=bottomright
location=inside;
xaxis grid;
run;
title;
4. Produzindo um Relatório Estatístico Descritivo
title1 'Weather Statistics by Year and Park';
proc means data=pg1.np_westweather mean min max maxdec=2;
var Precip Snow TempMin TempMax;
class Year Name;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.4 Soluções 5-35

5. Criando uma Tabela de Saída com Colunas Customizadas


proc means data=pg1.np_westweather noprint;
where Precip ne 0;
var Precip;
class Name Year;
ways 2;
output out=rainstats n=RainDays sum=TotalRain;
run;

title1 'Rain Statistics by Year and Park';


proc print data=rainstats label noobs;
var Name Year RainDays TotalRain;
label Name='Park Name'
RainDays='Number of Days Raining'
TotalRain='Total Rain Amount (inches)';
run;
title;
6. Identificando os Três Maiores Valores com Tabela de Saída Estatística
proc means data=pg1.np_multiyr noprint;
var Visitors;
class Region Year;
ways 2;
output out=top3list(drop=_freq_ _type_)
sum=TotalVisitors /*sum total visitors*/
idgroup(max(Visitors) /*find the max of visitors*/
out[3] /*top 3*/
(Visitors ParkName)=); /*output columns for top 3 parks*/
run;
Fim dos Exercícios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-36 Capítulo 5 Gerando Análises e Relatórios

Soluções das Atividades e Perguntas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.4 Soluções 5-37

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-38 Capítulo 5 Gerando Análises e Relatórios

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5.4 Soluções 5-39

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
Capítulo 6. Exportando Resultados
6.1 Exportando Dados..................................................................................................................... 6-3
Exportando Dados para um Arquivo Excel ..................................................................... 6-7

6.2 Exportando Relatórios ............................................................................................................6-10


Exportando os Resultados para o Excel .......................................................................6-14
Exportando os Resultados para o PDF ........................................................................6-19
Exercício ........................................................................................................................ 6-22

6.3 Soluções ...................................................................................................................................6-26


Soluções dos Exercícios ............................................................................................... 6-26
Soluções das Atividades e Perguntas ...........................................................................6-28
6-2 Capítulo 6 Exportando Resultados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.1 Exportando Dados 6-3

6.1 Exportando Dados

Acessamos, exploramos, limpamos e preparamos os dados e geramos analises e relatórios. Nem


todos que necessitam dos resultados usam SAS. Precisamos então de métodos para exportar os
dados e os relatórios em formatos que sejam facilmente explorados fora do SAS.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-4 Capítulo 6 Exportando Resultados

Tanto o SAS Enterprise Guide quanto o SAS Studio oferecem opções simples, em modo point-and-
click, para exportar dados para diversos formatos de arquivos.
Enterprise Guide: Abria uma tabela no menu Data e selecione Export.
SAS Studio: Clique com o botão direito em uma tabela na seção Libraries do painel de navegação e
selecione Export.

Os identificadores DBMS mais comuns que estão disponíveis no Base SAS são:
• CSV – arquivos separados por vírgulas
• JMP – arquivos JMP, JMP 7 ou posteriores
• TAB – valores delimitados por tabs
• DLM – arquivos delimitados. O separador default é um espaço. Para usar um delimitador
diferente use o statement DELIMITER=.
Identificadores DBMS adicionais que estão incluídos no SAS/ACCESS Interface to PC Files:
• XLSX – Microsoft Excel 2007, 2010 e posterior
• ACCESS – Microsoft Access 2000 e posterior

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.1 Exportando Dados 6-5

Se o SAS Studio ou o Enterprise Guide estiverem configurados para acessar o SAS em um servidor
remoto, ambos oferecem recursos para fazer o download de um arquivo do servidor remoto para
sua máquina local.
SAS Studio – Selecione o arquivo na seção Files and Folders do painel Navigation e clique
Download .
Enterprise Guide – Selecione Tasks  Data  Copy Files.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-6 Capítulo 6 Exportando Resultados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.1 Exportando Dados 6-7

Exportando Dados para um Arquivo Excel

Cenário
Use o engine libname XLSX para exportar tabelas SAS para diversas planilhas num arquivo Excel.

Arquivos
• p106d01.sas
• storm_final – uma tabela SAS que contém uma linha por tempestade de 1980 a 2017. Os dados
foram limpos e preparados previamente usando o DATA step.

Sintaxe

LIBNAME libref XLSX "path/arquivo.xlsx";

Use a libref para as tabelas de saída

LIBNAME libref CLEAR;

Notas
• O engine XLSX exige uma licença do SAS/ACCESS Interface to PC Files.
• O engine XLSX pode ler e gravar dados em arquivos Excel.
• Para gravar dados em um arquivo Excel novo ou existente, use o statement LIBNAME para criar
uma libref que aponte para o arquivo Excel. Use a libref quando você criar tabelas de saída. O
nome da tabela é o nome da planilha no arquivo Excel.

Demo
1. Abra o p106d01.sas na pasta demos e localize a seção Demo do programa. Examine os steps
DATA e PROC MEANS e identifique a tabela SAS que será criada. Selecione e execute o
programa Demo.
2. Adicione um statement LIBNAME para criar uma library chamada xlout que aponte para um
arquivo Excel southpacific.xlsx na pasta output.
Nota: Use a variável macro outpath para referenciar a pasta output. Se a variável macro
outpath não estiver definida, execute o programa libname.sas que foi alterado na
Atividade 6.01.
libname xlout xlsx "&outpath/southpacific.xlsx";

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-8 Capítulo 6 Exportando Resultados

3. Modifique os statements DATA e PROC para gravar as tabelas de saída na library xlout.
libname xlout xlsx "&outpath/southpacific.xlsx";
data xlout.South_Pacific;
set pg1.storm_final;
where Basin="SP";
run;

proc means data=pg1.storm_final noprint maxdec=1;


where Basin="SP";
var MaxWindKM;
class Season;
ways 1;
output out=xlout.Season_Stats n=Count mean=AvgMaxWindKM
max=StrongestWindKM;
run;
4. Adicione um statement LIBNAME para limpar a libref xlout libref. Selecione e execute o
programa demo.
libname xlout clear;
5. Abra o Excel se ele estiver disponível. Abra o arquivo southpacific.xlsx e confirme que ele
contém as planilhas chamadas South_Pacific e Season_Stats.

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.1 Exportando Dados 6-9

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-10 Capítulo 6 Exportando Resultados

6.2 Exportando Relatórios

O SAS desenvolveu o Output Delivery System (ODS) para criar saídas customizadas em diversos
formatos. No SAS as PROCs que geram relatórios, geram, na realidade, objetos de saída, que
podem ser estruturados em um ou mais formatos de saída projetados para serem vistos no SAS ou
em outros softwares. Na terminologia do ODS cada um desses formatos é chamado de destino
(destination). Alguns destinos produzem arquivos de saída muito simples, como arquivos de texto
(ex. o padrão CSV). Outros produzem arquivos de saída complexos, projetados para serem vistos e
manipulados usando softwares externos. Destinos comuns desse tipo incluem MS Excel (XLSX),
MS Word (RFT), MS PowerPoint (PPTX) e Adobe (PDF). Há muitos outros destinos disponíveis no
SAS.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.2 Exportando Relatórios 6-11

Estes são alguns destinos mais usados:


• EXCEL
• CSVALL (arquivo de texto delimitado por vírgulas)
• RTF (rich text format para visualização em processadores de texto, como o Microsoft Word)
• POWERPOINT
• HTML
• PDF

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-12 Capítulo 6 Exportando Resultados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.2 Exportando Relatórios 6-13

O ODS Excel era experimental no SAS 9.4M1 e M2. Tem suporte pleno do SAS 9.4M3 em diante.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-14 Capítulo 6 Exportando Resultados

Exportando os Resultados para o Excel

Cenário
Use o destino ODS EXCEL para exportar os resultados para múltiplas planilhas em um arquivo
Excel.

Arquivos
• p106d02.sas
• storm_final – uma tabela SAS que contém uma linha por tempestade de 1980 a 2017. Os dados
foram limpos e preparados previamente usando o DATA step.

Sintaxe

ODS EXCEL FILE="arquivo.xlsx" <STYLE=estilo>


<OPTIONS(SHEET_NAME='nome')>;

/* Código SAS que produza relatório(s) */

<ODS EXCEL OPTIONS(SHEET_NAME='label');>

/* Código SAS que produza relatório(s) */

ODS EXCEL CLOSE;

Notas
• O destino ODS EXCEL cria um arquivo XLSX.
• Por default, a saída de cada PROC é gravada em uma planilha separada, com um nome
diferente. O estilo default é aplicado.
• Use a opção STYLE= no statement ODS EXCEL para aplicar um estilo diferente.
• Use a opção OPTIONS(SHEET_NAME=’label’) no statement ODS EXCEL para definir um nome
customizado para cada planilha.

Demo
1. Abra o p106d02.sas na pasta demos e localize a seção Demo do programa. Inclua um
statement ODS para criar um arquivo Excel chamado wind.xlsx na pasta output. Feche o
destino Excel no final do programa. Selecione e execute o programa Demo.
Nota: Use a variável macro outpath para referenciar a pasta output. Se a variável macro
outpath não estiver definida, execute o programa libname.sas que foi alterado na
Atividade 6.01.
ods excel file="&outpath/wind.xlsx";
title "Wind Statistics by Basin";
...
title;
ods proctitle;
ods excel close;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.2 Exportando Relatórios 6-15

2. Abra o arquivo Excel.


• SAS Studio: Navegue para a pasta output na seção Files and Folders do painel de
navegação. Selecione wind.xlsx e clique Download .
• Enterprise Guide: Clique na tab Results - Excel e clique em Download.
3. Examine o arquivo Excel. Observe o fundo azul claro no fundo do results, que foi gerado pelo
estilo default. Verifique também o nome default da planilha. Feche o arquivo Excel.
4. Examine as opções de estilos disponíveis.
• SAS Studio ou Enterprise Guide: Execute o seguinte programa.
proc template;
list styles;
run;

• Apenas no Enterprise Guide: Selecione Tools  Style Manager.


5. Mude o estilo adicionando a opção STYLE=SASDOCPRINTER no primeiro statement ODS.
6. Use a opção SHEET_NAME= no primeiro statement ODS EXCEL para nomear a primeira
planilha como Wind Stats. Crie outro statement ODS EXCEL com a opção SHEET_NAME=
antes do segundo statement TITLE e do step PROC SGPLOT. Chame a segunda planilha de
Wind Distribution. Selecione e execute programa demo. Abra o arquivo Excel para ver os
resultados.
ods excel file="&outpath/wind.xlsx" style=sasdocprinter
options(sheet_name='Wind Stats');
title "Wind Statistics by Basin";
ods noproctitle;
proc means data=pg1.storm_final min mean median max maxdec=0;
class BasinName;
var MaxWindMPH;
run;

ods excel options(sheet_name='Wind Distribution');


title "Distribution of Maximum Wind";
proc sgplot data=pg1.storm_final;
histogram MaxWindMPH;
density MaxWindMPH;
run;
title;
ods proctitle;
ods excel close;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-16 Capítulo 6 Exportando Resultados

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.2 Exportando Relatórios 6-17

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-18 Capítulo 6 Exportando Resultados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.2 Exportando Relatórios 6-19

Exportando os Resultados para o PDF

Cenário
Use o destino ODS PDF para exportar relatórios para arquivos PDF.

Arquivos
• p106d03.sas
• storm_final – uma tabela SAS que contém uma linha por tempestade de 1980 a 2017. Os dados
foram limpos e preparados previamente usando o DATA step.

Sintaxe

ODS PDF FILE="arquivo.xlsx" STYLE=estilo STARTPAGE=NO PDFTOC=1;


ODS PROCLABEL "label";
/* Código SAS que produza relatório(s) */
ODS PDF CLOSE;

Notas
• O destino ODS PDF cria um arquivo PDF.
• A opção PDFTOC=n controla o nível de expansão da tabela de conteúdo nos documentos PDF.
• O statement ODS PROCLABEL habilita a alteração do label do statement.

Demo
1. Abra o p106d03.sas na pasta demos e localize a seção Demo do programa. Execute o
programa e abra o arquivo PDF para examinar os resultados. Observe que são criados
bookmarks e que eles estão relacionados com cada saída da PROC.
Nota: Use a variável macro outpath para referenciar a pasta output. Se a variável macro
outpath não estiver definida, execute o programa libname.sas que foi alterado na
Atividade 6.01.
2. Inclua a opção STARTPAGE=NO para eliminar quebras de página entre as PROCs. Inclua a
opção STYLE=JOURNAL.
ods pdf file="&outpath/wind.pdf" startpage=no style=journal;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-20 Capítulo 6 Exportando Resultados

3. Para customizar os bookmarks do PDF inclua a opção PDFTOC=1 para assegurar que os
bookmarks sejam expandidos até apenas um nível quando o arquivo PDF for aberto. Para
customizar os labels do PDF inclua o statement ODS PROCLABEL antes de cada PROC com
texto customizado. Execute o programa e abra o arquivo PDF.
ods pdf file="&outpath/wind.pdf" startpage=no style=journal
pdftoc=1;
ods noproctitle;

ods proclabel "Wind Statistics";


title "Wind Statistics by Basin";
proc means data=pg1.storm_final min mean median max maxdec=0;
class BasinName;
var MaxWindMPH;
run;

ods proclabel "Wind Distribution";


title "Distribution of Maximum Wind";
proc sgplot data=pg1.storm_final;
histogram MaxWindMPH;
density MaxWindMPH;
run;
title;

ods pdf close;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.2 Exportando Relatórios 6-21

Links
• Faça o curso Exporting SAS Data Sets and Creating ODS Files for Microsoft Excel.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=SASXL)
• Olhe as seguintes páginas de Help:
– Base SAS EXPORT Procedure
(https://go.documentation.sas.com/?docsetId=proc&docsetTarget=n045uxf7ll2p5on1ly4at3vpd
47e.htm&docsetVersion=9.4&locale=en)
– SAS Output Delivery System: User’s Guide
(https://go.documentation.sas.com/?docsetId=odsug&docsetTarget=titlepage.htm&docsetVersi
on=9.4&locale=en)
– SAS/ACCESS Interface to PC Files: Reference
(https://go.documentation.sas.com/?docsetId=acpcref&docsetTarget=titlepage.htm&docsetVer
sion=9.4&locale=en)
• Faça o curso SAS Report Writing 1: Essentials course.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=RPT1)
• Explore a SAS Output Delivery System resource page.
(http://support.sas.com/rnd/base/ods/)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-22 Capítulo 6 Exportando Resultados

Exercício

Se você reiniciou sua sessão SAS, abra e execute o programa libname.sas nos seus arquivos do
curso.

Nível 1
1. Criando um Arquivo Excel usando ODS EXCEL
Crie um arquivo Excel chamado StormStats.xlsx que inclua resultados dos PROCs SAS.
Customize os nomes das planilhas.
a. Abra o p106p01.sas na pasta practices. Antes do step PROC MEANS inclua um statement
ODS EXCEL para fazer o seguinte:
1) Grave o arquivo de saída em “&outpath/StormStats.xlsx”.
Nota: Se a variável macro outpath não estiver definida, execute o programa
libname.sas que foi alterado na Atividade 6.01.
2) Defina o estilo do arquivo Excel como snow.
3) Defina o nome da primeira tab como South Pacific Summary.
b. Desabilite os títulos das PROCs e do relatório no início do programa. Habilite novamente os
títulos das PROCs no final do programa.
c. Adicione um statement ODS EXCEL imediatamente antes do step PROC PRINT para definir
o nome da planilha como Detail.
d. No final do programa inclua um statement ODS EXCEL para fechar o destino Excel.
e. Execute o programa. Se possível abra o arquivo StormStats.xlsx no Excel.

Nível 2
2. Criando um Documento Word com o ODS RTF
Crie um arquivo RTF que pode ser aberto no Microsoft Word. O arquivo deve incluir os
resultados de três PROCs e usar estilos diferentes para alterar a aparência.
a. Abra o p106p02.sas na pasta practices. Modifique o programa para gravar o arquivo de
saída em &outpath/ParkReport.rtf. Defina o estilo do arquivo como Journal e remova as
quebras de página entre os resultados das PROCs. Elimine a impressão dos títulos das
PROCs.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.2 Exportando Relatórios 6-23

Nota: Se a variável macro outpath não estiver definida, execute o programa libname.sas
que foi alterado na Atividade 6.01.
b. Execute o programa. Abra o arquivo de saída no Microsoft Word. Observe que o estilo
Journal foi aplicado no resultado, mas o gráfico agora está em escala de cinza ao invés de
cores. Verifique também que a data e hora em que o programa foi executado aparece no
canto superior direito da página. Feche o Microsoft Word.
c. Modifique seu programa SAS para que as duas tabelas sejam impressas usando o estilo
Journal, mas o gráfico seja criado usando o estilo SASDOCPRINTER.
Nota: O statement ODS destination lhe permite alterar o estilo sem a necessidade de
redefinir o local do arquivo de saída.
d. Inclua um statement OPTIONS com a opção NODATE no começo do programa para
suprimir a data e hora no arquivo RTF. Restaure a opção para execuções futuras,
adicionando um statement OPTIONS com a opção DATE no final do programa.
e. Execute o programa. Abra o novo arquivo de saída com o Microsoft Word. Confirme que o
estilo das duas tabelas é o mesmo, mas que o gráfico agora seja exibido em cores. Feche o
relatório.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-24 Capítulo 6 Exportando Resultados

Desafio
3. Crie um Relatório Paisagem com o ODS PDF
Crie um documento PDF com orientação paisagem. Imprima um relatório e um mapa lado a
lado.
a. Abra o p106p03.sas na pasta practices. Execute o programa e analise a saída. O
programa produz uma tabela e um mapa das tempestades na região do Atlântico Norte em
2016.
b. Modifique o programa para criar um arquivo PDF chamado StormSummary.pdf na pasta
output. Defina o estilo da saída como Journal.
c. Use o SAS Help para encontrar uma opção de sistema SAS que mude o layout da página
para paisagem.
d. Use o SAS Help para aprender sobre o statement ODS LAYOUT GRIDDED como um meio
de controlar o layout de saída de múltiplos objetos. Determine que os resultados sejam
arranjados em uma linha e duas colunas.
e. Redefina a opção do sistema para que futuros resultados sejam apresentados na orientação
retrato.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.2 Exportando Relatórios 6-25

f. Execute o programa e abra o arquivo StormSummary.pdf para confirmar os resultados.


Nota: O SAS Studio gera um warning no log porque o executor do código gera um arquivo
RTF nos bastidores. LAYOUT não é suportado no RTF. O warning pode ser ignorado
porque ele não afeta os resultados do PDF.

Fim do Exercício

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-26 Capítulo 6 Exportando Resultados

6.3 Soluções
Soluções dos Exercícios
1. Criando um Arquivo Excel usando ODS EXCEL
ods excel file="&outpath/StormStats.xlsx"
style=snow
options(sheet_name='South Pacific Summary');
ods noproctitle;
title;
proc means data=pg1.storm_detail maxdec=0 median max;
class Season;
var Wind;
where Basin='SP' and Season in (2014,2015,2016);
run;
ods excel options(sheet_name='Detail');
proc print data=pg1.storm_detail noobs;
where Basin='SP' and Season in (2014,2015,2016);
by Season;
run;
ods excel close;
ods proctitle;
2. Criando um Documento Word com o ODS RTF
ods rtf file="&outpath/ParkReport.rtf" style=Journal startpage=no;
ods noproctitle;
options nodate;
title "US National Park Regional Usage Summary";
proc freq data=pg1.np_final;
tables Region / nocum;
run;
proc means data=pg1.np_final mean median max nonobs maxdec=0;
class Region;
var DayVisits Campers;
run;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.3 Soluções 6-27

ods rtf style=SASDocPrinter;


title2 'Day Visits vs. Camping';
proc sgplot data=pg1.np_final;
vbar Region / response=DayVisits;
vline Region / response=Campers;
run;
title; ods proctitle;
ods rtf close;
options date;
3. Crie um Relatório Paisagem com o ODS PDF
options orientation=landscape;
ods pdf file="&outpath/StormSummary.PDF" style=Journal
nobookmarkgen;
title1 "2016 Northern Atlantic Storms";

ods layout gridded columns=2 rows=1;


ods region;
proc sgmap plotdata=pg1.storm_final;
*openstreetmap;
esrimap
url='http://services.arcgisonline.com/arcgis/rest/services/
World_Physical_Map';
bubble x=lon y=lat size=maxwindmph / datalabel=name
datalabelattrs=(color=red size=8);
where Basin='NA' and Season=2016;
keylegend 'wind';
run;

ods region;
proc print data=pg1.storm_final noobs;
var name StartDate MaxWindMPH StormLength;
where Basin="NA" and Season=2016;
format StartDate monyy7.;
run;

ods layout end;


ods pdf close;
options orientation=portrait;
Fim das Soluções

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-28 Capítulo 6 Exportando Resultados

Soluções das Atividades e Perguntas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.3 Soluções 6-29

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-30 Capítulo 6 Exportando Resultados

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
Capítulo 7. Usando SQL no SAS®
7.1 Usando Structured Query Language (SQL) no SAS ............................................................. 7-3
Demonstração: Lendo e Filtrando Dados com SQL ....................................................... 7-8

7.2 Combinando Tabelas usando SQL no SAS ..........................................................................7-12


Demonstração: Combinando Tabelas com a PROC SQL ............................................7-14

7.3 Soluções ...................................................................................................................................7-20


Soluções às Atividades e Perguntas .............................................................................7-20
7-2 Capítulo 7 Usando SQL no SAS®

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.1 Usando Structured Query Language (SQL) no SAS 7-3

7.1 Usando Structured Query Language


(SQL) no SAS

Para aprender mais sobre como essas linguagens e APIs podem ser integradas com a plataforma
SAS visite http://developer.sas.com.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-4 Capítulo 7 Usando SQL no SAS®

Vimos como DATA steps e PROCs podem ser usados para preparar, sumarizar e criar relatórios
sobre os dados. A Structured Query Language (SQL) é uma linguagem comum usada por muitos
programadores em uma larga variedade de softwares. O SAS permite que você escreva código
SQL como parte do seu programa SAS. É provável que você cruze com o SQL à medida em que
progride como um programador SAS, portanto é importante entender como o SQL pode ser uma
ferramenta útil, e como se compara com o código SAS que você aprendeu até agora.

A linguagem SQL está disponível para uso no Base SAS. Como é uma linguagem separada, é
implementada no SAS como uma PROC. Muitos programadores que são novos no SAS tem
experiência prévia com o SQL. Essa implementação prove um ponto de entrada familiar e fácil para
a programação na plataforma SAS.
Há duas PROCs a escolher para executar o SQL no Base SAS: PROC SQL e PROC FedSQL.
Cada uma tem diferentes extensões e pontos fortes. A PROC SQL tem uma integração mais estreita
com o sistema SAS e tem diversas extensões que são úteis ao processar na plataforma SAS. A
PROC FedSQL foi desenvolvida para um padrão mais moderno do SQL ANSI e é mais compliant, o
que significa que tem menos extensões SAS. Como a PROC SQL está disponível há mais tempo, é
mais comum encontra-la em código SAS existente. Por isso a PROC SQL foi escolhida para
executar os programas SAS nesse treinamento.

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.1 Usando Structured Query Language (SQL) no SAS 7-5

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-6 Capítulo 7 Usando SQL no SAS®

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.1 Usando Structured Query Language (SQL) no SAS 7-7

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-8 Capítulo 7 Usando SQL no SAS®

Lendo e Filtrando Dados com SQL

Cenário
Use a PROC SQL para selecionar colunas e filtrar linhas de uma tabela SAS existente, e crie um
relatório.

Arquivos
• p107d01.sas
• storm_final - uma tabela SAS que contém uma linha por tempestade de 1980 a 2017. Os dados
foram limpos e preparados previamente usando o DATA step.

Sintaxe

PROC SQL;
SELECT coluna, coluna FORMAT=fmt
FROM tabela-de-entrada
WHERE expressão
ORDER BY coluna <DESC>;
QUIT;

Coluna nova na lista:


expressão AS nome-da-coluna

Notas
• A PROC SQL cria um relatório por default.
• O statement SELECT descreve a query. Após a palavra SELECT liste as colunas a serem
incluídas nos relatórios, separadas por vírgulas.
• Colunas calculadas podem ser incluídas da cláusula SELECT.
• A cláusula FROM lista uma ou mais tabelas de entrada.
• A cláusula ORDER BY classifica as linhas de saída, baseada nas colunas listadas. A ordem
default é ascendente. Use DESC após o nome da coluna para inverter a ordem de classificação.
• A PROC SQL termina com um statement QUIT.

Demo
1. Abra o p107d01.sas na pasta demos e localize a seção Demo do programa. Inclua um
statement SELECT para buscar todas as colunas de pg1.storm_final. Selecione e execute o
step. Examine o log e os resultados.
proc sql;
select *
from pg1.storm_final;
quit;
2. Modifique a query para trazer apenas as colunas Season, Name, StartDate e MaxWindMPH.
Formate StartDate com MMDDYY10. Selecione e execute o step.
proc sql;
select Season, Name, StartDate format=mmddyy10., MaxWindMPH
from pg1.storm_final;
quit;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.1 Usando Structured Query Language (SQL) no SAS 7-9

3. Modifique Name na cláusula SELECT para converter seu conteúdo para letras maiúsculas.
proc sql;
select Season, propcase(Name) as Name,
StartDate format=mmddyy10., MaxWindMPH
from pg1.storm_final;
quit;
4. Adicione uma cláusula WHERE para incluir apenas as tempestades durante ou após 2000, com
MaxWindMPH maior que 156.
5. Inclua uma cláusula ORDER BY para classificar as linhas em ordem descendente de
MaxWindMPH, e então por Name.
6. Inclua um statement TITLE para descrever o relatório. Selecione e execute o código.
title "International Storms since 2000";
title2 "Category 5 (Wind>156)";
proc sql;
select Season, propcase(Name) as Name,
StartDate format=mmddyy10., MaxWindMPH
from pg1.storm_final
where MaxWindMPH > 156 and Season >= 2000
order by MaxWindMPH desc, Name;
quit;
title;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-10 Capítulo 7 Usando SQL no SAS®

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.1 Usando Structured Query Language (SQL) no SAS 7-11

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-12 Capítulo 7 Usando SQL no SAS®

7.2 Combinando Tabelas usando SQL no


SAS

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.2 Combinando Tabelas usando SQL no SAS 7-13

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-14 Capítulo 7 Usando SQL no SAS®

Combinando Tabelas com a PROC SQL

Cenário
Use a PROC SQL para executar um inner join entre duas tabelas.

Arquivos
• p107d02.sas
• storm_summary – uma tabela SAS que contém uma linha por tempestade entre 1980 e 2016
• storm_basincodes – uma tabela SAS que contém o código da bacia com duas letras, e o
respectivo nome da bacia

Sintaxe

PROC SQL;
SELECT coluna, coluna
FROM tabela-de-entrada1 INNER JOIN tabela-de-entrada2
ON tabela1.coluna=tabela2.coluna;
QUIT;

Notas
• Um inner join SQL combina linhas com chaves idênticas nas duas tabelas.
• As duas tabelas a serem combinadas são listadas na cláusula FROM, separadas por INNER
JOIN.
• A expressão ON indica como as linhas serão combinadas. Os nomes das colunas devem ser
qualificadas com nome-da-tabela.nome-da-coluna.

Demo
1. Abra pg1.storm_summary e pg1.storm_basincodes e compare as colunas. Identifique a
coluna de join.
2. Abra o programa p107d02.sas na pasta demos e encontre a seção Demo do programa. Inclua
pg1.storm_basincodes na cláusula FROM para executar um inner join sobre a coluna Basin.
Qualifique as colunas Basin como nome-da-tabela.nome-da-coluna apenas na expressão ON.
3. Adicione a coluna BasinName à query, depois de Basin. Selecione e execute o step e verifique
o log. Por que o programa deu erro?
proc sql;
select Season, Name, Basin, BasinName, MaxWindMPH
from pg1.storm_summary inner join pg1.storm_basincodes
on storm_summary.basin=storm_basincodes.basin
order by Season desc, Name;
quit;

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.2 Combinando Tabelas usando SQL no SAS 7-15

4. Modifique a query para qualificar a coluna Basin na cláusula SELECT. Selecione e execute o
step.
proc sql;
select Season, Name, storm_summary.Basin, BasinName, MaxWindMPH
from pg1.storm_summary inner join pg1.storm_basincodes
on storm_summary.basin=storm_basincodes.basin
order by Season desc, Name;
quit;

Fim da Demonstração

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-16 Capítulo 7 Usando SQL no SAS®

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.2 Combinando Tabelas usando SQL no SAS 7-17

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-18 Capítulo 7 Usando SQL no SAS®

Links
• Faça o curso SAS SQL 1.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=SQL1)
• Leia o PROC SQL by Example.
(https://www.sas.com/store/books/categories/examples/proc-sql-by-example-using-sql-within-sas-
/prodBK_60500_en.html)
• Faça o curso SAS SQL Methods and More.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=SQLMM)
• Leia o Practical and Efficient SAS Programming.
(https://www.sas.com/store/books/categories/examples/practical-and-efficient-sas-programming-
the-insider-s-guide/prodBK_70215_en.html)
• Faça o curso DS2 Programming Essentials.
(https://support.sas.com/edu/schedules.html?ctry=us&crs=DS2)
• Leia o Mastering the SAS DS2 Procedure.
(https://www.sas.com/store/books/categories/examples/mastering-the-sas-ds2-procedure-
advanced-data-wrangling-techniques-second-edition/prodBK_71728_en.html)

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.2 Combinando Tabelas usando SQL no SAS 7-19

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7-20 Capítulo 7 Usando SQL no SAS®

7.3 Soluções
Soluções às Atividades e Perguntas

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.3 Soluções 7-21

Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.

Você também pode gostar