Вы находитесь на странице: 1из 125

Universidade Estadual de Campinas

Centro Nacional de Processamento de Alto Desempenho - So Paulo

Apostila de Treinamento:

SAS Programao I
- Introduo ao SAS: Data Step e Proc Step -

Reviso: 2015

CONTEDO
1 - HISTRICO
2 - CURIOSIDADES
3 - DEFINIO BSICA
4 - COMERCIALIZAO
4.1 - Mdulos SAS
4.2 - Solues Propostas

5 - CONCEITOS BSICOS
6 - ARQUIVOS SAS
7 - ESTRUTURA DOS ARQUIVOS SAS
8 - NOMECLATURA PARA ARQUIVOS E VARIVEIS
Ex.1: Nomeclatura

9 - SINTAXE DOS COMANDOS


Ex.2: Sintaxe

10 - EXECUO
10.1 - Modo Interativo (Ambiente WINDOWS)
10.2 - Modo No Interativo (Ambiente de COMANDOS)
10.3 - Programa SAS

11 - ESTRUTURA DATA STEP


11.1 - Introduo
11.2 - Comando LIBNAME
Ex.3: Declaraes de Bibliotecas
11.3 - Comando DATA
Ex.4: Declarao de arquivo SAS para Gravao de Dados
11.4 - Comando SET
Ex.5: Declarao de arquivo SAS para Leitura de Dados
11.5 - Comando INFILE
Ex.6: Declarao de arquivos textos sem formatao SAS
11.6 - Comando INPUT
11.6.1 - INPUT COLUNADO
Ex.7: Leitura de dados com o INPUT colunado
11.6.2 - INPUT FORMATADO
11.6.3 - Descrio de um Campo Data
Ex.8: Leitura de dados com o INPUT formatado
Ex.9: Leitura de dados especiais com o INPUT formatado
11.6.4 - Controle de Posio de Leitura do INPUT
Ex.10: INPUT formatado com indicador de coluna para leitura
11.6.5 - Detalhes do Comando INPUT
11.7 - Comando RUN

1 LABORATRIO
12 - ESTRUTURA PROC STEP
12.1 - Introduo
12.1.1 - Comando VAR
12.1.2 - Comando BY
12.1.3 - Comando TITLE
12.1.4 - Comando FOOTNOTE
12.2 - Procedimento PRINT
Ex.11:Procedimento PRINT 1
Ex.12:Procedimento PRINT 2
12.3 - Procedimento SORT
Ex.13:Procedimento SORT

13 - ARQUIVO DE MENSAGENS - "SAS Log"


Ex.14: Exemplo de LOG sem problemas na execuo 1
Ex.15: Exemplo de LOG com problemas na execuo 2
Ex.16: Exemplo de LOG com problemas na execuo 3

2 LABORATRIO

pag.06
pag.06
pag.07
pag.08
pag.08
pag.09
pag.10
pag.11
pag.12
pag.13
pag.13
pag.14
pag.14
pag.15
pag.15
pag.20
pag.21
pag.22
pag.22
pag.24
pag.24
pag.25
pag.25
pag.26
pag.26
pag.27
pag.27
pag.28
pag.29
pag.30
pag.31
pag.32
pag.33
pag.34
pag.35
pag.35
pag.36
pag.37
pag.38
pag.39
pag.39
pag.40
pag.41
pag.42
pag.42
pag.43
pag.44
pag.44
pag.45
pag.46
pag.47
pag.47
pag.48
pag.49
pag.50
2

14 - COMANDOS BSICOS DE PROGRAMAO SAS


14.1 - Comando de Atribuio (=)
Ex.17: Comando de Alocao
14.2 - Comando RETAIN
Ex.18: Comando RETAIN
14.3 - Comando IF-THEN/ELSE
Ex.19: Comando IF (Somente Selecionar de Dados)
Ex.20: Comando IF (Operadores de Comparao)
Ex.21: Comando IF (Operadores Lgicos)
Ex.22: Comando IF (Operadores Lgicos)
14.4 - Comando WHERE
Ex.23: Comando WHERE
14.5 - Comando DO/END
Ex.24: Comando DO/END
14.6 - Comando LENGTH
Ex.25: Comando LENGTH
14.7 - Comando DO/END Iterativo
Ex.26: Comando DO/END Iterativo
14.8 - Comando DO WHILE
Ex.27: Comando DO WHILE
14.9 - Comando DO UNTIL
Ex.28: Comando DO UNITIL
14.10 - Comandos DROP e KEEP
Ex.29: Comandos DROP e KEEP
14.11 - Opes de Arquivos SAS
Ex.30: Opes: DROP= e KEEP=
14.12 - Comando DELETE
Ex.31: Comando DELETE
14.13 - Comando OUTPUT
Ex.32: Comando OUTPUT: Salvar Registros
Ex.33: Comando OUTPUT: Direcionar e Salvar Registros

3 LABORATRIO
15 - FUNES DO SAS
15.1 - Introduo
15.2 - Funes de Tratamento de Caractere
15.2.1 - Funo UPCASE e LOWCASE
15.2.2 - Funo SUBSTR
15.2.3 - Funo FIND
Ex.34: Funes Caracteres: FIND
Ex.35: Funes Caracteres: UPCASE, SUBSTR, FIND
15.3 - Funes Numricas
15.3.1 - Funo INT
15.3.2 - Funo ROUND
Ex.36: Funes Numricas
15.4 - Funes Estatsticas Descritivas
15.4.1 - Funo SUM
15.4.2 - Funo MEAN
Ex.37: Funes Estatsticas Descritivas
15.5 - Funes de Tratamento de Data
15.5.1 - Funo MDY
15.5.2 - Funes: DAY, MONTH, YEAR
15.5.3 - Funo TODAY e DATE
Ex.38: Funes de Tratamento de Data

4 LABORATRIO
16 - COMANDOS DE CONFIGURAO
16.1 - Comando OPTIONS
Ex.39: Comando OPTIONS 1
Ex.40: Comando OPTIONS 2
16.2 - Comando LABEL
16.3 - Comando FORMAT
Ex.41: Comando LABEL

pag.51
pag.51
pag.52
pag.53
pag.53
pag.54
pag.55
pag.56
pag.57
pag.57
pag.58
pag.59
pag.60
pag.60
pag.61
pag.61
pag.62
pag.63
pag.64
pag.64
pag.65
pag.65
pag.66
pag.67
pag.68
pag.68
pag.69
pag.69
pag.70
pag.71
pag.71
pag.72
pag.75
pag.75
pag.76
pag.76
pag.76
pag.77
pag.78
pag.79
pag.80
pag.80
pag.80
pag.81
pag.82
pag.82
pag.82
pag.83
pag.84
pag.84
pag.84
pag.84
pag.85
pag.86
pag.87
pag.87
pag.88
pag.88
pag.89
pag.90
pag.91
3

Ex.42: Comando FORMAT


16.4 - Comando ODS
Ex.43: Comando ODS

5 LABORATRIO
17 - PROCEDIMENTOS ESTATSTICOS BSICOS
17.1 - Procedimento MEANS
Ex.44: Procedimento MEANS (Padro)
Ex.45: Procedimento MEANS (Com Opes)
Ex.46: Procedimento MEANS (Comando CLASS)
Ex.47: Procedimento MEANS (Comando BY)
17.2 - Procedimento FREQ
Ex.48: Procedimento FREQ (Sem Cruzamento)
Ex.49: Procedimento FREQ (Com Cruzamento)
Ex.50: Procedimento FREQ (Cruzamento Listado)
Ex.51: Procedimento FREQ (Opes do Comando TABLE)
17.3 - Procedimento TABULATE
Ex.52: Procedimento TABULATE (Concatenao de Elementos)
Ex.53: Procedimento TABULATE (Cruzamento de Elementos)
Ex.54: Procedimento TABULATE (Trs Dimenses 1)
Ex.55: Procedimento TABULATE (Rotulao de Elementos: = )
Ex.56: Procedimento TABULATE (Formatao de Elementos: *f= )
Ex.57: Procedimento TABULATE (Elemento ALL e PCTN)
Ex.58: Procedimento TABULATE (Trs Dimenses 2)

18 - RECURSO DE FORMATAO ESPECIAL


18.1 - Procedimento FORMAT
Ex.59: Procedimento FORMAT

6 LABORATRIO
19 - COMBINAO DE ARQUIVOS SAS
19.1 - Concatenao de Arquivos
Ex.60: Concatenao de Arquivos
19.2 - Combinao Ordenada de Arquivos (Match-Merging)
Ex.61: Combinao Ordenada de Arquivos

7 LABORATRIO
20 - DADOS MICROSOFT EXCEL
20.1 - Modo Assistente: Import Wizard ou Export Wizard
20.2 - Modo Programao: PROC IMPORT ou PROC EXPORT
Ex.62: Procedimento IMPORT
Ex.63: Procedimento EXPORT
20.3 - Principais Problemas

21 - REFERNCIAS

pag.91
pag.92
pag.93
pag.94
pag.95
pag.95
pag.96
pag.96
pag.97
pag.98
pag.99
pag.100
pag.101
pag.102
pag.102
pag.103
pag.105
pag.105
pag.106
pag.107
pag.108
pag.109
pag.110
pag.111
pag.111
pag.112
pag.113
pag.115
pag.115
pag.116
pag.117
pag.118
pag.119
pag.120
pag.120
pag.123
pag.123
pag.123
pag.124
pag.125

Tipografia utilizada na apostila


Na apresentao de alguns comandos do SAS, foram utilizados smbolos
grficos que identificam, na sintaxe do comando, a caracterstica de ser
opcional ou obrigatrio:

< caracterstica >

obrigatrio a caracterstica, no comando;

[ caracterstica ]

opcional a caracterstica, no comando.

Exemplo: Utilizao de procedimentos SAS


PROC <tipo> [opo1 opo2 opo3 . . . opon] ;
[comando1] ;
[comando2] ;
[WHERE <expresso lgica>] ;
...
[comandon] ;
RUN ;

1 - HISTRICO
Dcada de 60;
North Caroline University;
Conjunto de sub-rotinas (FORTRAN, IBM/370);
Censo Agro-pecurio Norte-americano;
SAS Institute Inc. (1975);

2 - CURIOSIDADES
http://www.sas.com
http://v9doc.sas.com
SAS University - Edio acadmica disponvel para download, sem custos;
http://www.sas.com/en_us/software/university-edition.html
Mais de 75.000 Instalaes, em 139 paises;
93 das 100 maiores empresas do mundo utilizam SAS.
(Fortune 500 Global List - 2014);
Receita Bruta em 2014 - $3,09 bilhes;
2014 mais de 13.660 funcionrios;
SAS a maior empresa de software do mundo de capital privado;
SAS is the world's largest privately held software company
O SAS adaptou o software para alguns idiomas: Chins, Francs, Alemo,
Hebreu, Italiano, Japons, Russo, Espanhol, Polons, Hngaro, Sueco,
Coreano, etc.
6

3 - DEFINIO BSICA
O SAS um software integrado para anlise de dados, que consiste de
vrios produtos que permitem:
- Recuperao de dados;
- Gerenciamento de arquivos;
- Anlise estatstica;
- Acesso a Banco de Dados (ORACLE, DB2, TERADATA, etc);
- Gerao de grficos (gif, jpg, bmp, etc);
- Gerao de relatrios (html, pdf, ps, etc);
- Gerao de aplicativos;
- Solues de negcios (Anlise de Risco, Data Mining).
um software de grande portabilidade, podendo operar em diversos
ambientes computacionais:
- Mainframes IBM ( CMS, MVS, OS, OS/390, Z/OS );
- Micros PC ( DOS, Windows, OS/2 );
- UNIX ( Solaris, AIX, HP-UX, Irix, Linux ).

4 - COMERCIALIZAO
4.1 - Mdulos do SAS
SAS/BASE

Mdulo bsico, obrigatrio em toda instalao;

SAS/STAT

Mdulo estatstico;

SAS/GRAPH

Mdulo grfico ( Histogramas, plots, ... );

SAS/OR

Mdulo de anlise e pesquisa operacional


(Programao linear, Anlise de Caminho
Crtico);

SAS/QC

Mdulo para anlise de controle de qualidade;

SAS/ETS

Mdulo de econometria (Sries Temporais,


Modelagem de Equaes Simultneas);

SAS/IML

Mdulo para anlise e operao de matrizes;

SAS/ACCESS

Mdulo para acesso aos diversos tipos de


Banco de Dados;

SAS/CONNECT Mdulo para conexo entre


operacionais heterogneos;

ambientes

SAS/AF

Mdulo para desenvolvimento de aplicaes;

SAS/FSP

Mdulo para facilitar o acesso a arquivos com


programao de telas.

4.2 Solues Propostas

Analytics

Business Analytics
SAS Cloud

Customer Intelligence

Fraud & Security Intelligence

Performance Management

Risk Management

ndice de Produtos de A-Z

5 - CONCEITOS BSICOS
A funcionalidade do Sistema SAS foi construda em torno de quatro
ideias bsicas no tratamento de dados:
Acessar dados;
Administrar dados;
Analisar dados;
Apresentar dados.

JOB SAS

Arquivo com um programa SAS ( um


conjunto de DATA Step's e PROC Step's);

DATA STEP

Diviso lgica de um programa SAS, no qual


se cria e altera um, ou vrios arquivos SAS
(Data Set's);

PROC STEP

Diviso lgica de um programa SAS, no qual


se analisa e manipula os dados contidos num
arquivo SAS (Data Set's);

DATA SET

Arquivo de dados com estrutura SAS,


contendo diversos registros (linhas de dados);

OBSERVAO

Registro de um arquivo de dados SAS.

10

6 - ARQUIVOS SAS

Todos os dados devem estar armazenados em arquivos com estrutura


SAS (DATA Set's), para serem analisados pelos procedimentos do SAS
( PROC's ).

DADO
BRUTO

DATA
STEP

DADO
SAS

Os arquivos SAS podem ser temporrios ( armazenados em uma


biblioteca definida pelo SAS - WORK) ou permanentes (bibliotecas
definidas pelos usurios).
Em um nico programa SAS (Job SAS), vrios arquivos podem ser
abertos e analisados.

Os arquivos SAS, depois de criados, podem ser analisados pelos


procedimentos SAS.

11

7 - ESTRUTURA DOS ARQUIVOS SAS


O arquivo SAS um conjunto de dados organizados num formato de tabela.
NOME
CARLOS
GILBERTO
RICARDO
.
.
.
ALICE
MARCIA

SEXO
M
M
M
.
.
.
F
F

IDADE

ALTURA

12
25
30
.
.
.
28
22

1.70
1.65
1.80
.
.
.
1.68
1.75

As colunas nas tabelas so chamadas de variveis:


- Variveis correspondem aos campos de dados;
- Cada varivel recebe um nome;
- Para o SAS, s existem dois tipos de variveis:
caractere (at 32.767 caracteres 32.767 Bytes)
numrica (Representao IEEE - 8Bytes)

As linhas na tabela so chamadas de observaes (ou registros, ou linhas). No


existe limite para o nmero de observaes.

Um Arquivo SAS dividido em duas partes:

Descritora

Contm a descrio do arquivo: Tamanho do arquivo,


nmero de registros, nome, tipo, tamanho e formato de
variveis, etc;

Dados

Contm os dados do arquivo.

12

8 - NOMECLATURA PARA ARQUIVOS E VARIVEIS

Todos os nomes de arquivos e variveis devero seguir as seguintes


regras:
- Possuir de 1 a 32 caracteres;
- Comear com letra (A-Z ou a-z, indiferente);
- Pode continuar com nmeros, letras (maisculas ou
minsculas) ou o caractere especial: _ (grifo, sublinhar).

Variveis no SAS, podem possuir at 6 atributos, sendo:


Obrigatrios: Nome(NAME), Tipo(TYPE), Tamanho(LENGTH);
Opcionais:

Rtulo(LABEL), Formato de leitura(INFORMAT), Formato de


impresso(FORMAT);

Ex.1: Nomeclatura
DATA EXEmPLO1 ;
INFILE "C:\curso\sas\CADASTRO.TXT";
INPUT primeiro_nome $ 1-8 Sexo $ 10 Idade 13-14 ALTURA 16-19 ;
RUN;

13

9 - SNTAXE DOS COMANDOS

Todo comando SAS comea com uma palavra-chave (identificao,


colorido em azul no ambiente Windows do SAS), e termina com o
ponto e virgula (;).

- Os comandos podem comear e terminar em qualquer parte


da linha;

- Um comando pode se estender por diversas linhas;

- Vrios comandos podem ficar na mesma linha.

Ex.2: Sintaxe
DATA EXEMPLO1 ;
INFILE " C:\curso\sas\CADASTRO.TXT" ;
INPUT NOME $ 1-8 SEXO $ 10
IDADE $ 13-14 ALTURA 16-19 ;
RUN;
PROC PRINT DATA=EXEMPLO1 ;
RUN;
PROC FREQ DATA=EXEMPLO1 ; TABLES IDADE*ALTURA ; RUN ;

14

10 - EXECUO
Um programa SAS pode ser executado de trs maneiras diferentes:
- Modo interativo (Ambiente Windows);
- Modo no interativo;
- Modo batch.
10.1 - Modo Interativo (Ambiente WINDOWS)
Localize o cone do SAS na console windows ou, ative o ambiente
SAS, seguindo o roteiro abaixo:
Iniciar Programas SAS 64bits SAS 9.3_64bits (English)

15

SAS Explorer Libraries


View Explorer

SAS Explorer New Library


Tools New library

16

JANELA DE OPES DE CONFIGURAO


Tools Options System...

17

OPES DE CONFIGURAO DO EDITOR


Tools Options Enhanced Editor

18

CONFIGURAO DE TECLADO
Tools Options Keys

RELATRIOS NO FORMATO TEXTO E/OU HTML


Tools Options Preferences ... Results

19

10.2 - Modo No Interativo (Ambiente de COMANDOS)


uma maneira simples e rpida de execuo de um programa SAS. O
programa pode ser editado em qualquer editor, mas dever ser e salvo
em modo texto. Para execut-lo, basta ativar a janela de comandos do
windows (Executar ou cmd):
Iniciar ==> Executar...

No diretrio do executvel SAS, sero gerados dois arquivos com o


mesmo nome do programa:

<programa>.lst

Possui os resultados do programa;

<programa>.log

Possui mensagens da execuo do programa.

OBS: Sempre analise o arquivo com extenso log. Se no for criado o


arquivo com a extenso lst, com certeza existiro erros no programa,
que podero ser identificados no arquivo log.

20

10.3 Programa SAS


Um programa SAS uma combinao do uso de comandos das estruturas de
programao bsica do SAS e comandos especiais:
- Comandos livres - Utilizados em qualquer parte do programa;
- Comandos genricos - Utilizados em DATA e PROC Steps;
- Comandos da estrutura DATA Step - Utilizados somente dentro de
uma estrutura DATA Step;
- Comandos da estrutura PROC Step - Utilizados somente dentro de
uma estrutura PROC Step;
- Comandos de MACRO SAS;
- Comandos de Orientao ao Objeto SAS.
A submisso de um programa SAS para execuo, obedece a duas fases internas:
1 Compilao:

Anlise da sintaxe dos comandos, busca e definio


de bibliotecas e arquivos, definio de variveis,

2 Execuo:

Execuo do programa, por Step, obedecendo a


uma sequncia lgica. Todos os steps sero
executados. Um step com erro, para de
processar, e d sequncia ao prximo step.

Os comandos de um programa SAS, se dividem em:


Comandos de Declarao

Comandos cuja funcionalidade estabelecida


durante a fase de compilao, uma nica vez;

Comandos de Execuo

Comandos cuja funcionalidade estabelecida


durante a fase de execuo, e podem ser
executados mais de uma vez.
21

11 - ESTRUTURA DATA STEP


11.1 - Introduo
- a seo de um programa SAS aonde se organizam e administram os
dados, utilizando comandos de programao do modulo SAS/BASE e
alguma lgica de processamento;
- A maioria dos comandos utilizados em uma estrutura DATA Step, s
existem e, s podem ser executados, nessa estrutura;
- Os comandos so posicionados em uma sequncia lgica, ou seja, a
execuo de um determinado comando pode depender da execuo do
comando anterior (lgica de processamento);
- Os arquivos processados em um DATA Step, normalmente, so
processados de maneira sequencial, ou seja, a leitura dos dados feita
registro aps registro;
- Quando se utiliza um DATA Step para ler um arquivo de dados,
internamente ele representa um ciclo, um loop, que repete todos os
comandos do DATA Step para cada leitura de um novo registro do arquivo,
at encontrar o ltimo registro, finalizando o DATA Step e seguindo para o
prximo step;
DATA ... ;
... ;
... ;
... ;
... ;
... ;
... ;
RUN ;

DO
primeiro registro
AT
ltimo registro

22

Fluxo de Execuo

Inicio do
DATA Step

Abrir
arquivo
para gravar

Abrir
arquivo
para leitura

Ler novo
registro

processa
registro

Salvar
registro no
arquivo para
gravaao

NAO

Ultimo
registro

SIM
Fim do
DATA Step

23

11.2 - Comando LIBNAME


- Tipo: Comando de declarao;
- Uso: Livre;
- Comando opcional de configurao do processamento, que declara uma
ou mais reas de trabalho e armazenamento (bibliotecas), para os
arquivos SAS (Data Set's);
- O nome de um arquivo SAS composto por duas partes, separadas por
um .. A primeira parte opcional, o nome da biblioteca, a segunda
parte obrigatria, o nome do arquivo.
[biblioteca.]<nome do arquivo>
- O comando LIBNAME, normalmente, colocado no incio de um
programa SAS. S ser necessrio execut-lo uma nica vez durante uma
sesso SAS para a definio da biblioteca.
LIBNAME <biblioteca> "<diretrio>" ;
biblioteca

Palavra de no mnimo 1 e no mximo 8 caracteres, que ser


utilizado na primeira parte, em um nome de arquivo.

diretrio

Nome de um diretrio que j exista no seu ambiente, entre


aspas.

OBS: O SAS define uma biblioteca, temporria, de nome work, que ser utilizada
automaticamente se no for especificada a primeira parte do nome do arquivo.

Ex.3: Declaraes de bibliotecas


LIBNAME IN "C:\ALUNO" ;
libname teste "d:\" ;
LibName a 'G:\dados' ;
libname _all_ clear ; /* Limpa todas as declaraes de bibliotecas */
Libname _all_ list;

/* Lista, no log, todas as bibliotecas disponveis */


24

11.3 - Comando DATA


- Tipo: Comando de declarao;
- Uso: Data Step;

- Comando que sempre inicia um DATA Step;


- Comando que declara e abre um, ou vrios novos arquivos SAS (DATA
Sets), vazios, somente para gravao de dados.

DATA [biblioteca.]<nome do arquivo> . . . ;

Ex.4: Declarao de arquivos SAS para gravao de dados.


DATA

" C:\curso\sas\cadastro.sas7bdat" ;

DATA endereco ;
DATA

ARQ1

arq2

ARQ3 ;

libname ENT " C:\curso\sas" ;


data ent.cadastro ;
DATA ;

/* O nome do arquivo ser gerado automaticamente pelo SAS: DATA001,DATA002,... */

DATA _NULL_ ;

/* No ser gerado um novo arquivo SAS */

OBS: No obrigatrio especificar a biblioteca, neste caso, o SAS ir utilizar a


biblioteca padro, tambm chamada de biblioteca temporria (WORK ).

25

11.4 - Comando SET


- Tipo: Comando de declarao e execuo;
- Uso: Data Step;
- Durante a fase de compilao, este comando abre um ou vrios
arquivos de dados, DATA Sets (formato SAS), somente para leitura, e
que j existam em alguma biblioteca SAS.
- Durante a fase de execuo, o comando l os registros de maneira
sequencial, um aps o outro;
- O comando deve ser posicionado, na maioria das vezes, no incio de um
Data Step, para permitir ao compilador ler a estrutura do arquivo
especificado e armazen-la na memria.

SET [biblioteca.]<nome do arquivo> . . . ;

Ex.5: Declarao de arquivos SAS para leitura de dados.


set "c:\curso\sas\treinamento.sas7bdat";
set tab1 tab2 ;
SET cadastro ;
SET arq.dados ;
libname ab "c:\curso\sas";
DATA EXEMPLO ;
SET ab.TREINAMENTO ;
.
.
.

.
.
.

.
.
.

OBS: No obrigatrio especificar a biblioteca, neste caso, o SAS ir utilizar a


biblioteca padro, tambm chamada de biblioteca temporria (WORK ).
26

11.5 - Comando INFILE


- Tipo: Comando de declarao e execuo;
- Uso: Data Step;
- Comando que identifica e abre um arquivo externo de dados, somente
para leitura (no um arquivo no formato do SAS);
- Abre qualquer tipo de arquivo e interpreta todos os dados simplesmente
como texto;
- Este comando deve ser posicionado aps o comando DATA e necessita,
sempre e explicitamente, de um comando para leitura dos registros, o
comando INPUT.
INFILE <"arquivo de dados"> [opes] ;
Opes:

LRECL=
Tamanho do registro;
MISSOVER Previne o SAS de l um novo registro
para completar os dados de uma
varivel;

Ex.6: Declarao de arquivos textos sem formatao SAS


INFILE "C:\DADOS\ARQ1.TXT" ;
INFILE "A:\CADASTRO.PRN" missover;
infile 'C:\SAS\CAD.DAT' LRECL=3280 ;

DATA EXEMPLO ;
INFILE 'C:\TESTE\DADOS.TXT' lrecl=450 MISSOVER ;
.
.
.
.
.
.
.
.
.

27

11.6 - Comando INPUT


- Tipo: Comando de execuo;
- Uso: Data Step;

- O comando INPUT serve para descrever ao SAS como esto


armazenados e organizados os dados em arquivos textos que foram
especificados pelo comando INFILE;

- Todo arquivo aberto pelo comando INFILE, sempre necessitar de um


comando INPUT para ler o seu contedo;

- O comando INPUT pode ler um, ou vrios registros, de maneira


sequencial, registro aps registro, at encontrar um registro especial, que
identifica o fim de arquivo, EOF (End Of File), e ir atribuir nomes
(Variveis) para cada campo de um registro;

- Junto com o comando INPUT, todos os comandos que vierem em


seguida, sero executados at o registro que indica o fim de arquivo,
EOF ( o ciclo do DATA Step, mencionado na pag.22);

- Dois tipos bsicos de comando INPUT, so os mais utilizados:

- INPUT COLUNADO

- INPUT FORMATADO

28

11.6.1 - INPUT COLUNADO


- L os campos de dados, atribuindo-lhes um nome (NAME), um tipo
(TYPE), e especificando a sua posio inicial e final na linha de dados
do arquivo, o tamanho (LENGTH). Os campos de dados no arquivo
devem estar alinhados, fixos em colunas, para permitir a leitura correta
dos dados.
INPUT <varivel> [$] <incio>-<fim>

[.decimal] . . . ;

varivel

Nome do campo de dados.

Caractere opcional que indica que a varivel s ir conter


dados alfanumricos. Sem o $, significa que a varivel ser
numrica.

incio

Valor que indica a posio inicial da varivel na linha de


dados.

fim

Valor que indica a posio final da varivel na linha de


dados.

.decimal

Valor opcional, indica o nmero de posies decimais de


uma varivel numrica.

OBS: Durante a fase de compilao, atravs da anlise do comando INPUT, o


SAS ir definir o NOME, o TIPO e o TAMANHO (pelas informaes de coluna
inicial e final) das variveis.

29

Ex.7:Leitura de dados com o INPUT colunado


Arquivo: CADASTRO2.DAT
1

10

11

12

13

14

15

16

17

18

19

20

DATA FICHA ;
INFILE "C:\curso\sas\CADASTRO2.DAT";
input nome $ 1-8 sexo $ 9 idade 10-12 altura 13-16 .2 peso 17-20 ;
RUN;
proc print;run;
The SAS System
Obs

NOME

1
2
3
4

CARLOS
CARLA
SILVIA
MARCIO

SEXO
M
F
f
m

IDADE
18
26
21
32

11:33 Tuesday, June 3, 2014


ALTURA

PESO

1.70
1.78
1.65
1.82

68.0
72.0
60.5
.

DATA FICHA2 ;
INFILE "C:\curso\sas\CADASTRO2.dat";
INPUT ALTURA 13-16 .2 IDADE 10-12 NOME $ 1-8
PESO $ 17-20 SEXO $ 9 ;
RUN;
proc print;run;

The SAS System


Obs

ALTURA

1
2
3
4

1.70
1.78
1.65
1.82

IDADE
18
26
21
32

11:33 Tuesday, June 3, 2014

NOME

PESO

SEXO

CARLOS
CARLA
SILVIA
MARCIO

68.0
72.0
60.5
85,4

M
F
f
m

30

11.6.2 - INPUT FORMATADO


- L os campos de dados, atribuindo-lhes um nome (NAME), um tipo
(TYPE), e especificando o tamanho do campo (LENGTH), ou, um
formato de leitura (INFORMAT) com o tamanho do campo, para
interpretar o dado;
- O formato de leitura um recurso do SAS, para entender e armazenar
corretamente o dado que possui alguma caracterstica especial;
- o tipo de INPUT mais completo do SAS.
INPUT <varivel> [$] < w.d > ou [ informatw.d ] . . . ;
varivel

Nome do campo de dados.

Caractere opcional que indica que a varivel s ir conter


dados alfanumricos. Sem o $, significa que a varivel ser
numrica.

w.

Valor que indica o tamanho (width) de um campo na linha


de dados. O ponto no final obrigatrio.

w.d

Valor que indica o tamanho de um campo numrico com


casas decimais.

informatw.d

Interpretao do campo. Nome de um formato especial de


leitura dos dados:
L campo numrico no formato binrio e o
converte para decimal;
COMMAXw.d L campo numrico com vrgula e a troca
por ponto;
Ew.d
L campo numrico com notao cientfica;
HEXw.
L campo numrico em hexadecimal;
DDMMYYw.
L campo no formato padro de datas
dd/mm/yyyy.
BINARYw.d

31

11.6.3 - Descrio de um Campo Data


- Campos que representam datas necessitam que sejam identificados
pelo SAS atravs de um formato de leitura de datas, e armazenados
como numricos;
- O valor numrico armazenado representa o nmero de dias em
relao a data base SAS (01/01/1960);

- um campo que deve ser lido com um formato especial de leitura


para identificar a formatao da data e para ser armazenado como
numrico, possibilitando manipular a data em expresses e funes
aritmticas (clculos com datas);
Formatos de leitura:
DATE9.

L dados no formato:

01JAN1960

DDMMYY10.

L dados no formato:

01/01/1960

Formato padro de uma constante data no SAS:


"ddmmmyyyy"d

"01JAN1960"d
32

Ex.8: Leitura de dados com o INPUT formatado


Arquivo: CADASTRO2.DAT
1

10

11

12

13

14

15

16

17

18

19

20

DATA FICHA ;
INFILE "C:\curso\sas\CADASTRO2.dat";
INPUT NOME $ 8. SEXO $ 1. IDADE 3. ALTURA 4.2 PESO 4. ;
RUN;
proc print;run;

The SAS System


Obs

NOME

1
2
3
4

CARLOS
CARLA
SILVIA
MARCIO

SEXO
M
F
f
m

IDADE
18
26
21
32

11:33 Tuesday, June 3, 2014


ALTURA

PESO

1.70
1.78
1.65
1.82

68.0
72.0
60.5
.

DATA FICHA2 ;
INFILE "C:\curso\sas\CADASTRO2.dat";
INPUT NOME $ 8. SEXO $ 1. IDADE 3.
ALTURA 4.2 PESO commax4.1 ;
RUN;
proc print;run;

The SAS System


Obs

NOME

1
2
3
4

CARLOS
CARLA
SILVIA
MARCIO

SEXO
M
F
f
m

IDADE
18
26
21
32

11:33 Tuesday, June 3, 2014


ALTURA

PESO

1.70
1.78
1.65
1.82

68.0
72.0
60.5
85.4

10

33

Ex.9: Leitura de dados especiais com o INPUT formatado


Arquivo: NUMEROS2.PRN
1

10 11

12 13

14 15

16

17 18

19 20

21

22 23

24 25

26 27

28

29 30

31 32

33

34

DATA exemplo9a ;
INFILE "numeros2.prn";
INPUT cpf commax14. aniversario ddmmyy10. salario commax7.2
aumento percent3. ;
RUN;
PROC PRINT ; RUN ;
Datas armazenadas em nmero
de dias desde 01/01/1960.
The SAS System

11:33 Tuesday, June 3, 2014

Obs

cpf

aniversario

salario

aumento

1
2
3

23456755510
33349910014
98633311222

957
8364
9287

6683.58
8845.45
5632.55

0.10
0.15
0.12

17

34

11.6.4 Controle de Posio de Leitura do INPUT


Indicador de COLUNA ( @ )

@n

Move a leitura para a coluna n ;

Ex.10: INPUT formatado com indicador de coluna para leitura


Arquivo: CADASTRO2.DAT
1

11

12

F
A
O

10

13

14

15

16

17

18

19

20

DATA FICHA2 ;
INFILE "C:\curso\sas\CADASTRO2.dat";
INPUT @14 ALTURA 3.2 @11 IDADE 2. @1 NOME $ 8.
@17 PESO commax4.1 @9 SEXO $ 1. ;
RUN;
proc print;run;

The SAS System


Obs

ALTURA

1
2
3
4

1.70
1.78
1.65
1.82

IDADE
18
26
21
32

11:40 Wednesday, March 4, 2015

NOME

PESO

SEXO

CARLOS
CARLA
SILVIA
MARCIO

68.0
72.0
60.5
85.4

M
F
f
m

35

11.6.5 - Detalhes do Comando INPUT


- Em campos numricos, no so permitidos "brancos" entre os digitos do
nmeros;
- Sinal (+ - ), ponto decimal (.) e notao cientfica para expoente ( E ), so
permitidos em campos numricos;
- Campos tipo caractere podem ter, no mximo, 32.767 caracteres;
- So permitidos caracteres "brancos", em qualquer posio, em campos do tipo
caractere;
- Campos em branco (sem informao) so considerados como "missing value"
(valor perdido). O SAS ir armazenar o caractere branco, em campos caracteres,
e o caractere ponto, em campos numricos;
- Os campos de um registro de dados podem ser lidos em qualquer ordem.
INPUT

PESO 17-20

NOME $ 1-8

IDADE 11-12

SEXO $ 9 ;

- Campos ou partes de um campo podem ser relidos.


INPUT

NOME $ 1-8

PREFIXO $ 1-3 ENDERECO $ 10-40 APT $ 38-40 ;

- Dados caracteres sero armazenados alinhados pela esquerda, e os dados


numricos, alinhados pela direita;
- Os tipos de INPUT, colunado ou formatado, podem ser combinados num
nico comando INPUT;
- Detalhes de leituras com nomes e formatos repetitivos;
INPUT JAN 3. FEV 3. MAR 3. ABR 3. MAI 3. JUN 3. ;
INPUT (JAN FEV MAR ABR MAI JUN) (3.) ;
INPUT (MES1 MES2 MES3 MES4 MES5 MES6) (3.) ;
INPUT (MES1-MES6) (3.) ;

36

11.7 - Comando RUN


- Tipo: Comando de execuo;
- Uso: Data Step e Proc Step;
- Comando que identifica o fim de uma estrutura Data Step e Proc Step e
indica ao SAS que o step deve ser executado imediatamente;
- apenas necessrio no ltimo step;

37

1 LABORATRIO
Montar um programa SAS que leia um arquivo de dados externo ( no um arquivo
SAS ) e gere um arquivo no formato SAS (Data Set), permanente.
Passos do programa:
1-Criar uma biblioteca SAS indicando a pasta c:\curso\sas para armazenar os arquivos SAS de maneira
permanente. Utilize o comando: LIBNAME ;
2-Inicie um DATA Step e abra um arquivo SAS de nome CADASTRO, para gravao dos dados,
utilizando a biblioteca criada no passo anterior. Utilize o comando DATA ;
3-Abra o arquivo de dados externo de nome CADASTRO.DAT que est na pasta c:\curso\sas. O tamanho
do registro de dados de 130 bytes. Utilize o comando INFILE ;
4-Leia os dados deste arquivo, sabendo-se que o contedo do arquivo est dividido em diversos campos de
acordo com a descrio abaixo. Utilize o comando INPUT, colunado ou formatado ou, ambos ;
Nome do
Campo
NOME

Tipo do
Campo
Caractere

Tamanho do
Campo
30

SEXO

Caractere

31

IDADE

Numrico

32

PESO

Numrico

34

ALTURA

Numrico

40

ANIVERSARIO

Numrico

10

44

ESTADO CIVIL

Caractere

54

FILHOS

Numrico

55

RG

Caractere

15

57

CPF

Caractere

11

72

EMPRESA

Caractere

15

83

FUNCAO

Caractere

12

98

ADMISSAO

Numrico

110

Campo formatado: Ex 18JAN2005

SALARIO

Numrico

12

119

Campo formatado: Ex. 3.548,25

Decimais

Posio
Inicial
1

Detalhe

Campo formatado: Ex. 18/01/2005

5-Continuando o comando INPUT, leia novamente parte do campo EMPRESA, na posio 89, defina uma
nova varivel, TIPO DE EMPRESA, com 9 caracteres. Utilize o posicionamento de coluna para ler o
campo;
6-Gere um relatrio com os resultados da leitura do arquivo de dados, com os comandos abaixo:
PROC PRINT;RUN;
OBS: Salve os seus programas! Faa-o sempre, no diretrio c:\curso\sas

38

12 - ESTRUTURA PROC Step


12.1 - Introduo
- a seo de um programa SAS aonde se analisam os dados de um arquivo
SAS, utilizando-se procedimentos especficos para cada tipo de anlise.
- A maioria dos procedimentos SAS, geram relatrios tcnicos;
- Todos os procedimentos iniciam com a palavra PROC seguida do nome
especfico do procedimento ou rotina desejada;
- Os comandos em uma PROC no seguem uma sequncia lgica, ou seja,
podem ser colocados em qualquer ordem dentro da PROC;
PROC <rotina> [opes] ;
[comando1] ;
[comando2] ;
...
[comandon] ;
RUN ;

RUN

rotina

Palavra-chave que identifica o procedimento a ser


executado.

opes

Parmetros opcionais de configurao para execuo


do procedimento.

comando

Comandos de
procedimento.

detalhamento

na

execuo

do

Comando para execuo do procedimento SAS.


Necessrio no ltimo procedimento do programa
SAS.

39

12.1.1 - Comando VAR

- Tipo: Comando de declarao;


- Uso: Proc Step

- Comando comum vrias PROCS (PRINT, MEANS, SUMMARY,


TABULATE, etc), mas que pode possuir caractersticas especficas
da PROC utilizada; no geral, especifica uma lista de variveis do
arquivo SAS que sero processadas pelo procedimento.

VAR <lista de variveis> ;

lista de variveis

varivel varivel varivel ... varivel ;


x1-xn ; (variveis numeradas)
varLXP--varB8T ; (todas as variveis entre)
var: ; (todas as variveis com o mesmo prefixo)
_numeric_ ; (todas as variveis numricas)
_character_ ; (todas as variveis caracteres)

40

12.1.2 - Comando BY
- Tipo: Comando de declarao;
- Uso: Data Step e Proc Step;
- Especifica uma lista de variveis que permitiro o processamento de
grupos, determinados pelos valores das variveis.
BY data step
- Sempre utilizado associado aos comandos: SET, MERGE,
MODIFY e UPDATE, para controlar a leitura dos dados por
agrupamento de valores.
BY [descending] <varivel1> [descending] <varivel2> ... ;
BY proc step
- Utilizado para permitir a anlise dos dados por grupos, e
gerar relatrios com os dados em ordem ascendente ou
descendente.
BY [descending] <varivel1> [descending] <varivel2> ... ;
- Exemplo de variveis que permitem o processamento por grupo:
SEXO, EMPRESA, ESTADO, IDADE.

OBS: Muito importante! Este comando, seja utilizado em Data step


ou em Proc step, exige que o arquivo que ser processado, esteja
ordenado ou indexado pelas variveis especificadas, ou seja, antes do
processamento, ser necessrio ordenar ou indexar os dados. Nesta
apostila, veja o item sobre ordenao de dados 12.3 - Procedimento
SORT, pag. 44.
41

12.1.3 - Comando TITLE


- Tipo: Comando de declarao;
- Uso: Livre;
- Pode ser codificado em qualquer parte do programa. Especifica de 1 at
10 ttulos para o relatrio a ser gerado pelo procedimento.
TITLE "<cabealho>" ;
TITLE1 "<cabealho>" ;
...
TITLE10 "<cabealho>" ;
OBS: Um ttulo permanece ativo at que seja modificado, ou eliminado
com o comando: TITLE;

12.1.4 - Comando FOOTNOTE


- Tipo: Comando de declarao;
- Uso: Livre;
- Pode ser codificado em qualquer parte do programa. Especifica de 1 at
10 rodaps para o relatrio a ser gerado pelo procedimento.
FOOTNOTE "<rodap>" ;
FOOTNOTE1 "<rodap>" ;
...
FOOTNOTE10 "<rodap>" ;
OBS: Um rodap permanece ativo at que seja modificado, ou eliminado
com o comando: FOOTNOTE;

42

12.2 - Procedimento PRINT


- Procedimento do SAS que imprime, na sada padro, os dados contidos nos
arquivos SAS;
- A sada padro , normalmente, a janela OUTPUT em uma sesso SAS
Windows.
PROC PRINT [opes] ;
VAR <lista de variveis> ;
BY <lista de variveis> ;
SUM <lista de variveis> ;
opes

DATA=

Nome do arquivo SAS;

DOUBLE

Espacejamento duplo;

NOOBS

Suprime a coluna com o nmero de cada


observao do arquivo;

LABEL

Imprime uma "descrio", das variveis;

BLANKLINE= n

Insere uma linha em branco a cada n linhas


de dados;

VAR

Especifica uma lista de variveis que sero


impressas;

BY

Especifica a quebra ou agrupamento do


relatrio, por uma ou mais variveis;

SUM

Especifica uma ou mais variveis


numricas que sero totalizadas;

43

Ex.11:Procedimento PRINT 1
libname tre "c:\curso\sas";
title "Relatrio de Funcionrios" ;
PROC PRINT DATA=tre.exemplo1 noobs ;
var NOME FUNCAO ;
RUN ;
Relatrio de Funcionrios

11:33 Tuesday, June 3, 2014

nome

funcao

PAULO MOUA
MARIA MOUA
PAULO GUEDES
CARLA CERTO
CARLA APARECIDO
ROSANE YATAKA
CARLA MARQUES
CARLA MILIA
MARCELO SUNAY
MARCO MOUA
MADALENA MOUA
MONICA MOUA
ELIANE MOUA
JOAO MOUA

ANALISTA
GERENTE
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
ANALISTA
ANALISTA
ANALISTA
ANALISTA
GERENTE

68

Ex.12: Procedimento PRINT 2


libname tre "c:\curso\sas";
title "Relatrio de Funcionrios" ;
footnote "FONTE: RH" ;
PROC PRINT DATA=tre.exemplo1 noobs ;
var NOME FUNCAO SALARIO ;
sum salario ;
RUN ;
Relatrio de Funcionrios
nome

funcao

PAULO MOUA
MARIA MOUA
PAULO GUEDES
CARLA CERTO
CARLA APARECIDO
ROSANE YATAKA
CARLA MARQUES
CARLA MILIA
MARCELO SUNAY
MARCO MOUA
MADALENA MOUA
MONICA MOUA
ELIANE MOUA
JOAO MOUA
MIRIAM MOUA

ANALISTA
GERENTE
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
PROGRAMADOR
ANALISTA
ANALISTA
ANALISTA
ANALISTA
GERENTE
GERENTE

11:33 Tuesday, June 3, 2014

69

salario
9548.36
19303.66
3828.77
3972.30
1557.69
3080.18
3233.49
1698.51
1530.04
9988.53
14821.37
12568.82
13694.19
20611.56
13075.91
=========
132513.38

FONTE: RH

44

12.3 - Procedimento SORT


- Procedimento do SAS que ordena os registros dos arquivos por uma
ou mais variveis, em ordem ascendente ou descendente;
- No possui sada impressa;
- possvel gerar um novo arquivo ordenado.

PROC SORT [opes] ;


<BY/KEY> [descending] <lista de variveis> ;
opes

DATA=

Nome do arquivo SAS para ser ordenado;

OUT=

Nome do arquivo SAS, aonde sero armazenado os


dados ordenados. Se no for utilizada essa opo, a
ordenao ser feita em cima do arquivo original;

NODUPKEY Opo que elimina os registros com chaves

duplicadas;
DUPOUT= Nome para arquivo que ir armazenar os registros
duplicados;
SORTSIZE= Especifica o limite para o uso de memria.
Inicialmente em 256MBytes;
BY ou KEY

Comando obrigatrio, especifica uma ou mais


variveis que iro determinar a ordenao dos
dados. S pode existir um comando BY dentro de
uma proc sort;

OBS: A ordenao sempre feita na ordem ascendente. Para ordenar na


ordem descendente necessrio colocar o parmetro descending, antes
da varivel a ser ordenada no comando BY.

45

Ex.13: Procedimento SORT


title "Relatrio de Funcionrios" ;
footnote;
PROC SORT DATA=TRE.EXEMPLO1 OUT=ORDENA ;
BY FUNCAO ;
RUN ;
PROC PRINT DATA=ORDENA NOOBS ;
BY FUNCAO ;
VAR NOME SALARIO ;
SUM SALARIO ;
RUN ;
Relatrio de Funcionrios

12:00 Monday, June 16, 2014

--------------------------------------- funcao=ANALISTA --------------------------------------nome


MARCO MOUA
LIGIA MOUA
TANIA MOUA
MADALENA MOUA
CARLA MOUA
MONICA MOUA
------------funcao

salario
9988.53
5047.05
5418.33
14821.37
7221.58
12568.82
-------55065.68

--------------------------------------- funcao=GERENTE ---------------------------------------nome


JOAO MOUA
LUIS MOUA
LICIA MOUA
MIRIAM MOUA
----------funcao

salario
20611.56
17414.14
17260.69
13075.91
-------68362.30

------------------------------------- funcao=PROGRAMADOR -------------------------------------nome


PAULO GUEDES
MARCO SONTAS
PAULO HORTA
CARLA CERTO
ROSANE PISCO
CARLA APARECIDO
ROSANE YATAKA
ELIANE MARUEL
--------------funcao

salario
3828.77
5098.46
3101.32
3972.30
3045.33
1557.69
3080.18
3024.76
--------26708.81
=========
150136.79

46

13 - ARQUIVO DE MENSAGENS - "SAS Log"


- Ao se executar um programa SAS, gerado um relatrio de mensagens com
notificaes e erros da execuo do programa (janela LOG).
- Muito til, deve ser sempre analisado, principalmente quando no aparecer o
relatrio com os resultados na janela OUTPUT, ou, quando esse relatrio
aparecer com problemas.
Ex.14: Exemplo de LOG sem problemas na execuo 1
DATA LOG1 ;
INFILE "C:\curso\sas\DADOS.TXT" ;
INPUT NOME $1-8 SEXO $10 FUNCAO $12-23 SALARIO 25-31 ;
RUN;
PROC PRINT DATA=LOG1 NOOBS ;
VAR NOME FUNCAO ;
RUN;;
88
89
90
91

DATA LOG1 ;
INFILE "C:\curso\sas\DADOS.TXT" ;
INPUT NOME $1-8 SEXO $10 FUNCAO $12-23 SALARIO 25-31 ;
RUN;

ltima posio lida do registro.

NOTE: The infile "C:\curso\sas\DADOS.TXT" is:


Filename= C:\curso\sas\DADOS.TXT,
RECFM=V,LRECL=256,File Size (bytes)=297,
Last Modified=06 de Agosto de 2010 15h34min0,
Create Time=16 de Junho de 2014 14h28min15
Esses nmeros indicam coerncia na leitura e gravao dos dados. Quando existir apenas um
comando INPUT e sem avano de linha, os nmeros, geralmente, so iguais.

NOTE: 9 records were read from the infile


"C:\curso\sas\DADOS.TXT ".
The minimum record length was 31.
ATENO! Registros de tamanho varivel podem ocasionar erros de
The maximum record length was 33.
leitura. Talvez haja necessidade da opo MISSOVER no comando
INFILE.

NOTE: The data set WORK.LOG1 has 9 observations and 4 variables.


NOTE: DATA statement used (Total process time):
real time
0.05 seconds
cpu time
0.01 seconds

92
93
94

PROC PRINT DATA=LOG1 NOOBS ;


VAR NOME FUNCAO ;
RUN;

NOTE: There were 9 observations read from the data set WORK.LOG1.
NOTE: PROCEDURE PRINT used (Total process time):
real time
0.01 seconds
cpu time
0.00 seconds

47

Ex.15: Exemplo de LOG com problemas na execuo 2


DATA LOG2 ;
INFILE "C:\curso\sas\DADOS.TXT" ;
INPUT NOME $1-8 SEXO $10 FUNO $12-23 SALARIO 25-31 ;
RUN;
PROC PRINT DATA=LOG2 NOOBS
VAR NOME FUNO ;
RUN;
123 DATA LOG2 ;
124
INFILE "C:\curso\sas\DADOS.TXT" ;
125
INPUT NOME $1-8 SEXO $10 FUNO $12-23 SALARIO 25-31 ;
ERROR: The name FUNO is not a valid SAS name

*** No permitido caracteres especiais ou


acentuados em nomes de arquivos e variveis

126

RUN;

NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.LOG2 may be incomplete. When this step was stopped there were 0
observations and 3 variables.
WARNING: Data set WORK.LOG2 was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
real time
0.00 seconds
cpu time
0.00 seconds
*** Faltou finalizar com ; O comando
PROC PRINT. O erro ocorre no prximo
comando, neste caso, o comando VAR foi
tratado como uma opo do comando PROC
PRINT; como essa opo no existe,
ocorre o erro.

127
128

PROC PRINT DATA=LOG2 NOOBS ???


VAR NOME FUNO ;
--22
202
ERROR 22-322: Syntax error, expecting one of the following: ;, BLANKLINE, DATA, DOUBLE,
HEADING, LABEL, N, NOOBS, OBS, ROUND, ROWS, SPLIT, STYLE, SUMLABEL, UNIFORM,
WIDTH.
ERROR 202-322: The option or parameter is not recognized and will be ignored.

129

RUN;

NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE PRINT used (Total process time):
real time
0.00 seconds
cpu time
0.00 seconds

48

Ex.16: Exemplo de LOG com detalhes e problemas na execuo 3


DATA LOG3 ;
INFILE "C:\curso\sas\DADOS.TXT" ;
INPUT NOME $1-8 SEXO $10 FUNCAO $12-23 SALARIO $25-33 ;
RUN;
PROC PRINT DATA=LOG3 NOOBS ;
VAR NOME CARGO ;
SUM SALARIO ;
RUN;
40
41
42
43

DATA LOG3 ;
INFILE "C:\curso\sas\DADOS.TXT" ;
INPUT NOME $1-8 SEXO $10 FUNCAO $12-23 SALARIO $25-33 ;
RUN;

NOTE: The infile "C:\curso\sas\DADOS.TXT" is:


Filename=C:\curso\sas\DADOS.TXT,
RECFM=V,LRECL=256,File Size (bytes)=297,
Last Modified=06 de Agosto de 2010 15h34min0,
Create Time=16 de Junho de 2014 14h28min15

Este
NOTE,
indica
que
o
SAS
precisou ler um novo registro para
completar a leitura de dados de
uma varivel. Indica a necessidade
de
usar
a
opo
MISSOVER
no
comando INFILE.

Nove registros lidos

NOTE: 9 records were read from the infile


"C:\curso\sas\DADOS.TXT".
The minimum record length was 31.
The maximum record length was 33.
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
NOTE: The data set WORK.LOG3 has 5 observations and 4 variables.
NOTE: DATA statement used (Total process time): Cinco registros gravados ???
real time
0.02 seconds
cpu time
0.01 seconds

No
existe
a
44
PROC PRINT DATA=LOG3 NOOBS ;
varivel
CARGO
no
45
VAR NOME CARGO ;
arquivo.
ERROR: Variable CARGO not found.
46
SUM SALARIO ;
ERROR: Variable SALARIO in list does not match type prescribed for this list.
47
RUN;

NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE PRINT used (Total process time):
real time
0.04 seconds
A varivel SALARIO foi
originalmente criada no
cpu time
0.01 seconds

comando
INPUT
como
sendo
do
tipo
caractere.
O
comando
SUM da PROC PRINT exige
que a varivel seja do
tipo numrica.

49

2 LABORATRIO
Manipular os procedimentos de impresso e ordenao.
Em todos os programas, utilize o arquivo SAS gerado no 1 laboratrio.
1 Monte um programa SAS que gere um relatrio:
- com as variveis: NOME, EMPRESA, FUNCAO e SALARIO;
- com opes para: espacejamento DUPLO e para no aparecer a coluna com o nmero de registros (OBS);
(Utilize o procedimento PRINT )
2 Monte um programa SAS que ordene os dados e gere um relatrio:
- crie, primeiro, um novo arquivo SAS ordenado por EMPRESA;
- um relatrio com todos os dados, agrupados por EMPRESA;
(Utilize os procedimentos SORT e PRINT)
3 Utilizando o arquivo ordenado do item anterior, monte um programa SAS:
- gere um relatrio agrupado por EMPRESA;
- com as variveis: NOME, FUNCAO e SALARIO;
- que possua um somatrio da varivel SALARIO;
- com uma linha em branco a cada 3 linhas de dados;
- com o ttulo "Relatrio de Salrios por Empresa";
- coloque o rodap "FONTE: Fundao Getlio Vargas";
(Utilize o procedimento PRINT)
4 Monte um programa SAS que gere um relatrio:
- com as variveis: NOME, FUNCAO e SALARIO;
- em ordem ascendente por EMPRESA e descendente por SALARIO.
(Utilize os procedimentos SORT e PRINT)
5 Monte um programa SAS que gere um relatrio:
- esteja ordenado por EMPRESA, mas sem agrupamento;
- com as variveis: NOME, EMPRESA e SALARIO;
- tenha espacejamento DUPLO;
- sem ttulo e sem rodap;
- com o somatrio da varivel SALARIO;
(Utilize o procedimento PRINT)
6 Monte um programa SAS que gere um relatrio com apenas os funcionrios que mais ganham por funo, de cada empresa.

A - Primeiro passo:
- Execute um PROC SORT, por EMPRESA, FUNCAO e ordem descendente de SALARIO;
- Verifique os resultados com a PROC PRINT, com as variveis: NOME, EMPRESA, FUNCAO, SALARIO;
B - Segundo passo:
- Execute um PROC SORT, mas gerando um NOVO ARQUIVO temporrio, por EMPRESA e FUNCAO;
- Elimine as duplicatas de EMPRESA e FUNCAO, desse novo arquivo, atravs de um opo do PROC SORT;
- Verifique os resultados com a PROC PRINT, com as variveis: NOME, EMPRESA, FUNCAO, SALARIO;
- Verifique se os resultados esto de acordo com o que foi solicitado no enunciado do exerccio.

50

14 - COMANDOS BSICOS DE PROGRAMAO SAS


14.1 - Comando de Alocao (=)
- Tipo: Comando de execuo;
- Uso: Data Step;
- Comando caractere utilizado para criar novas variveis e editar as j existentes em um Data Step.
<varivel> = <expresso> ;
varivel
expresso

Nome com no mximo 32 caracteres.


Expresses do tipo:

- Operaes aritmticas simples: + - * / **


x2=x ;
soma=x+y ;
dif=x-y ;
dobro=x*2 ;
met=x/2 ;
cubo=x**3 ;
y=-x ;

Move valor;
Adio;
Subtrao;
Multiplicao;
Diviso;
Potenciao;
Mudana de sinal;

- Constantes :
N=0 ;

Constante numrica;

SEXO="F" ;

Constante caractere;

- Concatenao de caracteres : ||
A=PAULO || ANTUNES;
B=PAULO || || ANTUNES;

A=PAULOANTUNES
B=PAULO ANTUNES

- Prioridade de execuo em expresses aritmticas:


1- O operador com maior prioridade executado primeiro;
2- Se os operadores possurem a mesma prioridade ser executado o que vier primeiro, da
esquerda para direita;
3- Parntesis dentro de parntesis, o mais interno executado primeiro;
1

( )

funo

**

*/

+-

Maior prioridade

Menor prioridade

A=X+Y+Z ;

A=X+Y*Z ;

A=X/(Y/Z) ;

S=SQRT(X) ;

A=INT(X) ;

Z=ABS(SQRT(X)-2) ;

- Funes:

51

Ex.17: Comando de Alocao


01
9
9
9
9

02
4
5
6
7

03

04
5
6
8

Arquivo: NUMEROS.TXT
05
06
07
08
6
5
0
2
8
0
4
5
0

09
1
1
2
1

10
0
1
4
5

11
5
4
5
0

12
0
0
0
0

LIBNAME ARQ "C:\curso\sas" ;


DATA ARQ.LUCROS ;
INFILE "C:\curso\sas\NUMEROS.TXT";
INPUT ANO 1-2 RECEITA 4-7 DESPESAS 9-12;
VAL_DOL = 0.98 ;
ANO = ANO + 1900 ;
LUCRO = RECEITA - DESPESAS ;
DOLLAR = ( RECEITA - DESPESAS ) / VAL_DOL ;
RUN;
PROC PRINT DATA=ARQ.LUCROS NOOBS ;
TITLE "Analise Contbil" ;
VAR ANO RECEITA DESPESAS LUCRO DOLLAR ;
SUM RECEITA DESPESAS LUCRO DOLLAR ;
RUN ;
Analise Contbil

11:17 Friday, June 27, 2014

ANO

RECEITA

DESPESAS

LUCRO

DOLLAR

1994
1995
1996
1997

5650
6280
8450
.
=======
20380

1050
1140
2450
1500
========
6140

4600
5140
6000
.
=====
15740

4693.88
5244.90
6122.45
.
========
16061.22

ATENO!!! Qualquer operao


com missing value ter como
resultado, missing value.

Leitura de pginas de dados do disco


numeros.txt
MEMRIA

Pginas de dados de leitura


----------

Leitura sequencial dos registros

-----------------------

Input Buffer = 256 Bytes


Distribuio dos dados no vetor de dados do programa
ANO
N

RECEITA
N

DESPESAS
N

VAL_DOL
N

LUCRO
N

DOLLAR
N

PDV

Gravao sequencial dos registros


---------------------------------- Pginas de dados de gravao

ARQ.LUCROS

Gravao de pginas de dados no disco

52

14.2 - Comando RETAIN


- Tipo: Comando de declarao;
- Uso: Data Step;
- Normalmente o SAS inicia todas as variveis criadas no DATA Step, pelo
comando INPUT ou pelos comandos de alocao, com o valor missing, a cada
iterao do DATA Step;
- O Comando RETAIN define uma varivel com um valor inicial, e determina que
ela no seja reinicializada a cada iterao do DATA Step;
- Deve ser posicionado sempre antes do comando que ir utilizar a varivel definida;

RETAIN <varivel1> [valor inicial]


...
...
<variveln> [valor inicial] ;
Ex.18: Comando RETAIN
LIBNAME ARQ "C:\curso\sas" ;
DATA ARQ.LUCROS ;
RETAIN TOTAL 0;
INFILE "C:\curso\sas\NUMEROS.TXT";
INPUT ANO 1-2 RECEITA 4-7 DESPESAS 9-12;
ANO = ANO + 1900 ;
LUCRO = RECEITA - DESPESAS ;
TOTAL = TOTAL + LUCRO ;
DOLLAR = LUCRO / 0.98 ;
RUN;
PROC PRINT DATA=ARQ.LUCROS NOOBS;
TITLE "Analise Contbil" ;
VAR RECEITA DESPESAS LUCRO DOLLAR TOTAL ;
SUM RECEITA DESPESAS LUCRO DOLLAR ;
RUN ;
Analise Contbil

11:17 Friday, June 27, 2014

RECEITA

DESPESAS

LUCRO

DOLLAR

TOTAL

5650
6280
8450
.
=======
20380

1050
1140
2450
1500
========
6140

4600
5140
6000
.
=====
15740

4693.88
5244.90
6122.45
.
========
16061.22

4600
9740
15740
.

53

14.3 - Comando IF-THEN/ELSE


- Tipo: Comando de Execuo;
- Uso: Data Step;
- Comando que condiciona a execuo de outro comando SAS, de
acordo com uma expresso lgica;
- Se a expresso, que determina a condio for verdadeira (ou o
valor 1), ser executado o comando que vier aps o THEN. Se a
condio for falsa (ou o valor 0), ser executado o comando que
vier aps o ELSE. Somente um comando, aps o THEN e do
ELSE
IF

<expresso>

[THEN] <comando> ;
[ELSE] <comando> ;

expresso Combinao de variveis com operadores de comparao e/ou


operadores lgicos que determinam uma condio.
comando Comando do SAS que ser executado de acordo com o resultado
da condio.
Operadores de Comparao
GT
LT
EQ
LE
GE
NE
NL
NG
IN

>
<
=
<=
>=
~=

maior que
menor que
igual a
menor ou igual a
maior ou igual a
no igual (diferente)
no menor
no maior
est no conjunto

Operadores Lgicos
AND & e, ambos
OR
| ou, um ou outro
NOT ~ no, negao

54

Ex.19: Comando IF (Somente Selecionar de dados)


LIBNAME DAD "C:\curso\sas";
DATA DAD.DADOS86 ;
INFILE "C:\curso\sas\CADASTRO.TXT" LRECL=50 MISSOVER;
INPUT NOME $8. @21 EMP $15. @37 ANO 4. ;
IF ANO=1986 ;
RUN;
PROC PRINT;RUN;
Log
91
92
93
94
95

DATA DAD.DADOS86 ;
INFILE "A:\DADOS\CADASTRO.TXT" LRECL=50 MISSOVER ;
INPUT NOME $8. @21 EMP $15. @37 ANO 4. ;
IF ANO=1986 ;
RUN;

NOTE: The infile "A:\DADOS\CADASTRO.TXT" is:


Filename=A:\DADOS\CADASTRO.TXT,
RECFM=V,LRECL=50,File Size (bytes)=22752,
Last Modified=01 de Julho de 2014 12h34min43,
Create Time=01 de Julho de 2014 12h28min44
NOTE: 550 records were read from the infile
"A:\DADOS\CADASTRO.TXT".
The minimum record length was 37. Indicativo para uso da opo MISSOVER
The maximum record length was 40.
NOTE: The data set DAD.DADOS86 has 8 observations and 3 variables.
NOTE: DATA statement used (Total process time):
real time
0.02 seconds
cpu time
0.03 seconds
96
97

PROC PRINT;RUN;

NOTE: There were 8 observations read from the data set DAD.DADOS86.
NOTE: PROCEDURE PRINT used (Total process time):
real time
0.03 seconds
cpu time
0.00 seconds

The SAS System


Obs

NOME

1
2
3
4
5
6
7
8

JOAO
LUIS
LICIA
MIRIAM
MARIA
RENATO
MARCIO
ROSANE

EMP
MALTA
ATLAS
ATLAS
MALTA
PARIS
MALTA
ATLAS
MALTA

08:46 Monday, June 30, 2014

ANO
LTDA
S.A.
S.A.
LTDA
INSTITUTO
LTDA
S.A.
LTDA

1986
1986
1986
1986
1986
1986
1986
1986

55

Ex.20: Comando IF (Operadores de Comparao)


Arquivo: NOTAS.TXT

DATA

01

02

03

04

05

06

07

09

10

11

08

NOTA ;
INFILE "C:\curso\sas\NOTAS.TXT" ;
INPUT NOME $ 1-8 NOTA 9-11;
IF NOTA LT 3
THEN CONCEITO="E"
IF 3 <= NOTA < 5 THEN CONCEITO="D"
IF 5 LE NOTA LT 7 THEN CONCEITO="C"
IF 7 LE NOTA LT 9 THEN CONCEITO="B"
ELSE CONCEITO="A"

;
;
;
;
;

RUN;
PROC PRINT NOOBS ;
RUN;
The SAS System
NOME

NOTA

VIVIANE
LIDIA
PAULO
CLAUDIO
LUIZ

12:12 Wednesday, July 2, 2014

CONCEITO

2.5
9.5
6.8
6.8
4.9

A
A
A
A
A

O que est errado ???


DATA

NOTA ;
INFILE "C:\curso\sas\NOTAS.TXT" ;
INPUT NOME $ 1-8 NOTA 9-11;
IF NOTA LT 3 THEN CONCEITO="E" ;
ELSE IF 3 <= NOTA < 5
THEN CONCEITO="D" ;
ELSE IF 5 LE NOTA LT 7 THEN CONCEITO="C" ;
ELSE IF 7 LE NOTA LT 9 THEN CONCEITO="B" ;
ELSE CONCEITO="A" ;

RUN;
PROC PRINT NOOBS ;
RUN;
The SAS System
NOME
VIVIANE
LIDIA
PAULO
CLAUDIO
LUIZ

NOTA
2.5
9.5
6.8
6.8
4.9

12:12 Wednesday, July 2, 2014

CONCEITO
E
A
C
C
D

56

Ex.21: Comando IF (Operadores Lgicos)


LIBNAME TESTE "C:\curso\sas" ;
DATA TESTE.CLASSE ;
INFILE "C:\curso\sas\CLASSE.TXT";
INPUT NOME $ 1-7 SEXO $ 8 IDADE 10-11 @13 ALTURA 4.2 ;
IF (SEXO="1" AND ALTURA<1.55) OR (SEXO="1" AND IDADE<12)
THEN CLASSE="100" ;
ELSE IF (SEXO="2" AND ALTURA<1.55) OR (SEXO="2" AND IDADE<12)
THEN CLASSE="200" ;
ELSE CLASSE="300" ;
RUN;

Arquivo: CLASSE.TXT
01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

PROC PRINT NOOBS ;


VAR NOME CLASSE ;
RUN ;
The SAS System
NOME

CLASSE

PAULA
FLAVIA
MARCOS
LUIS

100
300
200
300

12:41 Monday, January 26, 2015

Ex.22: Comando IF (Operadores Lgicos)


IF ESTADO="RJ" OR ESTADO="SP" THEN REGIAO="SUDESTE" ;
IF ESTADO="SP" AND CIDADE="CAMPINAS" THEN CEP="13000-000" ;

57

14.4 - Comando WHERE;


- Tipo: Comando de execuo;
- Uso: Data Step, Proc Step e Opo de arquivos;

- Comando que possui como nica ao, selecionar registros, se uma


expresso for verdadeira;

- A expresso do comando WHERE s pode conter variveis que j


existam em arquivos SAS, ou seja, no podem ser utilizadas variveis que
esto sendo criadas no DATA Step, por comandos de atribuio (=), ou
pelo comando INPUT;

- Alm dos operadores de comparao e lgicos do comando IF, existem


alguns operadores especiais no comando WHERE.

WHERE <expresso> ;

expresso

Combinao de variveis com operadores de comparao,


operadores lgicos e/ou operadores especiais, que
determinam uma condio. Se for verdadeira, o registro
selecionado, processado e salvo. Se for falso o registro
descartado.

Alguns operadores especiais:


BETWEEN-AND
CONTAINS

entre um e outro
contm

58

Ex.23: Comando WHERE


DATA TESTE;
SET ARQ.CADASTRO;
WHERE SALARIO BETWEEN 5000 AND 10000;
RUN;
PROC PRINT data=teste;
var nome salario;
RUN;

The SAS System

12:41 Monday, January 26, 2015

Obs

nome

salario

1
2
3
4
5
6
7
8
9
10
11
12

MOUA,PAULO
MOUA,MARCO
SONTAS,MARCO
MEREDITE,JOAO
MARUEL,MARCO
ANJOA,MONICA
LUILA,CARLA
MEREDITE,LUIS
MOUA,LIGIA
MOUA,TANIA
MOUA,CARLA
MOUA,LAURA

9548.36
9988.53
5098.46
5023.91
5157.09
5066.22
5178.65
5123.16
5047.05
5418.33
7221.58
7402.21

19

PROC PRINT DATA=ARQ.CADASTRO;


var nome;
WHERE NOME CONTAINS "SILVA";
RUN;
The SAS System
Obs

nome

17
21
40
44
197
213
278
283
376
383
399
411
423
440
450
453
463
468
498
502
505
508
532

YATAKA,SILVANA
SILVA,MADALENA
SILVA,CECILIA
SILVA,MARCO
SILVA,TANIA
SILVA,CARLA
SILVA,MARIA
SILVA,LICIA
SILVA,ROSANE
SILVA,MARCIO
SILVA,LAURA
SILVA,JOAO
SILVA,EDUARDO
SILVA,MONICA
SILVA,RENATO
SILVA,LIGIA
SILVA,MARCELO
SILVA,LUIS
SILVA,MIRIAM
SILVA,FRANCISCA
SILVA,FLAVIA
SILVA,ELIANE
SILVA,PAULO

12:41 Monday, January 26, 2015

29

59

14.5 - Comandos DO/END


- Tipo: Comando de execuo;
- Uso: Data Step
- Comando que define a execuo de um bloco de comandos do SAS;
- Todos os comandos existentes entre o comando DO e o comando END,
devero ser executados imediatamente;
- Comandos DO e END podem ser usados para executar um grupo de
comandos quando se encontra uma condio, normalmente, para ampliar
o comando IF-THEN/ELSE.

IF <expresso> THEN DO;


<comando1> ;
<comando2> ;
...
<comandon> ;
END ;
Ex.24: Comando DO/END
DATA TRABALHO ;
INFILE "C:\curso\sas\EMPRESA.DAT" ;
INPUT NOME $ 1-8 DEP_NO $ 10-12 COM 14-17 SALARIO 19-23 ;
IF DEP_NO="201" THEN DO ;
DEP="VENDAS" ;
SAL=COM+SALARIO ;
END ;
ELSE DO ;
DEP="ADMINISTRATIVO" ;
SAL=SALARIO ;
END ;
RUN;
PROC PRINT NOOBS ;
RUN ;
The SAS System
NOME

DEP_NO

COM

SALARIO

CARLOS
ELIANE
ALVARO
FATIMA

201
101
101
201

1500
.
.
500

1500
1800
3800
1500

12:41 Monday, January 26, 2015


DEP
VENDAS
ADMINI
ADMINI
VENDAS

30

SAL
3000
1800
3800
2000

60

14.6 - Comando LENGTH


- Tipo: Comando de declarao;
- Uso: Data Step;
- Comando que define uma varivel, o tipo e o tamanho em bytes. Deve
ser posicionado sempre antes da utilizao da varivel.
LENGTH

varivel [$] <tamanho>


...
varivel [$] <tamanho> ;

varivel Nome da varivel que deseja definir;


$

Caractere opcional, que indica que a varivel ser


alfanumrica;

tamanho Tamanho, em bytes, da varivel.

Ex.25: Comando LENGTH


DATA TRABALHO ;
INFILE "C:\curso\sas\EMPRESA.DAT" ;
INPUT NOME $ 1-8 DEP_NO $ 10-12 COM 14-17 SALARIO 19-23 ;
LENGTH DEP $ 14 ;
IF DEP_NO="201" THEN DO ;
DEP="VENDAS" ;
SAL=COM+SALARIO ;
END ;
ELSE DO ;
DEP="ADMINISTRATIVO" ;
SAL=SALARIO ;
END ;
RUN;
PROC PRINT NOOBS ;
RUN ;
The SAS System
NOME

DEP_NO

COM

SALARIO

CARLOS
ELIANE
ALVARO
FATIMA

201
101
101
201

1500
.
.
500

1500
1800
3800
1500

12:41 Monday, January 26, 2015


dep
VENDAS
ADMINISTRATIVO
ADMINISTRATIVO
VENDAS

31

SAL
3000
1800
3800
2000

61

14.7 - Comando DO/END Iterativo


- Tipo: Comando de execuo;
- Uso: Data Step;
- Comando utilizado para repetir um grupo de comandos n vezes.
DO <ndice> = <valor1> , <valor2> , ... , <valorn> ;
DO <ndice> = <incio> TO <fim> [BY <passo>]
[WHILE/UNTIL <(expresso)>];

ndice

Varivel auxiliar que armazena o valor da contagem do


"loop".

incio

Valor inicial do "loop".

fim

Valor final do "loop".

passo

Valor opcional que indica o incremento do "loop".

expresso

Campo opcional que representa uma combinao de


variveis que determinam uma condio para execuo do
"loop". A expresso deve vir entre parnteses.

62

Ex.26: Comando DO/END Iterativo


DO

MES="JAN","FEV","MAR" ; (3 vezes) ;END;

DO

I = 1 TO 120 ; (120 vezes)

DO

I = 1 TO 120 BY 2 ; (60 vezes) ;END;

DO

I = 120 TO 1 BY -1 ; (120 vezes) ;END;

DO

I = 1 TO 10

WHILE

DO

I = 2 TO 20

BY 2 UNTIL ((X/3)>Y) ; (10 vezes ou at (X/3)>Y) ;END;

DO

I = 10 TO 0

BY -1 WHILE (MES="JAN");(11 vezes ou enquanto o MES=JAN);END;

;END;

(X < Y) ; (10 vezes ou enquanto X < Y) ;END;

data teste;
set arq.cadastro;
where salario between 2000 and 2100;
novosal=salario;
do i=1 to 10 while (novosal<2200);
novosal=novosal*1.05;
end;
run;
proc print data=teste;
var nome salario novosal i;
run;

The SAS System


Obs
1
2
3
4
5
6
7
8
9
10

12:41 Monday, January 26, 2015 113

nome

salario

novosal

SUNAY,FRANCISCA
MENDES,ELIANE
GUEDES,CARLA
LONAS,FLAVIA
HORTA,MONICA
MENDES,CARLA
APARECIDO,PAULO
BENTES,MARCO
BENTES,JOAO
YATAKA,PAULO

2070.60
2071.18
2076.92
2020.77
2098.94
2095.91
2037.42
2025.92
2026.52
2056.53

2282.84
2283.48
2289.80
2227.90
2203.89
2200.71
2246.26
2233.58
2234.24
2267.32

3
3
3
3
2
2
3
3
3
3

63

14.8 - Comando DO WHILE


- Tipo: Comando de execuo;
- Uso: Data Step;
- Comando que repete um grupo de comandos enquanto uma expresso
for verdadeira;
- A expresso validada no incio do loop. Se a expresso for falsa, os
comandos dentro do loop, nunca sero executados;
- ATENO! Este tipo de loop pode incorrer em ciclo infinito, se os
valores da expresso no se alterarem dentro do loop.

DO WHILE <(expresso)> ; <== ( Validao no incio )


...
END;
expresso

Combinao de variveis que determina uma condio para


a execuo do "loop", entre parnteses.

Ex.27: Comando DO WHILE


DATA ;
X=0; N=0;
DO WHILE (N LE 5) ; <== ( Validao no incio. Executa 6 vezes )
X=X+N**2 ;
N=N+1 ;
END ;
RUN;
O N, que valida a expresso, est sendo alterado no loop.
PROC PRINT;RUN;
The SAS System
Obs

55

64

14.9 - Comando DO UNTIL


- Tipo: Comando de execuo;
- Uso: Data step;
- Comando que repete um grupo de comandos at a expresso ser
verdadeira;
- A expresso validada no fim do loop. Se a expresso for falsa, os
comandos dentro do loop, sero executados, pelo menos, uma vez.
- ATENO! Este tipo de loop pode incorrer em ciclo infinito, se os
valores da expresso no se alterarem dentro do loop.

DO UNTIL <(expresso)> ;
...
END;<== ( Validao no fim )
expresso

Combinao de variveis que determina uma condio para


a execuo do "loop", entre parnteses.

Ex.28: Comando DO UNTIL


DATA ;
X=0; N=0;
DO UNTIL (N GT 5) ;
X=X+N**2 ;
N=N+1 ;
O N, que valida a expresso, est sendo alterado
END ; <== ( Validao no fim. Executa 6 vezes )
RUN;

no loop.

PROC PRINT;RUN;
The SAS System
Obs

55

65

14.10 - Comandos DROP e KEEP


- Tipo: Comandos de declarao;
- Uso: Data step e Opo de arquivos;

- O comando DROP, determina que algumas variveis, no sejam salvas


em um arquivo SAS;
- O comando KEEP, determina que somente algumas variveis, sejam
salvas em um arquivo SAS;
- Pode ser posicionado em qualquer lugar de um Data Step;
- Esses dois comandos so exclusivos, ou se usa o comando DROP, ou se
usa o comando KEEP, na lgica de um programa SAS.

DROP <varivel1> <varivel2> . . . <variveln>;


varivel

Nome de uma varivel que, no ser salva em um arquivo


SAS (Data Set).

KEEP <varivel1> <varivel2> . . . <variveln>;


varivel

Nome de uma varivel que ser salva em um arquivo SAS


(Data Set).

66

Ex.29: Comandos DROP e KEEP


data dados;
infile "c:\curso\sas\dados.dat";
input nome $ 1-30 sexo $ 31 idade 32-33 peso 34-39 .2
altura 40-43 .2 ecivil $ 54 rg $ 57-71
cpf $ 72-82 funcao $ 98-109 ;
run;
proc contents short;run;
14:33 Monday, February 2, 2015

The CONTENTS Procedure


Alphabetic List of Variables for WORK.DADOS
altura cpf ecivil funcao idade nome peso rg sexo

DATA SUBARQ1 ;
SET DADOS ;
DROP PESO ALTURA ECIVIL ;
RUN;
proc contents short;run;
14:33 Monday, February 2, 2015

The CONTENTS Procedure


Alphabetic List of Variables for WORK.SUBARQ1
cpf funcao idade nome rg sexo

DATA SUBARQ2 ;
SET DADOS ;
KEEP NOME RG CPF ;
RUN;
proc contents short;run;
14:33 Monday, February 2, 2015

The CONTENTS Procedure


Alphabetic List of Variables for WORK.SUBARQ2
cpf nome rg

67

14.11 - Opes de Arquivos: DROP= e KEEP=


- Todo arquivo com estrutura SAS, possui diversas opes de configurao, que so
especificados direita do nome de cada arquivo, entre parnteses;
- So opes do arquivo, que tem sua ao vinculada ao comando no qual o arquivo
est sendo especificado;
- Normalmente quando se faz referncia a um arquivo em um programa SAS, a ao,
ou ser de leitura dos dados, ou ser de gravao dos dados.
<arquivo SAS> [( <opo1> <opo2> . . . <opon>)] ;
Opes KEEP e DROP
<arquivo SAS> (DROP=<varivel> <varivel> . . .) ;
<arquivo SAS> (KEEP=<varivel> <varivel> . . .) ;
- Ao vinculada ao comando DATA (gravao de dados)
DROP No grava
KEEP Somente grava
- Ao vinculada ao comando SET (Leitura de dados)
DROP No leia
KEEP Somente leia

Ex.30: Opes: DROP= e KEEP=


data dados;
infile "c:\curso\sas\dados.dat";
input nome $ 1-30 sexo $ 31 idade 32-33 peso 34-39 .2
altura 40-43 .2 ecivil $ 54 rg $ 57-71
cpf $ 72-82 funcao $ 98-109 ;
run;
DATA SUBARQ1 (DROP= PESO ALTURA ECIVIL);
SET DADOS ;
RUN;
DATA SUBARQ2 ;
SET DADOS (KEEP= NOME RG CPF) ;
RUN;
68

14.12 - Comando DELETE


- Tipo: Comando de execuo;
- Uso: Data Step;
- Comando que informa ao SAS, que deve ser parado o processamento do
registro atual; no gravar os dados do registro no arquivo e retornar
imediatamente para o incio do Data Step para uma nova iterao;
- O objetivo do comando de no permitir a gravao do registro lido, no novo
arquivo SAS, mas permite trabalhar com os dados lidos;
- Normalmente esse comando utilizado junto com o comando IF/THEN/ELSE,
que determina uma condio para execuo do comando DELETE.

IF <expresso> THEN DELETE ;


Ex.31:Comando DELETE
DATA PRODUTO ;
INFILE "C:\curso\sas\PRODUTO.TXT";
INPUT DEP $ 1-2 UNIDADE 4-5 CUSTO 7-9 ;
IF UNIDADE <= 0 OR CUSTO <= 0 THEN DELETE ;
CUSTOUNI=CUSTO/UNIDADE ;
RUN;
Arquivo: PRODUTO.TXT
01

02

03

04

05

3
2

07

08

09

06

0
3

PROC PRINT NOOBS ;


RUN ;
14:33 Monday, February 2, 2015
DEP

UNIDADE

CUSTO

CUSTOUNI

17
31
51

10
5
1

525
100
5

52.5
20.0
5.0

69

14.13 - Comando OUTPUT


- Tipo: Comando de execuo;
- Uso: Data Step;
- O SAS automaticamente codifica um comando OUTPUT (implcito), no final
do Data step, para salvar os dados que foram processados.
DATA ... ;
... ;
<output>
RUN ;

- A codificao explcita de um comando OUTPUT, funciona de duas formas:


1 - Especifica ao SAS que o registro que est sendo processado deve
ser gravado no arquivo, imediatamente, e no, ao final do Data Step
(OUTPUT implcito).
2 - Especifica para qual arquivo SAS deve ser gravado o registro que
est sendo processado.
- Normalmente utilizado junto com o comando IF-THEN/ELSE de acordo
com uma condio;
ATENO! Ao se codificar um comando OUTPUT no programa, o SAS
desabilita o OUTPUT implcito ao final do DATA Step. A ao de salvar o
dado fica por conta da lgica do programa; da posio do comando OUTPUT.
OUTPUT [arquivo1 arquivon];
IF <expresso> THEN OUTPUT [arquivo1 arquivon];
expresso

Combinao de variveis e valores que determinam uma


condio a ser testada.

arquivo

Opcional, nome de um arquivo SAS, especificado e


criado pelo comando DATA.

70

Ex.32: Comando OUTPUT: Salvar Registro


LIBNAME K1 "C:\curso\sas" ;
DATA K1.VARIACAO ;
INFILE "C:\curso\sas\SAIDA.TXT";
INPUT NOME $ 1-7 NIVEL $ 8-9 VAL 10-13 SALARIO 14-18;
SAL=0;
IF NIVEL="10" THEN DO I=1 TO 2 ;
SAL=SAL+SALARIO*VAL ;
OUTPUT ;
END ;
DROP I VAL;
RUN;
Arquivo: SAIDA.TXT
01

02

03

04

05

06

07

08

09

10

11

12

15

16

17

18

13

14

PROC PRINT ; RUN ;


14:33 Monday, February 2, 2015
Obs
1
2
3
4
5
6

NOME
PAULO
PAULO
MARIA
MARIA
CLAUDIA
CLAUDIA

NIVEL
10
10
10
10
10
10

SALARIO
1000
1000
800
800
750
750

12

SAL
1100
2200
920
1840
900
1800

Ex.33: Comando OUTPUT: Direcionar e Salvar Registro


LIBNAME A "C:\curso\sas" ;
DATA A.HOMENS A.MULHERES ;
SET A.CADASTRO ;
IF SEXO="F" THEN OUTPUT A.MULHERES ;
ELSE OUTPUT A.HOMENS ;
RUN;
PROC PRINT DATA=A.MULHERES ; VAR NOME ; RUN ;
PROC PRINT DATA=A.HOMENS ; VAR NOME ; RUN ;

71

3 LABORATRIO
Utilizao dos comandos de programao em DATA Step
Em todos os programas, utilize o arquivo SAS, gerado no 1 laboratrio:

1 - Monte um programa que crie um novo arquivo SAS, somente com os dados das pessoas do sexo
feminino e casadas. Gere um relatrio com os dados desse arquivo. A varivel que representa o ESTADO
CIVIL, est codificada por nmeros, que representam:

1 = solteiro

2 = casado

3 = separado.

Comandos possveis: DATA, SET, IF/THEN/ELSE ou WHERE, PROC PRINT

2 - Monte um programa que crie um novo arquivo SAS :

- Analisando a varivel FILHOS, crie uma nova varivel, DEP e altere a varivel SALARIO :

Se possui filhos:

DEP ="COM DEPENDENTES";


SALARIO = SALARIO * 1.1;

Se no possui filhos:

DEP="NO POSSUI DEPENDENTES";

- Gere um relatrio com os dados deste arquivo.

Comandos possveis: DATA, SET, IF/THEN/ELSE, DO/END, = , PROC PRINT

OBS: Utilize o comando de atribuio (=) para criar e alterar as variveis. Utilize o comando IFTHEN/ELSE, para se distinguir se possui ou no filhos, e o comando DO/END para permitir a
execuo de mais de um comando. Preste ateno aos resultados; verifique se est tudo correto.

72

3 - Monte um programa que crie um novo arquivo SAS:

- Selecione as pessoas, empregadas, que ganham menos de R$ 3.000,00;

- Aumente o valor do salrio dessas pessoas em 10%, em at 12 vezes (relativos a 12 meses), ou,
at o salrio atingir um valor superior a R$ 5.000,00.
Para aumentar o valor do salrio, utilize a equao: SALARIO=SALARIO*1.1

- Salve os valores incrementados, um a um;

- O arquivo s dever conter as variveis: NOME, EMPRESA, FUNCAO e SALARIO ;

- Gere um relatrio com os dados deste arquivo;


Comandos possveis: DATA, SET, IF/THEN/ELSE ou WHERE, DO iterativo/END com
opo WHILE ou UNTIL, ou DO WHILE, ou DO UNTIL, =, OUTPUT, DROP ou KEEP,
PROC PRINT.

OBS: Utilize o comando IF-THEN/ELSE ou WHERE para selecionar as pessoas. Utilize o


comando DO/END Iterativo para aumentar o salrio. Utilize o comando OUTPUT para salvar os
dados e utilize o comando KEEP ou DROP para determinar quais as variveis que sero
arquivadas.

4 - Monte um programa que crie trs novos arquivos SAS, com os nomes: SA, LTDA e INSTITUTO :

- Elimine as pessoas que ocupam FUNCAO de "DIRETOR" e "GERENTE";

- Selecione os dados, de maneira que, cada arquivo s possua os dados referentes a cada TIPO DE
EMPRESA.

- Gere um relatrio para cada um dos arquivos;

Comandos possveis: DATA, SET, IF/THEN/ELSE ou WHERE, OUTPUT, PROC PRINT

OBS: Utilize o comando DATA, para criar os arquivos. Utilize o comando IF/THEN/ELSE, para
selecionar e eliminar os dados. Utilize o comando OUTPUT para direcionar a gravao dos
registros para os arquivos definidos no comando DATA.
73

5 - Monte um programa com um nico DATA Step que crie sete novos arquivos SAS, permanentes,
(PESSOAL , TRABALHO , FAMILIA, SOLTEIRO, CHEFE, SUB e DESEMPREGADOS) no
diretrio c:\curso\sas ;
- Cada arquivo dever conter os seguintes dados:
PESSOAL

Somente as variveis: NOME, SEXO, IDADE, PESO, ALTURA,


ANIVERSARIO, ESTADO CIVIL, FILHOS, RG e CPF , e todos os
registros;

TRABALHO

Somente as variveis: NOME, RG, CPF, EMPRESA, FUNCAO,


ADMISSAO, SALARIO e TIPO DE EMPRESA e pessoas que possuam
emprego ;

FAMILIA

Todas as variveis e somente as pessoas que possuam filhos;

SOLTEIRO

Todas as variveis e somente as pessoas solteiras;

CHEFE

Todas as variveis e somente as pessoas que ocupam cargo de chefia:


GERENTE ou DIRETOR;

SUB

Todas as variveis e somente as pessoas que no ocupam cargos de chefia;

DESEMPREGADOS Todas as variveis e somente as pessoas desempregadas;


- Gere relatrios para ver o contedo de cada arquivo;

Comandos possveis: DATA, SET, IF/THEN/ELSE, OUTPUT, PROC PRINT

74

15 - FUNES DO SAS
15.1 - Introduo
- Toda funo representa a execuo de uma determinada rotina que ir retornar
um determinado valor.
- Toda funo SAS recursiva. Funo pode ser executada dentro de outra
funo, como parmetro da funo;
- As funes no SAS, normalmente, fazem parte de um comando de atribuio,
durante a criao ou alterao de uma varivel no DATA Step, mas tambm
podem ser utilizadas para formar uma expresso lgica, em um comando IF ou
WHERE.

<varivel> = <funo>([OF] arg1, arg2, . . . , argn ) ;


varivel

Nome at no mximo 32 caracteres, aonde ser armazenado


o valor retornado da execuo da funo.

funo

Palavra-chave que identifica a funo a ser processada.

arg

Parmetros de entrada para processamento da funo:


varivel, expresso aritmtica, valor constante.

OF

Parmetro opcional especial para as funes estatsticas,


que indica o processamento num intervalo de argumentos.

Tipos de funes:
- Funes de Tratamento de Caractere;
- Funes de Tratamento de Data e Hora;
- Funes Matemticas;
- Funes de Estatsticas Descritivas;
- Funes Trigonomtricas e Hiperblicas;
- Funes de Truncamento;
- Funes para Gerao de Nmeros Randmicos;
- Funes de Probabilidade;
- Funes Financeiras;
- Funes de Macro;
75

15.2 - Funes de Tratamento de Caractere


15.2.1 - Funes UPCASE e LOWCASE
- Funo que converte o contedo de uma varivel ou expresso, para caracteres
maisculos (UPCASE), ou minsculos (LOWCASE).

<varivel>=UPCASE (arg) ;
<varivel>=LOWCASE (arg) ;
varivel

Nome at 32 caracteres que armazenar o resultado.

arg

Varivel ou expresso caractere, cujo contedo ser


convertido para letras maisculas ou minsculas.

15.2.2 - Funo SUBSTR


- Funo que efetua a manipulao do contedo de uma varivel do tipo
caractere.

<varivel>=SUBSTR (arg1, arg2, [arg3]) ;


varivel

Nome at 32 caracteres que armazenar o resultado.

arg1

Varivel ou expresso caractere cujo contedo ser


manipulado.

arg2

Valor que indica a posio inicial do contedo da varivel


que ser manipulado.

arg3

Opcional, determina o nmero de caracteres do contedo


da varivel que se deseja manipular. Se no for
especificado, a funo pegar todos os caracteres do valor
do segundo argumento at o final.
76

15.2.3 - Funo FIND

- Funo que retorna um valor numrico que representa a primeira posio de um


determinado caractere dentro do argumento.

<varivel>=FIND(arg1, arg2[,arg3][,arg4]) ;
varivel

Nome at 32 caracteres que armazenar o resultado.

arg1

Varivel ou expresso caractere cujo contedo ser manipulado.

arg2

Caracteres, entre aspas, que se deseja localizar no arg1.

arg3

Caractere que configura um recurso de busca:


i ou I
t ou T

arg4

Ignora se maisculas ou minsculas;


Remove brancos esquerda do arg1 e arg2.

Determina a posio inicial de busca no arg1:


1
-1

Valor padro. Incio de busca na coluna 1, para a direita;


Incio de busca na coluna 1, para esquerda.

OBS: Se os caracteres especificados no forem encontrados, a funo FIND


retornar o valor zero.

77

Ex.34:Funes Caracteres: FIND


DATA POSICAO;
REGIAO="FRANA#ALEMANHA#ESPANHA#ITLIA";
LOCAL=FIND(REGIAO,"Espanha"); OUTPUT ;
LOCAL=FIND(REGIAO,"Espanha","i"); OUTPUT ;
LOCAL=FIND(REGIAO,"nha","I"); OUTPUT ;
LOCAL=FIND(REGIAO,"nha","I",-30);OUTPUT;
LOCAL=FIND(REGIAO,"I"); OUTPUT ;
LOCAL=FIND(REGIAO,"ING"); OUTPUT ;
RUN;
PROC PRINT;
VAR LOCAL;
RUN ;

The SAS System

Obs

LOCAL

1
2
3
4
5
6

0
17
13
21
25
0

15:16 Monday, February 9, 2015

32

78

Ex.35: Funes Caracteres: UPCASE, SUBSTR, FIND


DATA RGSSP (DROP=AUX);
INFILE " C:\curso\sas\RG.TXT";
INPUT RG $ 18. ;
RG=UPCASE(RG);
AUX=FIND(RG,"SSP");
IF AUX=0 THEN DELETE;
RG_NUM=SUBSTR(RG, 1, AUX-1) ;
RG_SSP=SUBSTR(RG,AUX);
RUN;

Arquivo: RG.TXT
01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

PROC PRINT DATA=RGSSP NOOBS ;


VAR RG_NUM RG_SSP;
RUN ;

The SAS System

RG_NUM

RG_SSP

584166
234
22397488
123456

SSP/DF
SSP/SP
SSP/RS
SSP/GO

15:16 Monday, February 9, 2015

44

79

15.3 - Funes Numricas


15.3.1 - Funo INT
- Funo que retorna com o valor inteiro de uma varivel ou de uma expresso.

<varivel> = INT ( arg ) ;


varivel

Nome at 32 caracteres que armazenar o resultado.

arg

Varivel ou expresso numrica, cujo contedo se deseja


obter o valor inteiro (sem decimais e sem arredondar).

15.3.2 - Funo ROUND


- Funo que retorna um valor arredondado de uma varivel ou expresso numrica.

<varivel> = ROUND ( arg1, [arg2] ) ;


varivel

Nome at 32 caracteres que armazenar o resultado.

arg1

Varivel ou expresso numrica cujo contedo se deseja


arredondar.

arg2

Opcional, especifica o mltiplo do arredondamento e a


posio numrica aonde ser feita o arredondamento ( 1 ,
10 , . . . ou 0.1 , 0.01 , . . . ). Se no for especificado, a
funo arredondar para um valor inteiro (1).

OBS: Analisando os valores da esquerda para direita, ao se determinar qual a posio


numrica que ser arredondada, analisa-se a posio posterior ( direita), de acordo com
as regras de arredondamento no SAS:
0,00 at 4,99
5,00 at 9,99
Ex.: 542,86 540

(arredonda para baixo, mas no altera a posio numrica).


(arredonda para cima e adiciona +1 posio numrica).
542,86 543

542,86 542,9

80

Ex.36: Funes Numricas


DATA DADOS ;
INFILE "C:\cursos\sas\arredondamento.txt";
INPUT X 7.;
TRUNCA = INT ( X ) ;
INTEIRO = ROUND ( X , 1 ) ;
DEZENA = ROUND ( X , 10 ) ;
CENTENA = ROUND ( X , 100 ) ;
DECIMO = ROUND ( X , 0.1 ) ;
CENTES = ROUND ( X , 0.01 ) ;
MULT5
= ROUND ( X , 5 ) ;
RUN;

Arquivo: ARREDONDAMENTO.TXT
01

02

03

04

05

06

07

PROC PRINT DOUBLE;


RUN ;
The SAS System
Obs

TRUNCA

INTEIRO

DEZENA

15:16 Monday, February 9, 2015

CENTENA

DECIMO

CENTES

MULT5

326.54

326

327

330

300

326.5

326.54

325

1977.09

1977

1977

1980

2000

1977.1

1977.09

1975

558.88

558

559

560

600

558.9

558.88

560

1588.29

1588

1588

1590

1600

1588.3

1588.29

1590

50

81

15.4 - Funes Estatsticas Descritivas


15.4.1 - Funo SUM
- Funo que efetua um somatrio de valores, no missing, entre
variveis numricas, para cada registro de dados.

<varivel> = SUM ( [OF] var1, . . . varn ) ;


Varivel

Nome at 32 caracteres que armazenar o


resultado.

var1, . . . varn

Nome das variveis numricas que se deseja


efetuar um somatrio.

OF

Opcional; identifica um intervalo de variveis.

15.4.2 - Funo MEAN


- Funo que efetua uma mdia aritmtica entre os valores, no
missing, de variveis numricas, para cada registro de dados.

<varivel> = MEAN ( [OF] var1, . . . varn) ;


varivel

Nome at 32 caracteres que armazenar o


resultado.

var1, . . . varn

Nome das variveis numricas que se deseja


efetuar uma mdia.

OF

Opcional; identifica um intervalo de variveis.


82

Ex.37: Funes Estatsticas


LIBNAME T " C:\curso\sas" ;
DATA T.TEMP ;
INFILE " C:\curso\sas\TEMP.DAT";
INPUT (T1-T6)(4.) ;

TEMPSOMA = SUM( OF T1-T6 ) ;


TEMPMED = MEAN( OF T1-T6 ) ;
/* ALTERNATIVA */
TEMPSOMA2=T1+T2+T3+T4+T5+T6;
TMPMED2=(T1+T2+T3+T4+T5+T6)/6;
RUN;

Arquivo: TEMP.DAT
1

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

PROC PRINT DATA=T.TEMP DOUBLE NOOBS ;


RUN ;

The SAS System

15:16 Monday, February 9, 2015

T1

T2

T3

T4

T5

T6

TEMPSOMA

TEMPMED

TEMPSOMA2

TMPMED2

23.5

25.2

24.8

25.7

25.8

22.0

147

24.5000

147

24.5000

18.5

17.4

18.9

18.9

20.5

20.8

115

19.1667

115

19.1667

10.0

12.0

15.0

18.0

12.0

67

13.4000

52

83

15.5 - Funes de Tratamento de Data


15.5.1 - Funo MDY
- Funo que gera uma data SAS, a partir de valores de dia, ms e ano.
<varivel>=MDY(mm, dd, yyyy);
varivel

Nome at 32 caracteres que armazenar o resultado;

mm

Valor numrico que representa o ms;

dd

Valor numrico que representa o dia;

yyyy ou yy Valor numrico que representa o ano.

15.5.2 - Funes DAY, MONTH , YEAR


- Funes que extraem de uma data SAS, o dia, o ms e o ano
respectivamente.
<varivel>=DAY(data sas);
<varivel>=MONTH(data sas);
<varivel>=YEAR(data sas);
varivel

Nome at 32 caracteres que armazenar o resultado;

data

Valor que representa uma data SAS.

15.5.3 - Funes TODAY ou DATE


- Funes que retornam a data atual do sistema, do ambiente de
processamento. No possui argumentos.
<varivel>=TODAY();
<varivel>=DATE();
84

Ex.38: Funes de Tratamento de DATA


DATA ANIVERSARIO;
INFILE "C:\curso\sas\aniversario.txt";
INPUT DIA 1-2 MES 4-5 ANO 7-10;
ANIV=MDY(MES,DIA,ANO);
DIA_SEMANA_NASCIMENTO=WEEKDAY(ANIV);
IDADE_EM_ANOS=INT((TODAY()-ANIV)/365.25);
DIAS_ATE_2000="01jan2000"d - ANIV;
RUN;
Arquivo: ANIVERSARIO.TXT
1

10

TITLE1 "Relatrio de Idades";


PROC PRINT;RUN;

Relatrio de Idades

Obs

DIA

MES

ANO

1
2
3
4
5

10
25
14
8
3

11
4
8
1
3

1976
2000
1934
1967
1955

ANIV
6158
14725
-9271
2564
-1765

DIA_SEMANA_
NASCIMENTO
4
3
3
1
5

15:16 Monday, February 9, 2015


IDADE_
EM_ANOS
38
14
80
48
59

60

DIAS_
ATE_2000
8452
-115
23881
12046
16375

85

4 LABORATRIO
Utilizar as funes do SAS.
1 - A partir dos dados do arquivo gerado no 1 laboratrio, monte um programa que crie um novo arquivo
SAS, temporrio, somente com as pessoas que possuem emprego e com o sobrenome Mendes ou
Silva. Defina novas variveis de acordo com as especificaes abaixo:

Varivel
PNOME
SNOME
CP
DV
SALINT
BONUS

Descrio
Primeiro nome
Sobrenome
Nmero principal do CPF
Dgitos verificadores
Salrio arredondado
Bnus sobre o salrio

SALNOVO

Novo salrio

T_EMP

Tempo de empresa

APOSANOS Idade na aposentadoria

Observao
Parte da varivel NOME depois da vrgula.
Parte da varivel NOME antes da vrgula.
Os 9 primeiros dgitos da varivel CPF.
Os dois ltimos dgitos da varivel CPF.
Arredondar a varivel SALARIO para um valor inteiro.
3,5% do valor da varivel SALARIO arredondado, com
duas casas decimais.
Aumento de 7,58% sobre o valor da varivel SALARIO
arredondado, com duas casas decimais e mltiplo de 5.
O tempo do funcionrio na empresa, em anos, a partir da
varivel DATA ADMISSO.
Com quantos anos possuir quando se aposentar?
OBS: Aposentadoria dada ao se completar 45 anos de
trabalho.

Gere um relatrio para verificar os resultados;


Possveis funes: FIND, SUBSTR, INT, ROUND, YEAR, TODAY|.
2 - A partir dos dados do arquivo do 1 laboratrio, monte um programa que crie um arquivo SAS,
temporrio, somente com as pessoas que possuem emprego. Definir as novas variveis de acordo com as
especificaes abaixo:
Varivel
SALFAM

Descrio
Salrio famlia

SALCOM

Salrio comissionado

SALTOTAL
SALMEDIO

Salrio total
Salrio Mdio

Observao
Para cada filho, acrescentar 5% do salrio, ao salrio:
SALARIO*(1+(FILHOS*0.05))
Cargo de chefia (GERENTE ou DIRETOR), acrescentar
20% do salrio, ao salrio:
SALARIO*1.2
Soma do SALRIO, SALFAM e SALCOM
Mdia do SALRIO, SALFAM e SALCOM

Possveis funes: SUM e MEAN|.

86

16 - COMANDOS DE CONFIGURAO
16.1 - Comando OPTIONS
- Tipo: Comando de declarao;
- Uso: Livre;
- Comando de definio que altera e configura opes de performance, de
impresso, de visualizao do ambiente SAS, de comunicao, etc.
OPTIONS opt1 opt2 . . . optn ;
Algumas opes:
COMPRESS=NO

Opo que especifica a compactao dos dados na gerao de um arquivo


SAS, Data set ( YES ou CHAR, BINARY, NO );

OBS=MAX

Opo que especifica qual ser o ltimo registro a ser processado;

FIRSTOBS=1

Opo que especifica qual ser o primeiro registro a ser processado;

DATE/NODATE

Opo que determina a impresso ou no, da data nos relatrios;

NUMBER/NONUMBER

Opo que determina a impresso ou no, do nmero da pgina;

PAGENO=

Opo que especifica a numerao inicial das paginas de OUTPUT, para


cada execuo;

LINESIZE=

Opo que especifica o tamanho da linha de impresso do relatrio texto


(nmero de colunas). Valores de 65 at 256;

PAGESIZE=

Opo que especifica o tamanho da pagina de impresso do relatrio texto


(nmero de linhas). Valor padro de 24;

REPLACE/NOREPLACE

Opo que determina a sobreposio ou no, dos dados de um arquivo;

SORTSIZE=

Opo que especifica a quantidade de memria que o procedimento SORT


poder utilizar (em bytes). No windows: 256MBytes;

MEMSIZE=

Opo que especifica a quantidade de memria que o sistema SAS poder


utilizar para qualquer processamento. No windows: 2GBytes;

OBS: Para verificar as opes padres, execute o proc step:


PROC OPTIONS; RUN;
87

Ex.39: Comando OPTIONS 1


LIBNAME ARQ "C:\SAS" ;
OPTIONS COMPRESS=YES OBS=100 PS=66 LS=132 NODATE ;
DATA ARQ.OPT ;
SET ARQ.DADOS ;
<comando>
<comando>
. . .
. . .
. . .
;
RUN;
PROC PRINT ;
RUN ;

Ser gerado um arquivo compactado com apenas 100 registros; Ser gerado
um relatrio texto na janela OUTPUT com 66 linhas e 132 colunas por pgina, e sem a
impresso da data no cabealho.

Ex.40: Comando OPTIONS 2


LIBNAME ARQ "C:\ALUNO" ;
OPTIONS SORTSIZE=750M COMPRESS=BINARY PS=60 LS=132;
PROC SORT DATA=ARQ.CADASTRO; BY FUNCAO; RUN;
PROC PRINT DATA=ARQ.CADASTRO ; BY FUNCAO; RUN;

O procedimento SORT poder utilizar at 750Mbytes de memria para


processar; o arquivo ordenado ser compactado no modo binrio e ser gerado um
relatrio com 60 linhas e 132 colunas por pgina, na tela OUTPUT da sesso
Windows.

88

16.2 - Comando LABEL


- Tipo: Comando de declarao;
- Uso: Data Step e Proc Step;
- Comando de definio, utilizado para atribuir rtulos descritivos as
variveis;
- Utilizado para melhorar a aparncia de um relatrio. Os rtulos podem
ter no mximo 256 caracteres;

DATA Step

O LABEL permanente, ser armazenado na


estrutura do arquivo;

PROC Step

O LABEL temporrio, existir apenas para a


execuo do procedimento.

LABEL

<varivel> = "rtulo" . . .
<varivel> = "rtulo" . . .
<varivel> = "rtulo" . . . ;

varivel

Nome da varivel na qual ser associado um rtulo


descritivo.

rtulo

Descrio, at 256 caracteres, que ser associada a


varivel.

89

16.3 - Comando FORMAT


- Tipo: Comando de declarao;
- Uso: Data Step e Proc Step;
- Comando de definio que serve para formatar as variveis e melhorar a
aparncia dos dados num relatrio;

DATA Step

O FORMAT permanente, ser armazenado


na estrutura do arquivo;

PROC Step

O FORMAT temporrio, existir apenas


para a execuo do procedimento.

FORMAT <varivel> <formatow.d> . . .


<varivel> <formatow.d> . . .
<varivel> <formatow.d> . . . ;

varivel

Nome da varivel que ser formatada.

formatow.d Nome especial do formato com o tamanho do campo (w) e,


em casos de formatao numrica, o nmero de casas
decimais (d). Os formatos podem ser criados pelo prprio
usurio ou da biblioteca de formatos do SAS:
COMMAXw.d

Formata com pontos e vrgula;

DDMMYYw.

Formata um campo data com /;

90

Ex.41: Comando LABEL


DATA ROTULO ;
INFILE "C:\curso\sas\ROTULO.DAT";
INPUT NOME $6. @8 ALT 4.1 @13 PES 4.1 ;
LABEL ALT = "ALTURA EM POLEGADAS"
PES = "PESO EM LIBRAS" ;
RUN;
OPTIONS LS=65 NODATE NONUMBER;
TITLE;
PROC PRINT NOOBS SPLIT=" " ;
RUN ;

NOME

ALTURA
EM
POLEGADAS

PESO
EM
LIBRAS

PAULO
MARCIO
SONIA

59.0
57.3
51.3

99.5
83.0
50.5

Ex.42: Comando FORMAT


LIBNAME ARQ "C:\curso\sas";
OPTIONS OBS=10 LS=100 NODATE NONUMBER;
TITLE;
PROC PRINT DATA=ARQ.CADASTRO SPLIT="*" ;
VAR NOME ANIVERSARIO SALARIO;
LABEL NOME="Sobrenome,Nome"
ANIVERSARIO="Data de*Aniversrio"
SALARIO="Salrio*Bruto";
FORMAT ANIVERSARIO DDMMYY10.
SALARIO COMMAX12.2 ;
RUN;

Obs

Sobrenome,Nome

Data de
Aniversrio

1
2
3
4
5
6
7
8
9
10

MARKO,PAULO
MOUA,MARCO
SANTOS,PAULO
GUEDES,PAULO
SONTAS,MARCO
HORTA,PAULO
CERTO,CARLA
PISCO,ROSANE
MALA,ELIANE
APARECIDO,CARLA

18/10/1980
03/07/1969
01/11/1986
11/01/1977
18/07/1979
02/08/1976
12/11/1979
23/02/1977
02/02/1979
15/05/1985

Salrio
Bruto
.
9.988,53
.
3.828,77
5.098,46
3.101,32
3.972,30
3.045,33
.
1.557,69

91

16.4 - Comando ODS


- Tipo: Comando de declarao;
- Uso: Livre;
- Output Delivery System (ODS), um recurso especial para a
manipulao dos resultados gerados pelos procedimentos SAS,
permitindo a escolha de padres de impresso e visualizao, gerao de
arquivos e gerao de documentos.

ODS <padro> [opes] ;


...
ODS <padro> CLOSE ;
Padres mais utilizados:
HTML
PDF
PS
RTF

Gera os resultados no padro html;


Gera os resultados no padro Adobe;
Gera os resultados no padro PostScript;
Gera os resultados no padro Rich Text;

file=

Determina a localizao e o nome do arquivo gerado com o


padro.

style=

Somente para o padro HTML: default, statdoc, minimal,


education, festival, journal, ocean, normal, sasweb,
science, seaside, theme, . . ., etc

opes:

OBS: Todo relatrio criado dentro de uma estrutura ODS (ODS


<padro>/ODS CLOSE), sair no padro especificado. Cada padro de
visualizao possui suas prprias opes;
92

Ex.43: Comando ODS


LIBNAME ARQ "C:\curso\sas";
ODS HTML FILE="C:\temp\teste.html" STYLE=statdoc;
OPTIONS OBS=10;
PROC PRINT DATA=ARQ.CADASTRO SPLIT="*" ;
VAR NOME ANIVERSARIO SALARIO;
LABEL NOME="Sobrenome,Nome"
ANIVERSARIO="Data de*Aniversrio"
SALARIO="Salrio*Bruto";
FORMAT ANIVERSARIO DDMMYY10.
SALARIO COMMAX12.2 ;
RUN;
ODS HTML CLOSE;

Analise Contbil

Obs

Sobrenome,Nome

Data de
Aniversrio

Salrio
Bruto

MARKO,PAULO

18/10/1980

MOUA,MARCO

03/07/1969

9.988,53

SANTOS,PAULO

01/11/1986

GUEDES,PAULO

11/01/1977

3.828,77

SONTAS,MARCO

18/07/1979

5.098,46

HORTA,PAULO

02/08/1976

3.101,32

CERTO,CARLA

12/11/1979

3.972,30

PISCO,ROSANE

23/02/1977

3.045,33

MALA,ELIANE

02/02/1979

APARECIDO,CARLA

15/05/1985

1.557,69

10

93

5 LABORATRIO
Configurar a aparncia de relatrios
1 - Acrescente ao programa criado no 1 exerccio do laboratrio anterior, rtulos descritivos para todas as
variveis relacionadas abaixo, e formatos adequados para os valores numricos. Defina essas caractersticas
de maneira permanente. Gere um relatrio, sem ttulos, rodaps, datas e numerao de pgina, no formato
HTML.
Rtulos:
pnome
snome
salint
bonus
salnovo
t_emp
apos
aposanos
dv
cpf
salario
aniversario
admissao

Primeiro Nome
Sobrenome
Valor do Salrio (INTEIRO)
Bonus (3,5% do Salrio)
Novo Salrio (Aumento de 7,58%)
Tempo do Funcionrio na Empresa (Em anos)
Qual o ano da aposentadoria?
Quantos anos ter na aposentadoria?
Dgito Verificador do CPF
CPF
Salrio Original
Data de Aniversrio
Data de Admisso

Formatos:
aniversario, admissao
salario, salint, bonus, salnovo

Formato de datas no padro dd/mm/yyy


Formato numrico com a vrgula separando as decimais

2 - Acrescente ao programa criado no 2 exerccio do laboratrio anterior, rtulos descritivos para todas as
variveis relacionadas abaixo, e formatos adequados para os valores numricos. Defina essas caractersticas
de maneira temporria, apenas para o relatrio do exerccio. Gere um relatrio, sem ttulos, rodaps e
datas, no formato PDF, somente com as pessoas que possuam emprego.
Rtulos:
saltotal
salmedio
nome
salfam
salcom
filhos
salario
funo

Salrio Total
Salrio Mdio
Nome
Salrio Famlia
Salrio com Comisso
Nmero de Filhos
Salrio
Funo

OBS: Quebre os rtulos na posio que achar melhor, para o relatrio no ficar muito extenso na largura.
Formatos:
salario, salfam, salcom, saltotal, salmedio

Formato numrico com a vrgula separando as


decimais.
94

17 - PROCEDIMENTOS ESTATSTICOS BSICOS


17.1 - Procedimento MEANS
Procedimento que produz relatrios com estatsticas descritivas simples,
somente para variveis numricas. O relatrio gerado possui uma formatao
padro que, a princpio, possui apenas algumas estatsticas: Frequncia (N),
Mdia (MEAN), Desvio Padro (STD), valor mximo (MAX) e o valor mnimo
(MIN).

PROC MEANS [opes] [estatsticas];


CLASS <lista de variveis> ;
VAR <lista de variveis> ;
BY <lista de variveis> ;
RUN;
opes:

DATA=
MAXDEC=

estatsticas:

mean sum max min median n mode std etc

Nome do arquivo SAS para ser processado;


Especifica o nmero de casas decimais (mximo 8);

CLASS

Especifica uma ou mais variveis que possibilitam o agrupamento


de dados. OBS: No necessrio executar um PROC SORT,
antes;

VAR

Especifica as variveis numricas que sero analisadas pelo


procedimento;

BY

Especifica uma ou mais variveis que possibilitam o agrupamento


de dados. OBS: necessrio executar um PROC SORT, antes;

95

Ex.44: Procedimento MEANS (Padro)


LIBNAME ARQ "C:\CURSO\SAS" ;
PROC MEANS DATA=ARQ.CADASTRO ;
RUN ;
The SAS System

08:55 Tuesday, February 24, 2015

The MEANS Procedure


Variable
N
Mean
Std Dev
Minimum
Maximum

idade
550
26.3618182
7.4751560
20.0000000
78.0000000
peso
550
79.3567273
12.6820018
41.9000000
111.5000000
altura
550
1.8381273
0.1027400
1.6000000
2.0600000
aniversario
550
7357.50
2737.25
-11481.00
9846.00
filhos
550
2.5200000
1.4531418
0
5.0000000
admissao
434
15682.62
1112.21
2345.00
16068.00
salario
434
3332.21
2693.34
1500.73
25377.28

Ex.45: Procedimento MEANS (Com Opes)


LIBNAME ARQ "C:\CURSO\SAS" ;
OPTIONS NODATE NONUMBER;
PROC MEANS DATA=ARQ.CADASTRO MAXDEC=2 MIN MAX MEAN MEDIAN SUM N ;
VAR IDADE PESO ALTURA SALARIO ;
RUN ;
The SAS System
The MEANS Procedure
Variable
Minimum
Maximum
Mean
Median
Sum
N

idade
20.00
78.00
26.36
25.00
14499.00
550
peso
41.90
111.50
79.36
78.50
43646.20
550
altura
1.60
2.06
1.84
1.84
1010.97
550
salario
1500.73
25377.28
3332.21
3080.41
1446180.53
434

96

Ex.46: Procedimento MEANS (Comando CLASS)


LIBNAME ARQ "C:\CURSO\SAS" ;
OPTIONS NODATE NONUMBER ;
PROC MEANS DATA=ARQ.CADASTRO MAXDEC=2 SUM MEAN ;
CLASS EMPRESA SEXO ;
VAR SALARIO ;
RUN ;

The SAS System


The MEANS Procedure
Analysis Variable : salario
N
empresa
sexo
Obs
Sum
Mean

ATLAS S.A.
F
58
179480.78
3094.50

MALTA LTDA

PARIS INSTITUTO

39

117757.21

3019.42

101

377653.28

3739.14

73

293684.98

4023.08

112

337886.16

3016.84

M
51
139718.12
2739.57

97

Ex.47: Procedimento MEANS (Comando BY)


LIBNAME ARQ "C:\CURSO\SAS" ;
OPTIONS NODATE NONUMBER LS=100 PS=200;
PROC SORT DATA= ARQ.CADASTRO ; BY EMPRESA SEXO ;
PROC MEANS DATA=ARQ.CADASTRO MAXDEC=2 SUM MEAN ;
WHERE SALARIO IS NOT MISSING ;
BY EMPRESA SEXO ;
VAR SALARIO ;
RUN ;
The SAS System
------------------------------------ empresa=ATLAS S.A. sexo=F ------------------------------------The MEANS Procedure
Analysis Variable : salario
Sum
Mean

179480.78
3094.50

------------------------------------ empresa=ATLAS S.A. sexo=M ------------------------------------Analysis Variable : salario


Sum
Mean

117757.21
3019.42

------------------------------------ empresa=MALTA LTDA sexo=F ------------------------------------Analysis Variable : salario


Sum
Mean

377653.28
3739.14

------------------------------------ empresa=MALTA LTDA sexo=M ------------------------------------Analysis Variable : salario


Sum
Mean

293684.98
4023.08

---------------------------------- empresa=PARIS INSTITUTO sexo=F ---------------------------------Analysis Variable : salario


Sum
Mean

337886.16
3016.84

---------------------------------- empresa=PARIS INSTITUTO sexo=M ---------------------------------Analysis Variable : salario


Sum
Mean

139718.12
2739.57

98

17.2 - Procedimento FREQ


Procedimento que produz tabelas simples e tabelas cruzadas, da
frequncia de uma ou vrias variveis numricas e caracteres.

PROC FREQ [opes1] ;


BY <lista de variveis> ;
TABLES <variveis> / [opes2] ;

opes1:

DATA=
NLEVELS

BY

Especifica uma ou mais variveis que possibilitam o agrupamento de


dados. OBS: necessrio executar um PROC SORT, antes;

Nome de um arquivo SAS;


Indica o nmero de valores distintos das variveis que esto sendo
analisadas;

TABLES Especifica as variveis e a regra de formao da tabela de frequncia.


Utiliza-se o caractere * para cruzar as variveis.
Ex.: (tables a*b y*x peso*altura sexo*peso*altura).
opes2:

LIST

Os resultados sairo num formato listado, ao


invs de uma tabela cruzada;

MISSING

Inclui os valores "missing" na tabela;

NOCUM

No gera as colunas de frequncia e percentual


acumulativo;

NOPERCENT

No gera as colunas com percentuais.

NOFREQ

No gera a coluna de frequncia.

99

Ex.48: Procedimento FREQ (Sem Cruzamento)


LIBNAME ARQ "C:\CURSO\SAS" ;
PROC FREQ DATA=ARQ.CADASTRO NLEVELS COMPRESS;
TABLES SEXO IDADE ;
RUN ;
The SAS System
The FREQ Procedure
Number of Variable Levels
Variable
Levels

sexo
2
idade
31

Cumulative
Cumulative
sexo
Frequency
Percent
Frequency
Percent

F
350
63.64
350
63.64
M
200
36.36
550
100.00

Cumulative
Cumulative
idade
Frequency
Percent
Frequency
Percent

20
39
7.09
39
7.09
21
53
9.64
92
16.73
22
41
7.45
133
24.18
23
49
8.91
182
33.09
24
47
8.55
229
41.64
25
51
9.27
280
50.91
26
45
8.18
325
59.09
27
62
11.27
387
70.36
28
53
9.64
440
80.00
29
44
8.00
484
88.00
30
44
8.00
528
96.00
35
1
0.18
529
96.18
36
1
0.18
530
96.36
37
1
0.18
531
96.55
38
1
0.18
532
96.73
41
1
0.18
533
96.91
45
2
0.36
535
97.27
49
1
0.18
536
97.45
50
1
0.18
537
97.64
54
1
0.18
538
97.82
57
1
0.18
539
98.00
58
1
0.18
540
98.18
61
1
0.18
541
98.36
67
2
0.36
543
98.73
68
1
0.18
544
98.91
69
1
0.18
545
99.09
71
1
0.18
546
99.27
73
1
0.18
547
99.45
74
1
0.18
548
99.64
77
1
0.18
549
99.82
78
1
0.18
550
100.00

100

Ex.49: Procedimento FREQ (Com Cruzamento)


LIBNAME ARQ "C:\CURSO\SAS" ;
PROC FREQ DATA=ARQ.CADASTRO ;
TABLES SEXO*EMPRESA ;
RUN ;
The SAS System
The FREQ Procedure
Table of sexo by empresa
sexo

empresa

Frequency
Percent
Row Pct
Col Pct ATLAS S.MALTA LTPARIS IN Total
A.
DA
STITUTO

58
101
112
271
13.36 23.27 25.81 62.44
21.40 37.27 41.33
59.79 58.05 68.71

39
73
51
163

8.99 16.82 11.75 37.56


23.93 44.79 31.29
40.21 41.95 31.29

Total
97
174
163
434
22.35
40.09
37.56
100.00
Frequency Missing = 116

101

Ex.50: Procedimento FREQ (Cruzamento Listado)


LIBNAME ARQ "C:\CURSO\SAS";
PROC FREQ DATA=ARQ.CADASTRO ;
TABLES SEXO*EMPRESA / LIST;
RUN ;
The SAS System
The FREQ Procedure
Cumulative
Cumulative
sexo
empresa
Frequency
Percent
Frequency
Percent

F
ATLAS S.A.
58
13.36
58
13.36
F
MALTA LTDA
101
23.27
159
36.64
F
PARIS INSTITUTO
112
25.81
271
62.44
M
ATLAS S.A.
39
8.99
310
71.43
M
MALTA LTDA
73
16.82
383
88.25
M
PARIS INSTITUTO
51
11.75
434
100.00
Frequency Missing = 116

Ex.51: Procedimento FREQ (Opes do comando TABLE)


LIBNAME ARQ "C:\CURSO\SAS" ;
OPTIONS NODATE NUMBER PAGENO=1;
PROC FREQ DATA=ARQ.CADASTRO ;
TABLE SEXO*EMPRESA / MISSING NOCUM NOPERCENT FORMAT=commax6.2;
RUN;
The SAS System

The FREQ Procedure


Table of sexo by empresa
sexo

empresa

Frequency
Row Pct
Col Pct
ATLAS S.MALTA LTPARIS IN Total

A.
DA
STITUTO

F
79,00 58,00 101,00 112,00 350,00
22.57 16.57 28.86 32.00
68.10 59.79 58.05 68.71

M
37,00 39,00 73,00 51,00 200,00
18.50 19.50 36.50 25.50
31.90 40.21 41.95 31.29

Total
116,00
97,00
174,00
163,00
550,00

102

17.3 - Procedimento TABULATE


O procedimento TABULATE monta relatrios com estatsticas descritivas num
formato tabular.

PROC TABULATE [opes1] ;


CLASS <variveis> ;
VAR <variveis> ;
BY <variveis> ;
TABLE <pgina , linha , coluna> / [opes2] ;
opes1

DATA=
FORMAT=

CLASS

Especifica uma ou mais variveis, numricas ou caracteres, que possibilitam o


agrupamento de dados, e que sero utilizadas como variveis classificatrias no
comando TABLE. OBS: No necessrio executar um PROC SORT, antes;

VAR

Especifica somente variveis numricas que iro participar de uma anlise


estatstica, e que sero utilizadas no comando TABLE;

BY

Especifica uma ou mais variveis que possibilitam o agrupamento de dados,


com quebra da tabela. OBS: necessrio executar um PROC SORT, antes;

TABLE

Especifica a regra de formao da tabela:


pgina
linha
coluna

opes2

OBS:

Nome do arquivo SAS;


Formata todos os valores de todas as clulas da tabela;

Especifica uma varivel ou expresso que ir definir a regra de


formao das pginas;
Especifica uma varivel ou expresso que ir definir a regra de
formao das linhas da tabela;
Especifica uma varivel ou expresso que ir definir a regra de
formao das colunas da tabela;
CONDENSE Especifica que seja gerado o mximo de tabelas
possveis em cada pgina de relatrio;
BOX=
Especifica o texto que aparecer na caixa vazia da
tabela;

Regras de formao:

elemento*elemento cruzamento
elemento elemento concatenao
(elemento elemento) agrupamento

Elementos: variveis, funes estatsticas (mean, sum, max, min, median, n,


mode, std, pctn, pctsum, etc), ALL (totalizador).
Todos os elementos de uma dimenso cruzam com os elementos de outra dimenso.
103

ATLAS S.A.

MALTA LTDA
PARIS INSTITUTO

Dimenso COLUNA

Dimenso LINHA

PARIS INSTITUTO

Mdia de

N
%
Salrio

Sexo
Funo

F
GERENTE

1 0,18
19.303,66

PROGRAMADOR

111 20,18
2.870,11

M
ANALISTA

1 0,18
9.548,36

PROGRAMADOR

50 9,09
2.603,40

Total

163 29,64
2.930,09

104

Ex.52: Procedimento Tabulate (Concatenao de Elementos)


PROC TABULATE DATA=ARQ.CADASTRO ;
CLASS SEXO ; Varivel de agrupamento.
VAR IDADE PESO; Variveis de anlise (para clculo).
TABLE SEXO , (IDADE PESO) * MEAN / BOX="TABELA 1";
RUN ;
Estatstica que ser utilizada para anlise
dos dados,
anlise.

Cruzamento entre elementos


das dimenses.

cruzando

com

as

variveis

de

Concatenao dos resultados da anlise estatstica


das variveis de anlise.

The SAS System

TABELA 1

idade

peso

Mean

Mean

sexo

26.33
76.48

26.42
84.40

Ex.53: Procedimento Tabulate (Cruzamento de Elementos)


PROC TABULATE DATA=ARQ.CADASTRO FORMAT=COMMAX8.2;
CLASS SEXO EMPRESA ;
VAR PESO;
TABLE SEXO, EMPRESA*PESO*MEAN;
RUN ;
The SAS System

empresa

PARIS

ATLAS MALTA INSTITU-

S.A. LTDA
TO

peso peso peso

Mean Mean Mean

sexo

77,67
77,44
75,42

83,87
84,24
83,77

105

Ex.54: Procedimento Tabulate (Trs Dimenses 1)


PROC TABULATE DATA=ARQ.CADASTRO ;
CLASS SEXO EMPRESA ;
VAR ALTURA;
TABLE SEXO
/* Dimenso Pgina */
,
EMPRESA ALL
/* Dimenso Linha */
,
ALTURA * MEAN /* Dimenso Coluna */
/ CONDENSE BOX=_PAGE_;
RUN ;
The SAS System

sexo F

altura

Mean

empresa

ATLAS S.A.

1.83

MALTA LTDA

1.81

PARIS INSTITUTO

1.78

All

1.80

sexo M

altura

Mean

empresa

ATLAS S.A.

1.89

MALTA LTDA

1.91

PARIS INSTITUTO

1.90

All

1.90

106

Ex.55: Procedimento Tabulate (Rotulao de Elementos: = )


PROC TABULATE DATA=ARQ.CADASTRO ;
CLASS filhos e_civil sexo;
TABLE sexo*e_civil*filhos all="Total", n pctn;
RUN ;
Permite inserir um label (rtulo) para o
elemento.
The SAS System

PctN

sexo
e_civilfilhos

F
1
1

31.00
5.64

72.00
13.09

75.00
13.64

38.00
6.91

2
1

38.00
6.91

28.00
5.09

41.00
7.45

3
0

27.00
4.91

M
1
1

22.00
4.00

40.00
7.27

48.00
8.73

11.00
2.00

2
1

24.00
4.36

25.00
4.55

13.00
2.36

3
0

17.00
3.09

Total

550.00
100.00

107

Ex.56: Procedimento Tabulate (Formatao de Elementos: *f=)


TITLE1 "Relatrio com a Mdia de Salrio";
TITLE2 "e a Distribuio Percentual dos Funcionrios por Empresa";
OPTIONS LS=130;
PROC TABULATE DATA=ARQ.CADASTRO MISSING;
CLASS SEXO EMPRESA;
VAR SALARIO ;
TABLE SEXO="Sexo"*EMPRESA="Empresa"
ALL="Total"

,
=
100

N
PCTN="%"
SALARIO=""*(MEAN="Mdia de Salrio" MAX="Salrio Mximo")*f=commax12.2;
RUN ;
Permite formatar os dados de linhas e
colunas, especificamente, para um ou
mais elementos.
Relatrio com a Mdia de Salrio
e a Distribuio Percentual dos Funcionrios por Empresa

Mdia de Salrio

%
Salrio

Mximo

Sexo
Empresa

79.00
14.36
.
.

ATLAS S.A.
58.00
10.55
3.094,50
17.260,69

MALTA LTDA
101.00
18.36
3.739,14
20.336,22

PARIS

INSTITUTO
112.00
20.36
3.016,84
19.303,66

37.00
6.73
.
.

ATLAS S.A.
39.00
7.09
3.019,42
17.414,14

MALTA LTDA
73.00
13.27
4.023,08
25.377,28

PARIS

INSTITUTO
51.00
9.27
2.739,57
9.548,36

Total

550.00
100.00
3.332,21
25.377,28

numerador

Total Geral

denominador

PERGUNTA:

1 - Que tal gerar uma tabela com um subtotal por sexo...???


2 - E um percentual em relao ao subtotal por sexo...???

RESPOSTA:

1 - Ser necessrio acrescentar, regra do comando TABLE, mais um elemento ALL. Aonde???
2 - Ser necessrio alterar o denominador da estatstica PCTN. Como???
108

Ex.57: Procedimento Tabulate (Elementos ALL e PCTN)


ods html file="c:\curso\sas\teste.html" style=minimal;
TITLE1 "Relatrio com a Mdia de Salrio";
TITLE2 "e a Distribuio Percentual dos Funcionrios por Empresa";
A

Utilizao

correta

dos

PROC TABULATE DATA=ARQ.CADASTRO MISSING;


parntesis permite o cruzamento
CLASS SEXO EMPRESA;
com grupos de elementos e criar
o subtotal.
VAR SALARIO ;
TABLE SEXO="Sexo"*(EMPRESA="Empresa" ALL="Subtotal") ALL="Total"
,
N*f=6.
O denominador alterado quando se
especifica elementos da tabela, colocados
PCTN="%"*f=commax6.2
PCTN < EMPRESA ALL > ="% Sexo"*f=commax6.2

entre < e > na estatstica PCTN. Neste


caso so, exatamente, os mesmos elementos
que criaram o subtotal.
que criam o subtotal,

SALARIO=""*(MEAN="Mdia de Salrio" MAX="Salrio Mximo")*f=commax12.2;


RUN ;
ods html close;

Relatrio com a Mdia de Salrio


e a Distribuio Percentual dos Funcionrios por Empresa

Sexo

% Sexo

Mdia de Salrio

Salrio Mximo

Empresa

79

14,36

22,57

ATLAS S.A.

58

10,55

16,57

3.094,50

17.260,69

MALTA LTDA

101

18,36

28,86

3.739,14

20.336,22

PARIS INSTITUTO

112

20,36

32,00

3.016,84

19.303,66

Subtotal

350

63,64

100,00

3.302,66

20.336,22

Empresa

37

6,73

18,50

ATLAS S.A.

39

7,09

19,50

3.019,42

17.414,14

MALTA LTDA

73

13,27

36,50

4.023,08

25.377,28

PARIS INSTITUTO

51

9,27

25,50

2.739,57

9.548,36

200

36,36

100,00

3.381,35

25.377,28

550

100,00

100,00

3.332,21

25.377,28

Subtotal
Total

109

Ex.58: Procedimento Tabulate (Trs Dimenses 2)


OPTIONS NONUMBER LS=110;
PROC TABULATE DATA=ARQ.CADASTRO MISSING;
CLASS SEXO EMPRESA FUNCAO;
VAR SALARIO ;
TABLE EMPRESA="" , SEXO="Sexo"*FUNCAO="Funo" ALL="Total" ,
N*f=6. PCTN="%"*f=commax6.2 SALARIO="Salrio"*MEAN="Mdia de Salrio"*f=commax12.2
/ CONDENSE;
RUN ;
The SAS System

Salrio

Mdia de

N
%
Salrio

Sexo
Funo

F
DESEMPREGADO
79 14,36
.

M
DESEMPREGADO
37 6,73
.

Total

116 21,09
.

ATLAS S.A.

Salrio

Mdia de

N
%
Salrio

Sexo
Funo

F
ANALISTA

4 0,73
6.272,29

GERENTE

1 0,18
17.260,69

PROGRAMADOR
53 9,64
2.587,38

M
GERENTE

2 0,36
14.121,42

PROGRAMADOR
37 6,73
2.419,31

Total

97 17,64
3.064,31

MALTA LTDA

Salrio

Mdia de

N
%
Salrio

Sexo
Funo

F
ANALISTA

3 0,55
13.694,79

GERENTE

2 0,36
16.706,07

PROGRAMADOR
96 17,45
3.157,88

M
ANALISTA

1 0,18
9.988,53

DIRETOR

1 0,18
25.377,28

GERENTE

2 0,36
20.534,46

PROGRAMADOR
69 12,55
3.148,55

Total

174 31,64
3.858,27

PARIS INSTITUTO

Salrio

Mdia de

N
%
Salrio

Sexo
Funo

F
GERENTE

1 0,18
19.303,66

PROGRAMADOR
111 20,18
2.870,11

M
ANALISTA

1 0,18
9.548,36

PROGRAMADOR
50 9,09
2.603,40

Total

163 29,64
2.930,09

110

18 - FORMATAO ESPECIAL
18.1 - Procedimento FORMAT
O procedimento FORMAT permite que o usurio crie os seus prprios formatos de leitura e
impresso, para variveis numricas e caracteres.
PROC FORMAT ;
VALUE <nome> [( opes )]
<intervalo> = "<descrio>" ;
VALUE

Comando que define um formato diferente para os valores de uma


varivel numrica ou caractere.

nome

-Nome do formato com at 32 caracteres;


-Nomes de formatos que sero aplicados em variveis
caracteres, obrigatoriamente, devero iniciar com $;
-Nomes de formato no podem terminar com nmeros.

intervalo -Especifica um valor, ou intervalos de valores, que uma varivel


poder assumir durante a formatao.
-Valores ou intervalos de valores de variveis caracteres devero
vir entre aspas.
-Parmetros especiais so utilizados para definir limites de
intervalos:
LOW
HIGH
OTHER
<

Menor valor encontrado;


Maior valor encontrado;
Qualquer outro valor no identificado;
No inclui o valor do intervalo.

descrio -Valor, no qual a varivel formatada, assumir no momento de


sua utilizao;
- No mximo 32.767 caracteres, entre aspas;

111

Ex.59: Procedimento FORMAT


OPTIONS PS=30 NODATE NONUMBER;
PROC FORMAT ;
VALUE $EC

VALUE ALT

"1"="SOLTEIRO"
"2"="CASADO"
"3"="SEPARADO"
OTHER="???"
;
LOW-<1.50="At 1,50"
1.50-<1.70="De 1,50 at 1,70"
1.70-HIGH="Mais de 1,70"
;

RUN;
PROC FREQ DATA=ARQ.CADASTRO
FORMAT E_CIVIL $EC.
ALTURA ALT. ;
TABLE E_CIVIL ALTURA;
RUN ;

The SAS System


The FREQ Procedure
Cumulative
Cumulative
e_civil
Frequency
Percent
Frequency
Percent

SOLTEIRO
337
61.27
337
61.27
CASADO
169
30.73
506
92.00
SEPARADO
44
8.00
550
100.00

Cumulative
Cumulative
altura
Frequency
Percent
Frequency
Percent

At 1,50
6
1.09
6
1.09
De 1,50 at 1,70
38
6.91
44
8.00
Mais de 1,70
506
92.00
550
100.00

112

6 LABORATRIO
Utilizao dos procedimentos estatsticos bsicos.
Utilizando o arquivo SAS gerado no 1 LABORATRIO:
1 - Gere um relatrio com a mdia, o valor mximo, o valor mnimo e o desvio padro das variveis
PESO e ALTURA, classificados por SEXO e com apresentao dos resultados com duas casas decimais.
2 - Gere um relatrio apenas coma a mdia e somatrio de todas as variveis numricas ordenados por
EMPRESA.
3 - Gere um relatrio com as tabelas de frequncia de SEXO, IDADE, ESTADO CIVIL, FILHOS,
EMPRESA e FUNCAO.
4 - Gere um relatrio com uma tabela de frequncia de SEXO versus IDADE.
5 - Gere um relatrio com duas tabelas de frequncia de ESTADO CIVIL versus FILHOS e SEXO
versus EMPRESA na mesma PROC.
6 - Utilizando o procedimento TABULATE, crie uma tabela que apresente a mdia das variveis IDADE e
PESO, classificadas pela varivel SEXO.
- A varivel SEXO, dever formar as linhas;
- As variveis IDADE e PESO, devero formar as colunas;
- Dever ser utilizada a opo MEAN para formar as colunas;
7 - Utilizando o procedimento TABULATE, crie uma tabela que apresente a mdia e o somatrio da
varivel SALARIO, classificados por SEXO e EMPRESA.
- A expresso SEXO versus EMPRESA dever formar as linhas;
- A varivel SALARIO dever formar as colunas;
- Devero ser utilizadas as opes MEAN e SUM para formar as colunas
- Tamanho da pgina de 55 linhas por 80 colunas;
8 - Acrescente a tabela do relatrio anterior:
- Um totalizador na linha, para criar um total geral. Adicionar o elemento ALL;
- Um subtotal por EMPRESA. Adicionar mais um elemento ALL;
- Rotule todos os elementos: variveis, estatsticas e totalizadores;
- Formate os resultados numricos com pontos, vrgula e duas decimais;
- Ttulo: Apresentao do Salrio por Sexo e Empresa;
- Sem a data, e a paginao iniciando do 1;
- Gere a tabela no padro HTML e PDF.

113

9 - Criar um programa que gere formatos especiais para os valores das variveis: IDADE e SALARIO .
Criar rtulos para varivel IDADE:
15-25 = "At a 25 anos"
26-50 = "26 a 50 anos"
51-HIGH = "Mais de 50 anos"
Criar faixas para varivel SALARIO:
do menor at 2000, no incluso = "Iniciante"
de 2000 at 4000, no incluso = "Junior"
de 4000 at 7000, no incluso = "Senior"
de7000 at 10000, no incluso = "Gerente"
acima de 10000, no incluso = "Diretor"
missing=Desempregado;
10 Utilizando o procedimento TABULATE, crie uma tabela que mostre a classificao das pessoas com
relao a EMPRESA, IDADE e SALARIO. Utilize o formato especial definido no item anterior, para
IDADE e SALARIO.

- As variveis, EMPRESA versus SALARIO, devero formar as linhas;


- A varivel IDADE, dever formar as colunas;
- Dever ser utilizada a opo N nas colunas para contar o nmero de pessoas;
- Adicione um totalizador na dimenso coluna;

114

19 - COMBINAO DE ARQUIVOS SAS


19.1 - Concatenao de Arquivos
Concatenao a unio sem critrios, de dois ou mais arquivos SAS, um
aps o outro, originando um nico arquivo. Utiliza-se o comando SET.
SET <arquivo1> <arquivo2> . . . <arquivon> ;

ARQ1

ARQ2

DATA ARQ3;
SET ARQ1 ARQ2;
RUN;

ARQ3

ARQ1

ARQ2

115

Ex.60: Concatenao de Arquivos


LIBNAME IN "C:\CURSO\SAS" ;
DATA IN.ARQ1 ;
INFILE "C:\CURSO\SAS\ARQ1.TXT" ;
INPUT NOME $ 1-6 @8 CPF $11. ;
RUN ;

ARQ1.TXT
01

02

03

04

05

06

M
S
P
C

A
A
A
E

R
N
U
L

C
D
L
S

I
R
A
O

O
A

07

08

09

10

11

12

13

14

15

16

17

18

8
2
4
8

1
3
5
5

8
2
6
8

1
3
3
5

8
2
2
4

1
3
1
3

8
2
7
4

1
3
8
3

8
2
9
2

1
3
5
1

0
0
5
1

DATA IN.ARQ2 ;
INFILE "C:\CURSO\SAS\ARQ2.TXT";
INPUT CPF $ 1-11 SALARIO COMMAX8.2 ;
RUN ;
ARQ2.TXT
01

02

03

04

05

06

07

08

09

10

11

8
2
4
8

1
3
5
5

8
2
6
8

1
3
3
5

8
2
2
4

1
3
1
3

8
2
7
4

1
3
8
3

8
2
9
2

1
3
5
1

0
0
5
1

12

13

1
1

14

15

16

17

18

19

20

8
0
6
1

7
5
4
6

6
6
3
7

5
7
2
8

,
,
,
,

5
4
1
8

5
0
0
9

DATA IN.CONCAT ;
SET IN.ARQ1 IN.ARQ2 ;
RUN;
PROC PRINT DATA=IN.CONCAT ;
RUN ;

The SAS System


Obs

NOME

CPF

SALARIO

1
2
3
4
5
6
7
8

MARCIO
SANDRA
PAULA
CELSO

81818181810
23232323230
45632178955
85854343211
81818181810
23232323230
45632178955
85854343211

.
.
.
.
8765.5
10567.4
6432.1
11678.8

116

19.2 - Combinao Ordenada de Arquivos ( Match-Merging )


Combinao ordenada a unio de dois ou mais arquivos SAS em um
nico arquivo, combinado e ordenado por uma ou mais variveis comum. Os
arquivos devero estar ordenados, antes do "Match-Merging", pela varivel
comum.
MERGE <arquivo1> . . . <arquivon> ;
BY <varivel comum> ;

ARQ1

ARQ2

PROC SORT DATA=ARQ1; BY <varivel comum>;RUN;


PROC SORT DATA=ARQ2; BY <varivel comum>;RUN;
DATA ARQ3 ;
MERGE ARQ1 ARQ2 ;
BY <varivel comum>;
RUN;

ARQ3

ARQ1

ARQ2

117

Ex.61: Combinao de Arquivos


LIBNAME IN "C:\CURSO\SAS" ;
PROC SORT DATA=IN.ARQ1 ; BY CPF ;
PROC SORT DATA=IN.ARQ2 ; BY CPF ;
DATA IN.ORD ;
MERGE IN.ARQ1 IN.ARQ2 ;
BY CPF ;
RUN;
PROC PRINT DATA=IN.ORD ;

RUN ;

The SAS System


Obs

NOME

CPF

SALARIO

1
2
3
4

SANDRA
PAULA
MARCIO
CELSO

23232323230
45632178955
81818181810
85854343211

10567.4
6432.1
8765.5
11678.8

118

7 LABORATRIO
Utilizao da combinao de arquivos SAS
1 - Monte um programa que gere um novo arquivo SAS (JUSTA) que ser a justaposio
ordenada dos dados dos arquivos: PESSOAL e TRABALHO por uma varivel em comum,
o CPF. Gere um relatrio com os dados do arquivo JUSTA para visualizar os resultados.
(Utilize os comandos DATA, MERGE e BY)
OBS: Os arquivos devem estar ordenados pela varivel comum.

119

20 Dados Microsoft EXCEL


O SAS possui meios para importar e exportar dados de/para o EXCEL da Microsoft. necessrio o
licenciamento do produto SAS/Access Interface to PC Files para permitir ativar esse recurso.

20.1 - Modo Assistente: Import Wizard ou Export Wizard


A partir do menu principal do SAS:
File Import Data ... ou Export Data ...

Uma boa e genrica opo:

Microsoft Excel 5 or 95 Workbook(*.xls)

Next >

120

Localize e selecione o arquivo com extenso .xls

Options...

O preenchimento automtico nessa janela. Se for necessrio, e existir mais de uma planilha no arquivo
xls, especificar a planilha e o intervalo de colunas para a importao. Importante! Assinalar que a
primeira linha da planilha possui o nome dos campos.
OK

Next >

Informar o nome do arquivo SAS que ir receber os dados importados do EXCEL; nome da biblioteca,
nome do arquivo.
Next >

121

O modo assistente pode criar um programa SAS, que exatamente a utilizao do procedimento IMPORT.
Muito til para futuras execues, bastando alterar o que for necessrio.
Informe um nome qualquer para armazenar o programa e assinale, se desejar, para sobrepor o
arquivo programa, caso j exista. O programa ser salvo na pasta do usurio do Windows, indicado
no rodap da janela SAS. Se desejar outro local, basta indic-lo junto com o nome do programa.
Finish

Verifique, na janela log, se a importao ocorreu com sucesso.


NOTE: WORK.TESTE data set was successfully created.
NOTE: The data set WORK.TESTE has 43 observations and 18 variables.

122

20.2 - Modo Programao: PROC IMPORT ou PROC EXPORT


Ex.62: Procedimento IMPORT
PROC IMPORT OUT= WORK.TESTE
DATAFILE= "C:\curso\sas\cadastro.xls"
DBMS=EXCEL5 REPLACE;
SHEET="Sheet1";
RANGE="<ENTIRE SHEET>";
GETNAMES=YES;
RUN;
NOTE: WORK.TESTE data set was successfully created.
NOTE: The data set WORK.TESTE has 43 observations and 18 variables.

Ex.63: Procedimento EXPORT


LIBNAME ARQ "C:\curso\sas";
PROC EXPORT DATA= ARQ.CADASTRO
OUTFILE= "C:\curso\sas\cad.xls"
DBMS=EXCEL5 REPLACE;
RUN;

NOTE: Load completed. Examine statistics below.


NOTE: Inserted (550) obs into cad.xls.
NOTE: Rejected (0) insert attempts see the log for details.

NOTE: "C:\curso\sas\cad.xls" file was successfully created.

123

20.3 - Principais problemas


1 - Incompatibilidade de sistema de representao de dados (32bits ou 64bits)
Sistema Operacional
32bits
64bits
64bits
64bits
64bits

Software SAS
32bits
32bits
64bits
32bits
64bits

Software EXCEL
32bits
32bits
32bits
64bits
64bits

OK
OK
ERRO
ERRO
OK

NOTE: WORK.TESTE data set was successfully created.


NOTE: The data set WORK.TESTE has 43 observations and 18 variables.
ERROR: Connect: Classe no registrada
ERROR: Error in the LIBNAME statement.
NOTE: Import Cancelled.

2 - Verses do Microsoft Excel.


O SAS importa/exporta alguns padres/verses de arquivos EXCEL:
Microsoft Excel Workbook ( *.xls *.xlsb *.xlsm *.xlsx )
Microsoft Excel Workbook on PC Files Server
Microsoft Excel 5 or 95 Workbook ( *.xls )
Microsoft Excel 4 Spreedsheet ( *.xls )
Ateno s mensagens de erro na janela de log, que podem indicar o problema com o padro/verso
escolhido e a verso original do arquivo EXCEL que est sendo importado/exportado.
ERROR: Database error. Examine fields and/or messages below.
The file specified is not an Excel 4, 5, or 7 (Excel 95) file.
ERROR: Database table must be entered first
ERROR: Database table must be entered first
ERROR: File WORK._IMEX_.DATA does not exist.
WARNING: The data set WORK.TTT may be incomplete. When this step was stopped there
were 0 observations and 0 variables.
ERROR: Import unsuccessful. See SAS Log for details.

Para corrigir o problema, pode-se modificar o padro/verso escolhido para importao/exportao ou,
acessar o programa EXCEL, carregar a planilha e salv-la com o padro/verso correto para o SAS.

124

21 - REFERNCIAS
SAS 9.4 Statements: Reference, Third Edition
SAS Institute Inc., 2014
Cary, NC, USA
Base SAS 9.4 Procedures Guide, Third Edition
SAS Institute Inc., 2014
Cary, NC, USA
SAS Guide to TABULATE Processing, Second Edition
SAS Institute Inc., 1990
Cary, NC, USA
ISBN 1-55544-416-4
Step-by-Step Programming with Base SAS Software
SAS Institute Inc., 2001
Cary, NC, USA
ISBN 978-1-58025-791-6
Curso de SAS/BSICO
Soft Consultoria

125

Вам также может понравиться