PROG194
PROG194
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.
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.
ISBN 978-1-63526-923-9
Para Sua Informação iii
Tabela de Conteúdo
Demonstração: Usando uma Library para acessar arquivos Excel ................ 2-22
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.1 O Processo da Programação SAS 1-3
É 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
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.
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.1 O Processo da Programação SAS 1-7
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1-8 Fundamentos
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
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
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
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
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
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.
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;
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.
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.
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
1.2 Usando as Ferramentas de Programação SAS 1-23
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;
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.
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
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
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
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
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;
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.1 Entendendo os Dados SAS 2-3
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
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
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
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
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;
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
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2-26
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.3 Importando Dados para o SAS 2-27
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
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;
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.3 Importando Dados para o SAS 2-33
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;
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
2.4 Soluções 2-35
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.1 Explorando os Dados 3-3
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
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
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
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
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
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
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)
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
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
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
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
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.
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)
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.3 Formatando Colunas 3-35
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
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
<$>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
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
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:
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
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.
c. Execute o programa e verifique que foi incluída apenas uma linha por país.
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
*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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
3.5 Soluções 3-55
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.1 Lendo e Filtrando os Dados 4-3
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
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
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-14 Capítulo 4 Preparando os Dados
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
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
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>)
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
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
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
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
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.3 Processamento Condicional 4-29
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
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
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
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
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
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
NS Seashore
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;
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4-48 Capítulo 4 Preparando os Dados
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
4.4 Soluções 4-49
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
Exercício 5-19
Exercício 5-30
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
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é";
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
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
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
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
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
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
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
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.
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-20 Capítulo 5 Gerando Análises e Relatórios
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
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
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
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
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
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
/*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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
5-36 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-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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6.1 Exportando Dados 6-3
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
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
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;
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
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
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
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
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
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
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
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;
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
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 region;
proc print data=pg1.storm_final noobs;
var name StartDate MaxWindMPH StormLength;
where Basin="NA" and Season=2016;
format StartDate monyy7.;
run;
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
6-28 Capítulo 6 Exportando Resultados
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
Copyright © 2018, SAS Institute Inc., Cary, North Carolina, USA. TODOS OS DIREITOS RESERVADOS.
7.1 Usando Structured Query Language (SQL) no SAS 7-3
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®
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;
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®
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®
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.