apostila sas

114
INTRODUÇÃO AO SAS Programação1: DATA Step e PROC Step UNICAMP/CENAPAD-SP Versão: Março/2007

Upload: tiago-olliveira

Post on 03-Jul-2015

607 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Apostila Sas

INTRODUÇÃO AO SASProgramação1: DATA Step e PROC Step

UNICAMP/CENAPAD-SP

Versão: Março/2007

Page 2: Apostila Sas

2

CONTEÚDO

1 - INTRODUÇÃO pag.041.1 - HISTÓRICO pag.041.2 - ATUALMENTE pag.041.3 - DEFINIÇÃO BÁSICA pag.051.4 - MÓDULOS DO SAS pag.061.5 - CONCEITOS BÁSICOS pag.071.6 - ARQUIVOS SAS pag.081.7 - ESTRUTURA DOS ARQUIVOS SAS pag.091.8 - NOMECLATURA PARA ARQUIVOS E VARIÁVEIS pag.101.9 - SINTAXE DOS COMANDOS pag.111.10 - AMBIENTE WINDOWS pag.12

2 - ESTRUTURA DATA STEP pag.192.1 - INTRODUÇÃO pag.192.2 - COMANDO DATA Pag.212.3 - COMANDO INFILE pag.222.4 - COMANDO SET pag.232.5 - COMANDO INPUT pag.24

2.5.1 - INPUT LISTADO pag.252.5.2 - INPUT COLUNADO pag.262.5.3 - INPUT FORMATADO pag.272.5.4 - DESCRIÇÃO DE UM CAMPO DATA pag.282.5.5 - CONTROLES ESPECIAIS DO INPUT pag.302.5.6 - DETALHES DO COMANDO INPUT pag.31

2.6 - COMANDO CARDS OU DATALINES pag.32

3 - ESTRUTURA PROC STEP pag.333.1 - INTRODUÇÃO pag.33

3.1.1 - COMANDO VAR pag.343.1.2 - COMANDO BY pag.343.1.3 - COMANDO TITLE pag.353.1.4 - COMANDO FOOTNOTE pag.35

3.2 - PROCEDIMENTO PRINT pag.363.3 - PROCEDIMENTO SORT pag.38

4 - ARQUIVO DE MENSAGENS "SAS Log" pag.40

5 - COMANDOS BÁSICOS EM DATA STEP pag.435.1 - COMANDO LIBNAME pag.431º LABORATÓRIO pag.442º LABORATÓRIO pag.455.2 - COMANDO DE ATRIBUIÇÃO (=) pag.465.3 - COMANDO RETAIN pag.485.4 - COMANDO IF-THEN/ELSE pag.495.5 - COMANDO WHERE pag.525.6 - COMANDO DO/END pag.535.7 - COMANDO LENGTH pag.545.8 - COMANDO DO/END INTERATIVO pag.555.9 - COMANDO DO/WHILE pag.565.10 - COMANDO DO/UNTIL pag.575.11 - COMANDO DROP e KEEP pag.585.12 - OPÇÕES DE ARQUIVOS SAS pag.595.13 - COMANDO DELETE pag.605.14 - COMANDO OUTPUT pag.613º LABORATÓRIO pag.63

Page 3: Apostila Sas

3

6 - FUNÇÕES DO SAS pag.666.1 - INTRODUÇÃO pag.666.2 - FUNÇÕES DE TRATAMENTO DE CARACTER pag.67

6.2.1 - FUNÇÃO UPCASE pag.676.2.2 - FUNÇÃO LOWCASE pag.676.2.3 - FUNÇÃO SUBSTR pag.686.2.4 - FUNÇÃO COMPRESS pag.696.2.5 - FUNÇÃO LENGTH pag.696.2.6 - FUNÇÃO SCAN pag.716.2.7 - FUNÇÃO INDEX pag.72

6.3 - FUNÇÕES DE TRUNCAMENTO pag.756.3.1 - FUNÇÃO INT pag.756.3.2 - FUNÇÃO ROUND pag.75

6.4 - FUNÇÕES ESTATÍSTICAS DESCRITIVAS pag.776.4.1 - FUNÇÃO SUM pag.776.4.2 - FUNÇÃO MEAN pag.77

6.5 - FUNÇÕES DE TRATAMENTO DE DATA E HORA pag.796.5.1 - FUNÇÃO MDY pag.796.5.2 - FUNÇÕES: DAY, MONTH, YEAR pag.796.5.3 - FUNÇÃO TODAY pag.806.5.4 - FUNÇÃO TIME pag.806.5.5 - FUNÇÕES: HOUR, MINUTE, SECOND pag.80

6.6 - FUNÇÕES MACRO pag.816.6.1 - FUNÇÃO %SYSFUNC pag.814º LABORATÓRIO pag.83

7 - COMANDOS DE CONFIGURAÇÃO pag.847.1 - COMANDO OPTIONS pag.847.2 - COMANDO LABEL pag.867.3 - COMANDO FORMAT pag.877.4 - COMANDO ODS pag.88

8 - PROCEDIMENTOS ESTATÍSTICOS BÁSICOS pag.908.1 - PROCEDIMENTO MEANS pag.908.2 - PROCEDIMENTO FREQ pag.938.3 - PROCEDIMENTO TABULATE pag.985º LABORATÓRIO pag.103

9 - RECURSO DE FORMATAÇÃO ESPECIAL pag.1059.1 - PROCEDIMENTO FORMAT pag.1056º LABORATÓRIO pag.107

10 - COMBINAÇÃO DE ARQUIVOS SAS pag.10910.1 - CONCATENAÇÃO pag.10910.2 - COMBINAÇÃO ORDENATA (“MATCH-MERGING”) pag.1117º LABORATÓRIO pag.113

11 - BIBLIOGRAFIA pag.114

Page 4: Apostila Sas

4

1 - INTRODUÇÃO

1.1 - HISTÓRICO

Década de 60;

North Caroline University;

Censo Agro-pecuário Norte-americano;

Conjunto de sub-rotinas (FORTRAN, IBM/370);

SAS Institue Inc. (1975);

1.2 - ATUALMENTE

40.000 Instalações, em 110 paises;

96 das 100 maiores empresas do mundo, utilizam SAS.(Fortune 500 List - 2005);

SAS é a maior empresa de software do mundo de capital privado;

Idiomas: Chinês, Francês, Alemão, Hebreu, Italiano, Japonês,Russo, Espanhol, Polonês, Hungaro, Sueco, Coreano,etc.

Page 5: Apostila Sas

5

1.3 - DEFINIÇÃO BÁSICA

É um software integrado para análise de dados que consiste devários produtos e que proporcionam:

- Recuperação de dados;

- Gerenciamento de arquivos;

- Análise estatística;

- Acesso a Banco de Dados (ORACLE, DB2, etc);

- Geração de gráficos;

- Geração de relatórios;

- Geração de aplicativos;

- Soluções de negócios;

É um software de grande portabilidade, podendo operar emdiversos ambientes computacionais:

- Mainframes IBM ( CMS, MVS, OS, OS/390, Z/OS )

- DIGITAL ( VMS, OpenVMS )

- Micros PC ( DOS, Windows, OS/2, Apple )

- UNIX ( Solaris, AIX, HP-UX, Irix, Linux )

Page 6: Apostila Sas

6

1.4 - MÓDULOS DO SAS

SAS/BASE Módulo básico, obrigatório em toda instalação;

SAS/STAT Módulo estatístico;

SAS/GRAPH Módulo gráfico ( Histogramas, plots, ... );

SAS/OR Módulo de análise e pesquisa operacional(Programação linear, Análise de CaminhoCrítico);

SAS/QC Módulo para análise de controle de qualidade;

SAS/ETS Módulo de econometria (Séries Temporais,Modelagem de Equações Simultâneas);

SAS/ASSIST Módulo de programação interativa e amigável;

SAS/IML Módulo para análise e operação de matrizes;

SAS/ACCESS Módulo para acesso aos diversos tipos deBanco de Dados;

SAS/CONNECT Módulo para conexão entre ambientesoperacionais heterogêneos;

SAS/AF Módulo para desenvolvimento de aplicações;

SAS/FSP Módulo para facilitar o acesso a arquivos comprogramação de telas;

Page 7: Apostila Sas

7

1.5 - CONCEITOS BÁSICOS

DATA SET Arquivo de dados com estrutura SAS;

OBSERVAÇÃO Registro de um arquivo de dados SAS;

JOB SAS Arquivo com um programa SAS ( É umconjunto de DATA Step's e PROCStep's );

DATA STEP Divisão lógica de um programa SAS, noqual se cria e altera um, ou váriosarquivos SAS ( Data Set's );

PROC STEP Divisão lógica de um programa SAS, noqual se analisa e manipula os dadoscontidosnum arquivo SAS ( Data Set's );

OBS: A funcionalidade do Sistema SAS foi construída em tornode quatro idéias básicas no tratamento de dados:

Acessar dados;Administrar dados;Analisar dados;Apresentar dados;

Page 8: Apostila Sas

8

1.6 - ARQUIVOS SAS

Todos os dados devem estar armazenados em arquivos comestrutura SAS (DATA Set's), para serem analisados pelosprocedimentos do SAS ( PROC's ).

Os arquivos SAS podem ser temporários (biblioteca definida peloSAS - WORK) ou permanentes (bibliotecas definidas pelousuários).

Em um único programa SAS ( Job SAS ), vários arquivos podemser abertos e analisados.

Os arquivos SAS, depois de criados, podem ser analisados pelosprocedimentos SAS.

Page 9: Apostila Sas

9

CARLOS M 12 1.70GILBERTO M 25 1.65RICARDO M 30 1.80

. . . .

. . . .

. . . .ALICE F 28 1.68MARCIA F 22 1.75

1.7 - ESTRUTURA DOS ARQUIVOS SAS

O arquivo SAS é um conjunto de valores de dados arrumados em umformato de tabela.

NOME SEXO IDADE ALTURA

As colunas nas tabelas são chamadas de variáveis:

S Variáveis correspondem aos campos de dados;S Cada variável recebe um nome;S Existem dois tipos de variáveis:

caracter (até 32K caracteres - 32KBytes) numérica (Representação IEEE - 8Bytes)

As linhas na tabela são chamadas de observações (ou registros). Nãoexistem limites para o número de observações.

Um Arquivo SAS é dividido em duas partes:

Descritora Contém a descrição do arquivo: Tamanho do arquivo,número de registros, nome, tipo, tamanho e formato devariáveis, etc;

Dados Contém os dados do arquivo.

Page 10: Apostila Sas

10

DATA EXEMPLO1 ; INFILE “C:\TEMP\CADASTRO.TXT”; INPUT PRIMEIRO_NOME $ 1-8 SEXO $ 10 IDADE 13-14 ALTURA 16-19 ;RUN;

1.8 - NOMECLATURA PARA ARQUIVOS E VARIÁVEIS

Todo nome de arquivo e variável devem seguir as seguintesregras:

S Possuir de 1 à 32 caracteres;

S Começar com letra (A-Z);

S Pode continuar com números, letras ou travessões( _ ).

Ex.1:

Page 11: Apostila Sas

11

DATA EXEMPLO1 ; INFILE “C:\TEMP\DADOS.DAT”; INPUT NOME $ 1-8 SEXO $ IDADE $ 13-14 ALTURA 16-19 ;RUN;

PROC PRINT DATA=EXEMPLO1 ; RUN ;

PROC FREQ DATA=EXEMPLO1 ; TABLES IDADE*ALTURA ; RUN ;

1.9 - SÍNTAXE DOS COMANDOS

Todo comando SAS começa com uma palavra-chave, deidentificação, e termina com ponto e virgula (;).

S Os comandos podem começar e terminar em qualquerparte da linha;

S Um comando pode se extender por diversas linhas;

S Vários comandos podem ficar na mesma linha.

Ex.2:

Page 12: Apostila Sas

12

1.10 - AMBIENTE WINDOWS

Para acessar o sistema SAS e necessário que se esteja no ambienteWINDOWS do seu micro, abrir a janela SAS e executá-lo.

Page 13: Apostila Sas

13

JANELA DE OPÇÕES DE CONFIGURAÇÃO

Tools ==> Options ==> System...

Page 14: Apostila Sas

14

Page 15: Apostila Sas

15

OPÇÕES DE CONFIGURAÇÃO DO EDITOR

Tools ==> Options ==> Enhanced Editor...

Page 16: Apostila Sas

16

Page 17: Apostila Sas

17

CONFIGURAÇÃO DE TECLADO

Tools ==> Options ==> Keys

Page 18: Apostila Sas

18

Page 19: Apostila Sas

19

2 - ESTRUTURA DATA Step

2.1 - INTRODUÇÃO

É a seção de um programa SAS aonde se orgnaniza e administra os dados,utilizando comandos de programação 4GL do SAS/BASE, baseados emuma lógica de processamento.

-A maioria dos comandos utilizados só podem ser executados na estruturaDATA Step;

-Os comandos seguem uma hierarquia, ou seja, a execução de umdeterminado comando, pode depender da execução do comando anterior;

-Os arquivos processados em um DATA Step, normalmente, serãoprocessados sequencialmente, ou seja, registro após registro;

-Em têrmos de lógica de processamento, o DATA Step representa um“loop”, que repete todos os comandos a cada leitura de um registro, atéencontrar o último registro, finalizando o DATA Step e seguindo para opróximo Step;

-A execução de um programa SAS obedece a duas fases internas:Compilação e Execução;

-Os comandos em um DATA Step, podem ser divididos em:

Comandos de Definição -Funcionalidade: durante a compilação;Comandos de Execução -Funcionalidade: durante a execução.

OBS: Comandos de Definição não possuem nenhuma ação durantea execução.

Page 20: Apostila Sas

Abrir arquivo

para gravar

Abrir arquivo

para leitura

processa registro

Ultimo registro

Inicio do DATA Step

Salvar registro no

arquivo para gravaçao

SIM

Fim do DATA Step

Ler novo registro

NAO

20

Fluxo de Execução

Page 21: Apostila Sas

21

DATA ENDERECO ;DATA ARQ1 ARQ2 ARQ3 ;DATA ENT.CADASTRO ;DATA ;DATA _NULL_;

2.2 - Comando DATA

Comando de Definição;

Comando que sempre inicia um DATA Step;

Abre um novo arquivo DATA Set, vazio, em umabiblioteca SAS.

DATA <bib>.<nome do arquivo> ;

Ex.3:

OBS: Não é obrigatório especificar a biblioteca, neste caso, o SASirá utilizar a biblioteca padrão, também chamada de bibliotecatemporária ( WORK ).

Page 22: Apostila Sas

22

INFILE "C:\DADOS\ARQ1.TXT" DLM=”,”;INFILE "A:\CADASTRO.PRN" ;INFILE 'C:\SAS\CAD.DAT' LRECL=380 PAD ;

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

. . .

. . .

. . .

2.3 - Comando INFILE

Comando de Definição;

Comando que identifica e abre um arquivo externo dedados, somente para leitura (não é um arquivo no formatodo SAS);

Normalmente é um arquivo de dados no formato texto(somente texto);

Este comando deve ser posicionado após o comando DATAe antes do comando INPUT.

INFILE "<arquivo de dados>" [opções] ;

Opções: LRECL= Tamanho do registro;PAD Completa de brancos os registros;MISSOVER Previne o SAS de lê um novo registro

para completar os dados de umavariável;

DLM= Especifica um delimitador entre oscampos.

Ex.4:

Page 23: Apostila Sas

23

DATA EXEMPLO ;SET CADASTRO ;

.

.

.

2.4 - Comando SET

Comando de Execução;

Este comando abre um arquivo de dados DATA Set(formato SAS), somente para leitura, e que já exista emalguma biblioteca SAS;

O comando deve ser posicionado, na maioria das vezes, noinício de um DATA Step, para permitir ao compilador ler aestrutura do arquivo especificado e armazená-la namemória;

SET <bib>.<nome do arquivo>;

Ex.5:

OBS: Não é obrigatório especificar a biblioteca, neste caso, o SASirá utilizar a biblioteca padrão, também chamada de bibliotecatemporária ( WORK ).

Page 24: Apostila Sas

24

2.5 - Comando INPUT

Comando de Execução;

O comando INPUT serve para descrever ao SAS como estãoarmazenados e organizados os dados em arquivos textos,que foram especificados pelo comando INFILE ou, pelosdados digitados no programa, após o comando CARDS;

Todo arquivo aberto pelo comando INFILE, semprenecessitará de um comando INPUT para ler o seu conteúdo;

O comando INPUT irá ler registro a registro (leiturasequêncial) até encontrar "fim de arquivo (EOF)", e iráatribuir nomes (Variáveis) para cada campo de um registro;

Existem tres tipos básicos de comando INPUT:

2.5.1 - INPUT LISTADO

2.5.2 - INPUT COLUNADO

2.5.3 - INPUT FORMATADO

Page 25: Apostila Sas

25

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

C A R L O S M 1 8 1 7 0 6 8 . 0

C A R L A F 2 6 1 7 8 7 2 . 0

S I L V I A F 2 1 1 6 5 6 0 . 5

DATA FICHA ; INFILE “A:\CADASTRO.TXT”; INPUT NOME $ SEXO $ IDADE ALTURA PESO ;RUN;

2.5.1 - INPUT LISTADO

- Lê as variáveis na ordem que aparecem na linha de dados,de acordo com um delimitador. Os dados não precisamestar alinhados e colunados;

INPUT <variável> [$]

variável Nome da variável que será associada a uma colunade dados.

$ Caracter opcional que indica que a variável só iráconter dados alfanuméricos. Sem o $, significa que avariável será numérica

OBS:Por “default”, o delimitador será o caracter branco , e otamanho de qualquer variável será de até 8 bytes.

Ex.6:

Page 26: Apostila Sas

26

DATA FICHA ; INFILE “A:\CADASTRO.TXT”; INPUT NOME $ 1-8 SEXO $ 9 IDADE 11-12 ALTURA 14-16 .2 PESO 17-20 ;RUN;

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

C A R L O S M 1 8 1 7 0 6 8 . 0

C A R L A F 2 6 1 7 8 7 2 . 0

S I L V I A F 2 1 1 6 5 6 0 . 5

2.5.2 - INPUT COLUNADO

- Lê as variáveis especificando a sua posição na linha dedados (posição inicial e posição final). As variáveisdevem estar alinhadas e colunadas.

INPUT <variável> [$] <início>-<fim> [.decimal] ;

variável Nome da variável, que será associada a uma coluna dedados.

$ Caracter opcional que indica que a variável só irá conterdados alfanuméricos. Sem o $, significa que a variável seránumérica.

início Valor que indica a posição inicial da variável na linha dedados.

fim Valor que indica a posição final da variável na linha dedados.

.decimal Valor opcional, indica o número de posições decimais deuma variável numérica.

Ex.7:

Page 27: Apostila Sas

27

2.5.3 - INPUT FORMATADO

- Lê as variáveis especificando o tamanho e,opcionalmente, o formato do campo na linha de dados.

- É o tipo de INPUT mais poderoso e complexo do SAS.

INPUT <variável> [$] <w.d> ou [fomatow.d] ;

variável Nome da variável, que será associada a uma coluna dedados.

$ Caracter opcional que indica que a variável só irá conterdados alfanuméricos. Sem o $, significa que a variável seránumérica.

w. Valor que indica o tamanho de um campo na linha de dados.

w.d Valor que indica o tamanho de um campo numérico comcasas decimais.

formatow.d Campo opcional. Nome de um formato especial de leitura dedados:

BINARYw.d Lê campo numérico no formato binário e oconverte para decimal;

COMMAw.d Lê campo numérico com vírgulas e asretira;

Ew.d Lê campo numérico com notação científica;HEXw. Lê campo numérico em hexadecimal;DDMMYYw. Lê campo no formato padrão de datas

dd/mm/yyyy.

Page 28: Apostila Sas

01JAN195901JAN195901JAN195901JAN1959 01JAN196001JAN196001JAN196001JAN1960 01JAN196101JAN196101JAN196101JAN196101JAN195901JAN195901JAN195901JAN1959 01JAN196001JAN196001JAN196001JAN1960 01JAN196101JAN196101JAN196101JAN1961storestore

----365365365365 0000 366366366366----365365365365 0000 366366366366displaydisplay

01/01/195901/01/195901/01/195901/01/1959 01/01/196001/01/196001/01/196001/01/1960 01/01/196101/01/196101/01/196101/01/196101/01/195901/01/195901/01/195901/01/1959 01/01/196001/01/196001/01/196001/01/1960 01/01/196101/01/196101/01/196101/01/1961

28

2.5.4 - Descrição de um campo DATA

Campos que representam datas necessitam que sejamidentificados pelo SAS através de um formato de leitura earmazenados como numéricos;

O valor numérico armazenado representa o número de diasem relação a uma data base SAS.

É um campo que obrigatoriamente deve ser lido com umformato de leitura para identificar a formatação da data.

Formatos: DATE9. 01JAN1960DDMMYY10. 01/01/1960

Formato padrão de uma constante data no SAS:

“DDMMMYYYY”D “01JAN1960"d

Page 29: Apostila Sas

29

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

C A R L O S M 1 8 1 7 0 6 8 . 0

C A R L A F 2 6 1 7 8 7 2 . 0

DATA FICHA ; INFILE “A:\CADASTRO.TXT”;

INPUT NOME $ 8. SEXO $ 1. IDADE 3. ALTURA 4.2 PESO 4. ;

RUN;

1 2 3 4 5 6 7 8 9 10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

R J 2 0 4 5 6 3 0 0 6 , 7 3 9 , 9 9 2 8 8 F 1 . 2 E 5

S P 1 1 5 0 0 0 0 0 9 , 4 6 4 , 2 6 5 6 C C 1 2 5 E 5

DATA EXEMPLO2 ; INFILE “A:\NUMEROS.PRN”;

INPUT UF $ 2. CEP 8. POP COMMA9. VALOR1 HEX3. VALOR2 E5. ;RUN;PROC PRINT ; RUN ;

SASOBS UF CEP POP VALOR1 VALOR2

1 RJ 20456300 6739992 2191 1200002 SP 11500000 9464265 1740 12500000

Ex.8:

Ex.9:

Page 30: Apostila Sas

30

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

1 1 1 1 1 B B B B C C C C

D D D D

E E E E F F

2 2 2 2 2 b b b b c c c c

d d d d

e e e e f fDATA POSICAO ;

INFILE "C:\SAS\POS.DAT" ;INPUT A $ @10 B $ 4. +3 C $ 4. / D $ 1-4 / E $ @8 F $ #2 D1 $ 4. ;

RUN;PROC PRINT ; RUN ;

The SAS System

OBS A B C D E F D1

1 11111 BBBB CCCC DDDD EEEE FF DDDD2 22222 bbbb cccc dddd eeee ff dddd

2.5.5 - CONTROLES ESPECIAIS DO INPUT

Posicionadores de COLUNA ( @ , + )

@n Move a leitura para a coluna n ;+n Move a leitura n colunas ;

Posicionadores de LINHA ( # , / )

#n Move a leitura para a linha n ;/ Avança a leitura em uma linha ;

Ex.10:

Page 31: Apostila Sas

31

INPUT PESO 17-20 NOME $ 1-8 IDADE 11-12 SEXO $ 9 ;

INPUT NOME $ 1-8 PREFIXO $ 1-3 ENDERECO $ 10-40 APT $ 38-40 ;

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.) ;

2.5.6 - DETALHES DO COMANDO INPUT

- Em campos numéricos, não são permitidos "brancos" entre os números;

- Sinal (+ - ), ponto decimal (.) e notação científica para expoente ( E ), são permitidos em campos numéricos;

- Campos tipo caracter podem ter, no máximo, 32K de caracteres;

- São permitidos "brancos" em qualquer posição em campos tipo caracter;

- Campos em branco (sem informação) são considerados como "missing value" (valor perdido).

- Os campos de um registro de dados podem ser lidos em qualquer ordem.

- Campos ou partes de um campo podem ser relidos.

- Dados caracteres serão armazenados, alinhados pela esquerda, e os dados numéricos, alinhados pela direita;

- Os tipos de INPUT , podem ser combinados num único comado INPUT;

- Detalhes de leitura:

Page 32: Apostila Sas

32

DATA FICHA ; INPUT NOME $ 1-8 SEXO $ 9 IDADE 11-12 ALTURA 14-16 .2 PESO 17-20 ;DATALINES;Maria F 36 16857.8Josefina F 42 15967.9Tom M 56 18295.8;RUN;

DATA FICHA ; INPUT NOME $ SEXO $ IDADE ALTURA PESO ;CARDS;Antônio M 32 1.78 78Julia F 25 1.70 65;RUN;

2.6 - Comando CARDS ou DATALINES

Comando de Definição;

Indica ao SAS que os dados utilizados em um DATA Step estãodigitados no programa, logo após o comando CARDS ouDATALINES;

Último comando dentro de um DATA Step, antes do comandoRUN;

O “;” indica fim de dados e deve ser posto, sozinho, em uma linha;

Utilizado junto com o comando INPUT, quando apenas se desejaefetuar alguns testes de execução do DATA Step, não necessitandoabrir um arquivo de leitura com o comando INFILE.

Ex.11:

Page 33: Apostila Sas

33

3 - ESTRUTURA PROC Step

3.1 - INTRODUÇÃO

É a seção de um programa SAS aonde se analisa os dados de um arquivoSAS, utilizando-se procedimentos específicos para cada tipo de análise.

- A maioria dos procedimentos SAS geram relatórios técnicos;

- Todos os procedimentos iniciam com a palavra PROC seguida do nomeespecífico do procedimento ou rotina desejada;

- Os comandos em uma PROC não seguem uma hierarquia, ou seja, podemser colocados em qualquer ordem dentro da PROC;

PROC <rotina> [opções] ;[comando] ;[comando] ;

RUN ;

rotina Palavra-chave que identifica o procedimento a serexecutado.

opções Parâmetros opcionais de configuração para execuçãodo procedimento.

comando Comandos de detalhamento na execução doprocedimento.

RUN Comando para execução do procedimento SAS.Necessário no último procedimento do programaSAS.

Page 34: Apostila Sas

34

3.1.1 - Comando VAR

Especifíca as variáveis do arquivo SAS que serãoprocessadas pelo procedimento.

VAR <variável1> <variável2> ...<variáveln> ;

3.1.2 - Comando BY

Especifíca uma ou mais variáveis que permitirão oprocessamento em grupos;

BY <variável1> <variável2> ...<variáveln> ;

Page 35: Apostila Sas

35

3.1.3 - Comando TITLE

Comando livre e de Descrição, pode ser codificado em qualquerparte do programa, não estando preso a uma estrutura Data step ouProc step. Especifíca de 1 até 10 títulos para o relatório a ser geradopelo procedimento.

TITLE "<cabeçalho>" ;TITLE1 "<cabeçalho>" ;

. . .TITLE10 "<cabeçalho>" ;

OBS: Um título permanece ativo até que seja modificado, oueliminado com o comando: TITLE;

3.1.4 - Comando FOOTNOTE

Comando livre e de Descrição, pode ser codificado em qualquerparte do programa, não estando preso a uma estrutura Data step ouProc step. Especifíca de 1 até 10 rodapés para o relatório a sergerado pelo procedimento.

FOOTNOTE "<rodapé>" ;FOOTNOTE1 "<rodapé>" ;

. . .FOOTNOTE10 "<rodapé>" ;

OBS: Um rodapé permanece ativo até que seja modificado, oueliminado com o comando: FOOTNOTE;

Page 36: Apostila Sas

36

3.2 - Procedimento PRINT

Procedimento do SAS que imprime, na saída padrão, os dadoscontidos nos arquivos SAS.

A saída padrão é, normalmente, a janela OUTPUT.

PROC PRINT [opções] ;VAR <lista de variáveis> ;BY <lista de variáveis> ;SUM <lista de variáveis> ;

opções DATA= Nome do arquivo SAS;DOUBLE Espacejamento duplo;NOOBS Suprime a coluna com o número de cada

observação do arquivo;UNIFORM Formata todas as paginas uniformemente;LABEL Imprime os "label's" das variáveis;SPLIT= Especifica um caracter do label para indicar

a quebra da descrição;

VAR Especifica uma lista de variáveis que serãoimpressas;

BY Especifica a quebra ou agrupamento dorelatório, por uma ou mais variáveis;

SUM Especifica uma ou mais variáveis numéricasque serão totalizadas;

Page 37: Apostila Sas

37

TITLE "Relatório de Fucionarios" ;PROC PRINT DATA=EXEMPLO1 NOOBS ; VAR NOME FUNCAO ;RUN ;

Relatório de Funcionarios

NOME FUNCAO

ANTUNES ANALISTA TERESA ANALISTA CLAUDIA PROG MARCOS PROG JULIO OPER

TITLE "Relatório de Salários" ;FOOTNOTE " FONTE: DH " ;PROC PRINT DATA=EXEMPLO1 ;

VAR NOME FUNCAO SALARIO ;SUM SALARIO ;

RUN ; Relatório de Salários OBS NOME FUNCAO SALARIO

1 ANTUNES ANALISTA 1800 2 TERESA ANALISTA 1650 3 CLAUDIA PROG 1200 4 MARCOS PROG 1200 5 JULIO OPER 850

======= 6700

FONTE: DH

Ex.12:

Ex.13:

Page 38: Apostila Sas

38

3.3 - Procedimento SORT

Procedimento do SAS que reordena os registros dos arquivos poruma ou mais variáveis, em ordem ascendente ou descendente.

Não possui saída impressa.

Pode gerar arquivo ordenado.

PROC SORT [opções] ;BY <lista de variáveis> ;

opções DATA= Nome do arquivo SAS para ser ordenado;OUT= Nome do arquivo SAS, aonde serão armazenado os

dados ordenados. Se não for utilizada essa opção, aordenação será feita em cima do arquivo original;

BY Especifíca uma ou várias variáveis como chaves deordenação;

OBS: A ordenação sempre é feita na ordem ascendente. Paraordenar na ordem descendente é necessario colocar o parâmetrodescending, antes da variável a ser ordenada no comando BY.

Page 39: Apostila Sas

39

PROC SORT DATA=EXEMPLO OUT=ORDENA ;BY FUNCAO ;

RUN ;PROC PRINT DATA=ORDENA NOOBS ;

BY FUNCAO ;VAR NOME SALARIO ;SUM SALARIO ;

RUN ;

The SAS System

----------------------------- FUNCAO=ANALISTA -----------------------------

NOME SALARIO

ANTUNES 1800 TERESA 1650 -------

FUNCAO 3450

------------------------------- FUNCAO=OPER -------------------------------

NOME SALARIO

JULIO 850

------------------------------- FUNCAO=PROG -------------------------------

NOME SALARIO

CLAUDIA 1200 MARCOS 1200 -------

FUNCAO 2400 ==== 6700

Ex.14:

Page 40: Apostila Sas

40

DATA EXEMPLO1 ; INFILE "C:\DADOS.TXT" ; INPUT NOME $1-8 SEXO $10 FUNCAO $11-17 SALARIO 18-23 ;RUN;PROC PRINT DATA=EXEMPLO1 NOOBS ; VAR NOME FUNCAO ;RUN ;

SAS LogNOTE: Copyright(c) 1989 by SAS Institute Inc., Cary, NC USA.NOTE: SAS (r) Proprietary Software Release 8.2 Licensed to UNIVERSIDADE ESTADUAL DE CAMPINAS, Site 0004267003.

1 DATA EXEMPLO1 ;2 INFILE "C:\DADOS.TXT" ;3 INPUT NOME $1-8 SEXO $10 FUNCAO $11-17 SALARIO 18-23 ;

NOTE: The infile "C:\DADOS.TXT" is: FILENAME=C:\DADOS.TXT, RECFM=V,LRECL=132

NOTE: 5 records were read from the infile "C:\DADOS.TXT". The minimum record length was 16. The maximum record length was 23.NOTE: The data set WORK.EXEMPLO1 has 5 observations and 4 variables.NOTE: The DATA statement used 2.68 seconds.

4 PROC PRINT DATA=EXEMPLO1 NOOBS ;5 VAR NOME FUNCAO ;6 RUN ;

NOTE: The PROCEDURE PRINT used 0.55 seconds.

4 - Arquivo de Mensagens - "SAS Log"

Ao se executar um programa SAS, é gerado um relatório demensagens com notificações e erros da execução do programa(janela LOG).

Muito útil, deve ser sempre analisado, principalmente quando nãoaparecer o relatório com os resultados na janela OUTPUT, ouquando esse relatório aparecer com problemas.

Ex.15:

Page 41: Apostila Sas

41

DATA EXEMPLO1 ; INFILE 'C:\TEMP\LEITURA.DAT'; INPUT NOME $1-8 SEXO $10 FUNCAO# $11-17 SALARIO 18-23 ;RUN;

PROC PRINT DATA=EXEMPLO1 NOOBS VAR NOME FUNCAO ;RUN ;

SAS Log

17 DATA EXEMPLO1 ;18 INFILE 'C:\TEMP\LEITURA.DAT';

19 INPUT NOME $1-8 SEXO $10 FUNCAO# $11-17 SALARIO 18-23 ;

20 RUN;

2122 PROC PRINT DATA=EXEMPLO1 NOOBS

23 VAR NOME FUNCAO ;

24 RUN ;

Ex.16:

Ex.17:

Page 42: Apostila Sas

42

DATA EXEMPLO1 ; INFILE 'C:\TEMP\LEITURA.DAT'; INPUT NOME $1-8 SEXO $10 CARGO $11-17 SALARIO $18-23 ;RUN;

PROC PRINT DATA=EXEMPLO1 NOOBS ; VAR NOME FUNCAO SALARIO ; SUM SALARIO ;RUN ;

SAS Log

58 DATA EXEMPLO1 ;59 INFILE 'C:\TEMP\LEITURA.DAT';60 INPUT NOME $1-8 SEXO $10 CARGO $11-17 SALARIO $18-23 ;

61 RUN;

6263 PROC PRINT DATA=EXEMPLO1 NOOBS;64 VAR NOME FUNCAO SALARIO ;

65 SUM SALARIO;

66 RUN ;

Page 43: Apostila Sas

43

LIBNAME IN "C:\ALUNO" ;DATA IN.EXEMPLO ;

INFILE "A:\CADASTRO" ;INPUT NOME $ 1-30 SEXO $ 31 END $ 32-60 ;

PROC PRINT DATA=IN.EXEMPLO NOOBS ;VAR NOME ENDERECO ;

RUN ;

5 - COMANDOS BÁSICOS EM DATA STEP

5.1 - Comando LIBNAME

Comando opcional de configuração que define uma ou mais áreas detrabalho e armazenamento (diretórios), para os arquivos SAS (Data Set's).

Define o primeiro nível de um nome de arquivo, a biblioteca SAS.

[biblioteca].<nome do arquivo>

O comando LIBNAME, normalmente, é colocado antes do comando DATA,e só será necessário ser executado uma única vez durante uma sessão SASWINDOWS.

LIBNAME <biblioteca> "<diretório>" ;

Biblioteca Palavra de no mínimo 1 e no máximo 8caracteres, que identifica o primeiro nível emum nome de arquivo.

diretório Nome de um diretório que já exista no seuambiente.

OBS: O SAS define uma biblioteca padrão, temporária, de trabalho, de nomework.

Ex.18:

Page 44: Apostila Sas

44

1º LABORATÓRIO

Montar um programa SAS que leia um arquivo de dados externo (não SAS) e gere um arquivono formato SAS (Data Set), permanente.

1- Criar um arquivo SAS, permanente, de nome CADASTRO, no diretório c:\curso\sas(Utilize os comandos LIBNAME e DATA );

2 - Abra o arquivo de dados externo de nome CADASTRO.DAT no diretório c:\curso\sas(Utilize o comando INFILE ). O Tamanho do registro de dados é de 130 bytes;

3 - Leia os dados deste arquivo ( Utilize o comando INPUT, colunado ou formatado ).Sabendo-se que o conteúdo do arquivo está dividido em diversos campos na seguinte ordem:

Nome do Tipo do Tamanho do Decimais Posição DetalheCampo Campo Campo Inicial

NOME Caractere 30 1

SEXO Caractere 1 31

IDADE Numérico 2 32

PESO Numérico 6 2 34

ALTURA Numérico 4 2 40

ANIVERSARIO Numérico 10 44 Campo formatado: Ex. 18/01/2005

ESTADO CIVIL Caractere 1 54

FILHOS Numérico 2 55

RG Caractere 15 57

CPF Caractere 11 72

EMPRESA Caractere 15 83

FUNCAO Caractere 12 98

ADMISSAO Numérico 9 110 Campo formatado: Ex 18JAN2005

SALARIO Numérico 12 2 119 Campo formatado: Ex. 3.548,25

4 - Releia parte do campo EMPRESA, na posição 89, defina a variável TIPO DEEMPRESA, com 9 caracteres;

5 - Gere um relatório com os resultados da leitura do arquivo. Leia com atenção asmensagens na janela LOG. Salve o seu programa!.

OBS: Salve o seus programas! Faça-o sempre, no diretório c:\curso\sas

Page 45: Apostila Sas

45

2º LABORATÓRIO

Manipular os procedimentos de impressão e ordenação.

Utilizando o arquivo SAS gerado no laboratório anterior, monte programas SAS que:

1 - Gere um relatório:- com as variáveis: NOME, EMPRESA, FUNCAO e SALARIO; - deverá ter espacejamento DUPLO;- não poderá aparecer a coluna com o número de registros ( OBS );

( Utilize o procedimento PRINT )

2 - Gere:- um arquivo SAS permanente ordenado por EMPRESA;- um relatório com todos os dados, relacionados por EMPRESA;

(Utilize os procedimentos SORT e PRINT)

3 - Utilizando o arquivo ordenado do item anterior:- gere um relatório por EMPRESA;- com os dados: NOME, FUNCAO e SALARIO;- faça um somatório da variável SALARIO;- coloque o título "Relatório de Salários por Empresa";- coloque o rodapé "FONTE: Fundação Getúlio Vargas";

( Utilize o procedimento PRINT)

4 - Utilizando o arquivo SAS CADASTRO, gerado no laboratório anterior, crieum programa SAS que emita um relatório com as variáveis: NOME, FUNCAOe SALARIO, em ordem ascendente por EMPRESA e descendente porSALARIO.

(Utilize o procedimento SORT e PRINT)

5 - Utilizando o arquivo SAS CADASTRO, gere um relatório que:- esteja ordenado por EMPRESA;- com as variáveis: NOME, EMPRESA e SALARIO;- tenha espacejamento DUPLO;- sem título algum;- com o somatório da variável SALARIO;

Page 46: Apostila Sas

465.2 - Comando de Atribuição (=)

Caracter utilzado para criar novas variáveis e editar as já existentes em um Data Step.

<variável> = <expressão> ;

variável Nome com no máximo 32 caracteres.expressão Expressões do tipo:

- Operações aritméticas simples: + - * / **

x2=x ; Move valor;soma=x+y ; Adição;dif=x-y ; Subtração;dobro=x*2 ; Multiplicação;met=x/2 ; Divisão;cubo=x**3 ; Exponenciação;y=-x ; Muda sinal;

- Constantes :

N=0 ; Constante numérica; SEXO="F" ; Constante caracter;

- Concatenação de caracteres : ||

A=”PAULO” || “ANTUNES”; ==> A=”PAULOANTUNES”A=”PAULO” || “ ” || “ANTUNES”; ==> A=”PAULO ANTUNES”

- Expressões complexas com prioridade de avaliação:

( ) Função ** * / + -=================>

A=X+Y+Z ;A=X+Y*Z ;A=X/(Y/Z) ;

- Funções:S=SQRT(X) ;A=INT(X) ;Z=ABS(SQRT(X)-2) ;

Page 47: Apostila Sas

47

LIBNAME ARQ "C:\SAS\TESTE" ;DATA ARQ.LUCROS ;

INFILE “C:\DADOS\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;

Arquivo: NUMEROS.TXT

01 02 03 04 05 06 07 08 09 10 11 12

9 4 5 6 5 0 1 0 5 0

9 5 6 2 8 0 1 1 4 0

9 6 8 4 5 0 2 4 5 0

PROC PRINT DATA=ARQ.LUCROS NOOBS DOUBLE ;TITLE "Analise Contabil" ;VAR ANO RECEITA DESPESAS LUCRO DOLLAR ;SUM RECEITA DESPESAS LUCRO DOLLAR ;

RUN ;

Analise Contabil

ANO RECEITA DESPESAS LUCRO DOLLAR

1994 5650 1050 4600 4693.8775

1995 6280 1140 5140 5244.8979

1996 8450 2450 6000 6122.4489===== ==== ===== =========20380 4640 15740 16061.2240

Ex.19:

Page 48: Apostila Sas

48

DATA LUCROS ;INFILE “C:\DADOS\NUMEROS.TXT”;RETAIN CONT 0 ANO 0;INPUT ANO 1-2 RECEITA 4-7 DESPESAS 9-12;

CONT=CONT+1 ;ANO = ANO + 1900 ;LUCRO = RECEITA - DESPESAS ;DOLLAR = LUCRO / 0.98 ;

CARDS;94 5650 105095 6280 114096 8450 2450RUN;PROC PRINT DATA=LUCROS NOOBS;

TITLE "Analise Contabil" ;SUM RECEITA DESPESAS LUCRO DOLLAR ;

RUN ;

Analise Contabil

CONT ANO RECEITA DESPESAS LUCRO DOLLAR

1 1994 5650 1050 4600 4693.8775 2 1995 6280 1140 5140 5244.8979 3 1996 8450 2450 6000 6122.4489

===== ==== ===== =========20380 4640 15740 16061.2240

5.3 - Comando RETAIN

Comando de Definição;

Normalmente o SAS inicializa todas as variáveis criadas no DATAStep, com o valor “missing”, a cada iteração do DATA Step;

O Comando RETAIN define ou indica uma variável com um valorinicial, e determina que ela não seja reinicializada a cada iteração doDATA Step;

Deve ser posicionado sempre antes do comando que irá utilizar avariável definida;

RETAIN <variável> [valor inicial] . . . ;

Ex.20:

Page 49: Apostila Sas

495.4 - Comando IF-THEN/ELSE

Comando de Execução;

Comando que condiciona a execução de um outro comandoSAS, de acordo com alguma expressão, que determina umacondição;

Se a expressão, que determina a condição, for verdadeira, seráexecutado o comando que vier após o THEN. Se a condiçaofor falsa, será executado o comando que vier após o ELSE.Somente um comando após o THEN e do ELSE

IF <expressão> [THEN] <comando> ;[ELSE] <comando> ;

expressão Combinação de variáveis com operadores de comparação e/ouoperadores lógicos que determinam uma condição.

comando Comando do SAS que será executado de acordo com o resultado dacondição.

Operadores de Comparação Operadores Lógicos

LT < menor que OR | ou, um ou outroGT > maior que AND & e, ambosEQ = igual a NOT ~ não, negação LE <= menor ou igual aGE => maior ou igual aNE ~= não é igual (diferente)NL não é menorNG não é maiorIN esta no conjunto

Page 50: Apostila Sas

50

LIBNAME DAD "C:\CURSO\SAS" ;DATA DAD.DADOS82 ;

INFILE "A:\DADOS\CADASTRO.TXT" LRECL=132;INPUT NOME $ 30. END $ 30. ANO 4. ;IF ANO=1982 ;

RUN;

DATA NOTA ;INFILE “A:\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;

Arquivo: NOTAS.TXT

01 02 03 04 05 06 07 08 09 10 11

V I V I A N E 2 . 5

L I D I A 9 . 5

P A U L O 6 . 8

C L A U D I O 6 . 8

L U I Z 5 . 5

PROC PRINT NOOBS ;RUN ;

The SAS System

NOME NOTA CONCEITO

VIVIANE 2.5 ALIDIA 9.5 APAULO 4.5 ACLAUDIO 6.8 ALUIZ 5.5 A

O que está errado ???

DATA NOTA ;INFILE “A:\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;

Ex.21: Só o comando IF

Ex.22: Operador de Comparação

Page 51: Apostila Sas

51

LIBNAME TESTE "A:\" ;DATA TESTE.CLASSE ; INFILE “C:\ESCOLA\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

P A U L A 1 1 1 1 . 6 0

F L A V I A 1 1 5 1 . 6 5

M A R C O S 2 1 1 1 . 6 0

L U I S 2 1 4 1 . 6 0

PROC PRINT NOOBS ;VAR NOME CLASSE ;

RUN ;The SAS System

NOME CLASSE

PAULA 100FLAVIA 300MARCOS 200LUIS 300

IF ESTADO="RJ" OR ESTADO="SP" THEN REGIAO="SUDESTE" ;

IF ESTADO="SP" AND CIDADE="CAMPINAS" THEN CEP="13000-000" ;

Ex.23: Operador Lógico

Ex.24: Operador Lógico

Page 52: Apostila Sas

52

PROC PRINT DATA=ARQ.CADASTRO;WHERE NOME CONTAINS “SILVA”;

RUN;

DATA TESTE;SET ARQ.CADASTRO;WHERE SALARIO BETWEEN 1000 AND 3000;

RUN;

5.5 - Comando WHERE;

Comando de Execução;

Comando especial que pode ser executado em DATA Step e em PROCStep;

Comando que possui como única ação, selecionar registros, se uma condiçãofor verdadeira;

Comando WHERE não pode ser utilizado com variáveis que estão sendocriadas no DATA Step por comandos de atribuição, ou pelo comandoINPUT;

Além dos operadores de comparação e lógicos do IF, existe algunsoperadores especiais no WHERE.

WHERE <expressão> ;

expressão Combinação de variáveis com operadores de comparação,operadores lógicos e/ou operadores especiais, que determinamuma condição. Se for verdadeira, o registro é selecionado,processado e salvo. Se for falso o registro é descartado.

Alguns operadores especiais

BETWEEN-AND entre um e outro

CONTAINS ? Contêm

Ex.25:

Page 53: Apostila Sas

53

DATA TRABALHO ;INFILE "A:\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 ;

PROC PRINT NOOBS ;RUN ;

The SAS System

NOME DEP_NO COM SALARIO DEP SAL

CARLOS 201 1500 1500 VENDAS 3000ELIANE 101 . 1800 ADMINI 1800ALVARO 101 . 3800 ADMINI 3800FATIMA 201 500 1500 VENDAS 2000

5.6 - Comandos DO/END

Comando de Execução;

Comando que define a execução de um bloco de comandos do SAS;

Todos os comandos existentes entre o comando DO e o comandoEND, deverão ser executados primeiro;

Comandos DO e END podem ser usados para executar um grupo decomandos quando se encontra uma condição, normalmente, paraampliar o comando IF-THEN/ELSE.

IF <expressão> THEN DO; <comandos> ; END ;

Ex.26:

Page 54: Apostila Sas

54

DATA TRABALHO ;INFILE "A:\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 ;

PROC PRINT NOOBS ;RUN ;

The SAS System

NOME DEP_NO COM SALARIO DEP SAL

CARLOS 201 1500 1500 VENDAS 3000ELIANE 101 . 1800 ADMINISTRATIVO 1800ALVARO 101 . 3800 ADMINISTRATIVO 3800FATIMA 201 500 1500 VENDAS 2000

5.7 - Comando LENGTH

Comando de Definição;

Comando que define uma variável, o tipo e o tamanho em bytes.

Deve ser posicionado sempre no início do Data Step, antes da utilizaçãoda variável.

LENGTH variável [$] tamanho. . .

variável [$] tamanho ;

variável Nome da variável que deseja definir;

$ Caracter opcional que indica que a variável só irá conterdados alfanuméricos. Sem o $, significa que a variável seránumérica;

tamanho Tamanho em bytes da variável.Ex.27:

Page 55: Apostila Sas

55

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

DO I = 1 TO 120 ; ( 120 vezes )

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

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

DO I = 1 TO 10 WHILE (X < Y) ; ( 10 vezes ou enquanto X < Y )

DO I = 2 TO 20 BY 2 UNTIL ((X/3)>Y) ; ( 10 vezes ou até (X/3)>Y )

DO I = 10 TO 0 BY -1 WHILE (MES="JAN") ; ( 11 vezes ou enquanto o MES=”JAN” )

5.8 - Comando DO/END Iterativo

Comando de Execução;

Comando utilizado para repetir um grupo de comandos “n” vezes.

DO <indice>=<início>TO<fim> [BY] <cont> [WHILE/UNTIL] <(expressão)>;

indice Variável auxiliar que armazena o valor da contagem no "loop".

início Valor inicial do "loop".

fim Valor final do "loop".

cont Valor opcional que indica o incremento do "loop".

expressão Campo opcional que representa uma combinação de variáveisque determina uma condição para execução do "loop", entreparênteses.

Ex.28: Interativo

Page 56: Apostila Sas

56

DATA ;X=0; N=0;DO WHILE (N LE 5) ; ( Avaliado no início. Executa 6 vezes )

X=X+N**2 ;N=N+1 ;

END ;RUN;PROC PRINT;RUN;

SAS System

X N

55 6

5.9 - Comando DO WHILE

Comando de Execução;

Comando que repete um grupo de comandos enquanto umaexpressão for verdadeira;

A expressão é avaliada no início do “loop”;

Se a expressão for falsa, os comandos dentro do “loop” nunca serãoexecutados.

DO WHILE <(expressão)> ; <== ( Avaliação no início ). . .

END;

expressão Combinação de variáveis que determina uma condição para aexecução do "loop", entre parênteses.

Ex.29:

Page 57: Apostila Sas

57

DATA ;X=0; N=0;DO UNTIL (N GT 5) ;

X=X+N**2 ;N=N+1 ;

END ; ( Avaliado no fim. Executa 6 vezes )RUN;PROC PRINT;RUN;

SAS System

X N

55 6

5.10 - Comando DO UNTIL

Comando de Execução;

Comando que repete um grupo de comandos até a expressão serverdadeira;

A expressão é avaliada no fim do “loop”;

Se a expressão for falsa, os comandos dentro do “loop” serãoexecutados, pelo menos, uma vez.

DO UNTIL <(expressão)> ; . . .

END;<== ( Avaliação no fim )

expressão Combinação de variáveis que determina uma condição para aexecução do "loop", entre parênteses.

Ex.30:

Page 58: Apostila Sas

58

DATA CLASSE ;INFILE "C:\ALUNOS\CADASTRO.DAT" ;INPUT NOME $ 15. SEXO $ 1. END $ 30. CEP $ 8. RG $ 10. CIC $ 11. MAT $ 8. INST $ 10. PESO 3. ALT 3. ESTCIV $ 1. ;

RUN;DATA SUBARQ1 ;

SET CLASSE ;DROP PESO ALT ESTCIV ;

RUN;DATA SUBARQ2 ;

SET CLASSE ;KEEP NOME END CEP ;

RUN;

5.11 - Comandos DROP e KEEP

Comandos de Definição;

O comando DROP elimina variáveis de um arquivo SAS;

O comando KEEP mantém variáveis em um arquivo SAS;

Pode ser posicionado em qualquer lugar de um Data Step;

Esses dois comandos são exclusivos, ou se usa o comando DROP,ou se usa o comando KEEP, na lógica de um progama SAS.

DROP <variável> <variável> . . . ;

KEEP <variável> <variável> . . . ;

variável Nome de uma variável que será eliminada, ou será mantida emum arquivo SAS (Data Set).

Ex.31:

Page 59: Apostila Sas

59

DATA CLASSE ;INFILE "C:\ALUNOS\CADASTRO.DAT" ;INPUT NOME $ 15. SEXO $ 1. END $ 30. CEP $ 8. RG $ 10. CIC $ 11. MAT $ 8. INST $ 10. PESO 3. ALT 3. ESTCIV $ 1. ;

RUN;DATA SUBARQ1 (DROP=PESO ALT ESTCIV) ;

SET CLASSE ;RUN;DATA SUBARQ2 ;

SET CLASSE (KEEP=NOME END CEP);RUN;

5.12 - Opções de Arquivos SAS

Todo arquivo com estrutura SAS possui opções de configuração que sãoespecificados após cada arquivo, entre parênteses;

São opções do arquivo, que tem sua ação vinculada ao comando aonde oarquivo está sendo especificado;

Normalmente quando se especifica um arquivo, a ação, ou será de leiturados dados, ou de gravação dos dados.

<arquivo SAS> [( <opção> <opção> . . . )] ;

Opções KEEP e DROP

<arquivo SAS> (DROP=<variável> <variável> . . ) ;<arquivo SAS> (KEEP=<variável> <variável> . . ) ;

- Ação vinculada ao comando DATA (gravação de dados)

DROP Não gravaKEEP Somente grava

- Ação vinculada ao comando SET (Leitura de dados)

DROP Não leiaKEEP Somente leia

Ex.32:

Page 60: Apostila Sas

60

DATA PRODUTO ; INFILE “D:\DADOS\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 06 07 08 09

1 7 1 0 5 2 5

4 2 5 0 - 6

3 1 5 1 0 0

2 4 0 3

5 1 1 5

PROC PRINT NOOBS ;RUN ;

The SAS System

DEP UNIDADE CUSTO CUSTOUNI

17 10 525 52.531 5 100 20.05 1 15 15.0

5.13 - Comando DELETE

Opção de Execução;

Comando que informa ao SAS, que deve ser parado o processamento doregistro atual, não gravar os dados do registro no Data Set, e retornarimediatamente para o início do Data Step para uma nova iteração;

Este comando não permite gravar o registro lido no arquivo SAS;

Normalmente esse comando é utilizado junto com o comandoIF/THEN/ELSE, que determina uma condição para execução docomando DELETE.

IF <expressão> THEN DELETE ;

Ex.33:

Page 61: Apostila Sas

615.14 - Comando OUTPUT

Comando de Execução;

O comando OUTPUT funciona de duas formas:

-Determina ao SAS que o registro que está sendo processadodeve ser gravado no arquivo, imediatamente, e não, ao finaldo Data Step (OUTPUT implícito).

-Determina para qual arquivo SAS deve ser gravado o registroque está sendo processado.

Normalmente é utilizado junto com o comando IF-THEN/ELSE deacordo com uma condição;

ATENÇÃO! Ao se codificar um comando OUTPUT no programa,o SAS desliga o OUTPUT implícito ao final do DATA Step. A açãode salvar o dado fica por conta do programador.

OUTPUT ;

IF <expressão> THEN OUTPUT ;

IF <expressão> THEN OUTPUT <arquivo> ;

expressão Combinação de variáveis e valores que determinam umacondição a ser testada.

arquivo Nome de um arquivo SAS, que já tenha sido especificado ecriado pelo comando DATA.

Page 62: Apostila Sas

62

LIBNAME K1 "A:\" ;DATA K1.VARIACAO ;

INFILE “A:\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 13 14 15 16 17 18

R O S A N A 5 0 1 5 0 0

P A U L O 1 0 1 . 1 1 0 0 0

M A R I A 1 0 1 . 1 5 8 0 0

PROC PRINT ; RUN ; The SAS System

OBS NOME NIVEL SALARIO SAL

1 PAULO 10 1000 11002 PAULO 10 1000 22003 MARIA 10 800 9204 MARIA 10 800 1840

LIBNAME ARQ "C:\ALUNOS" ;DATA ARQ.HOMENS ARQ.MULHERES ;SET ARQ.CADASTRO ;IF SEXO="F" THEN OUTPUT ARQ.MULHERES ;

ELSE OUTPUT ARQ.HOMENS ;

PROC PRINT DATA=ARQ.MULHERES ; VAR NOME ; RUN ;PROC PRINT DATA=ARQ.HOMENS ; VAR NOME ; RUN ;

Ex.34:

Ex.35:

Page 63: Apostila Sas

633º LABORATÓRIO

Utilização dos comandos de programação em DATA Step

A partir do arquivo SAS CADASTRO, gerado no 1º laboratório (para abrí-lo, utilize o comandoSET) :

1 - Monte um programa que crie um novo arquivo SAS, temporário, somente com osdados das pessoas do sexo feminino e casadas. Gere um relatório com os dados dessearquivo;

Códigos de ESTADO CIVIL: (1) solteiro (2) casado (3) separado.

OBS: Utilize o comando IF-THEN/ELSE para fazer a seleção.

2 - Monte um programa que crie um novo arquivo SAS, temporário;

- Crie três variáveis novas que servirão como acumuladoras do número depessoas casadas (CAS), solteiras (SOL) e separadas (SEP), a partir da análiseda variável ESTADO CIVIL

- Gere um relatório com os dados deste arquivo;

OBS: Utilize o comando RETAIN para permitir a acumulação. Utilize ocomando de atribuição (=) para criar as variáveis e simular um contador. Utilizeo comando IF-THEN/ELSE para distinguir o ESTADO CIVIL das pessoas.O último registro processado terá o valor total da distribuição do ESTADOCIVIL

3 - Monte um programa que crie um novo arquivo SAS, temporário;

- Crie uma variável numérica constante (FAM) igual a 1.1;- A partir da análise da variável FILHOS , crie uma nova variável (DEP) ealtere a variável SALARIO :

Se possui filhos: - DEP terá o valor "COM DEPENDENTES" - SALARIO terá o resultado da multiplicação da variável

SALARIO pela variável FAM;

Se não possui filhos: - DEP terá o valor "NÃO POSSUI DEPENDENTES"

- Gere um relatório com os dados deste arquivo;

OBS: Utilize o comando de atribuição (=) para criar e alterar as variáveis.Utilize o comando IF-THEN/ELSE, interagindo com o comando DO/END

Page 64: Apostila Sas

64para se distinguir se possui ou não filhos e permitir a execução de mais de umcomando. Preste atenção aos resultados, verifique se está tudo correto.

4 - Monte um programa que crie um novo arquivo SAS, temporário;

- Selecione as pessoas que ganham menos de R$ 2.000,00;- Aumente o valor do salário dessas pessoas em 10% até 12 vezes (relativos a12 meses), ou até o salário atingir um valor superior a R$ 4.000,00. Utilize aequação:

SALARIO=SALARIO*1.1

- Salve os valores incrementados,um a um;- O arquivo só deve conter as variáveis: NOME, EMPRESA, FUNCAO eSALARIO ;- Gere um relatório com os dados deste arquivo;

OBS: Utilize o comando IF-THEN/ELSE para selecionar as pessoas. Utilizeo comando DO/END Iterativo para aumentar o salário. Utilize o comandoKEEP ou DROP para determinar quais as variáveis que serão arquivadas.

5 - Monte um programa que crie três novos arquivos SAS, temporários, (SA, LTDAe INSTITUTO) ;

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

- Elimine dos três arquivos as pessoas que ocupam FUNCAO de "DIRETOR"e "GERENTE";

- Gere os relatórios desses três arquivos;

OBS: Utilize o comando DATA, para criar os arquivos. Utilize o comandoIF/THEN/ELSE, para selecionar e eliminar os dados. Utilize o comandoOUTPUT para direcionar a gravação dos registros.

Page 65: Apostila Sas

656 - Monte um programa com um único DATA Step que crie seis novos arquivos SAS,permanentes, (PESSOAL , TRABALHO , FAMILIA, SOLTEIRO, CHEFE e SUB)no diretório c:\curso\sas ;

- Cada arquivo deverá conter os seguintes dados:

PESSOAL Variáveis: NOME, SEXO, IDADE, PESO,ALTURA, ANIVERSARIO, ESTADO CIVIL,FILHOS, RG e CPF

TRABALHO Variáveis: NOME, RG, CPF, EMPRESA,FUNCAO, ADMISSAO, SALARIO e TIPO DEEMPRESA

FAMILIA Pessoas que possuam filhos;

SOLTEIRO Pessoas solteiras;

CHEFE Pessoas que ocupam cargo de chefia (GERENTEe DIRETOR);

SUB Pessoas que não ocupam cargos de chefia;

- Gere relatórios para ver o conteúdo de cada arquivo;

7 - Com os dados do arquivo CADASTRO, monte um programa SAS que gere umarquivo temporário com as pessoas entre 20 e 30 anos, sendo que, cada pessoaselecionada receberá um bonus de R$ 3.500,00 ao salário anual, até completar 30 anos.Crie uma variável nova (BONUS) com o valor total de bonus recebido por cada pessoaselecionada, e uma variável (NUM) com o número de vezes que a pessoa recebeu obonus;

- Utilize o comando WHERE com um operador especial para selecionar osdados.

- Utilize o comando DO WHILE ou UNTIL para processar a variável com ovalor total de bonus recebido;

- Não altere a variável IDADE do arquivo. Crie uma nova variável auxiliar como valor da idade incrementada.

- Gere um relatório com as variáveis: NOME, IDADE, SALARIO, BONUS, NUM

OBS: Atenção à lógica do WHILE ou UNTIL, para que o programa não entre em“loop”.

Page 66: Apostila Sas

666 - FUNÇÕES DO SAS

6.1 - INTRODUÇÃO

Toda função representa a execução de uma determinada rotina que iráretornar um determinado valor.

Toda função SAS é recursiva. Função pode ser executada dentro de outrafunção, como parâmetro da função;

As funções no SAS, normalmente, fazem parte de um comando deatribuição e sempre são utilizadas em um DATA Step.

<variável> = <função>(OF argumento, argumento, . . . ) ;

variável Nome até no máximo 32 caracteres, aonde será armazenado ovalor retornado da execução da função.

função Palavra-chave que identifica a função a ser processada.

argumento Parâmetros de entrada para processamento da função.

OF Parâmetro opcional que indica o processamento num intervalode argumentos. Somente para as funções estatísticas.

Tipos de funções:- Funções de Tratamento de Caracter;- Funções de Tratamento de Data e Hora;- Funções Matemáticas;- Funções de Estatísticas Descritivas;- Funções Trigonométricas;- Funções Hiperbólicas;- Funções de Trucamento;- Funções para geração de Números Randômicos;- Funções de Probabilidade;- Funções Financeiras;- Funções de Macro;

Page 67: Apostila Sas

676.2 - Funções de Tratamento de Caracter

6.2.1 - Função UPCASE

Função que converte o conteúdo de uma variável ou expressãopara caracteres maiúsculos.

<variável>=UPCASE (argumento) ;

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função.

argumento Variável ou expressão caracter, cujo conteúdo será convertidopara letras maiúsculas.

6.2.2 - Função LOWCASE

Função que converte o conteúdo de uma variável ou expressãopara caracteres minúsculos.

<variável>=LOWCASE (argumento) ;

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função.

argumento Variável ou expressão caracter, cujo conteúdo será convertidopara letras minúsculas.

Page 68: Apostila Sas

686.2.3 - Função SUBSTR

Função que efetua a manipulação do conteúdo de umavariavel caracter.

<variável>=SUBSTR (arg1, arg2, [arg3]) ;

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função.

arg1 Primeiro argumento, especifíca a variável ou expressãocaracter cujo conteúdo será manipulado.

arg2 Segundo argumento, especifíca a posição inicial do conteúdoda variável, que sera manipulado.

arg3 Terceiro argumento, opcional, determina o número decaracteres do conteúdo da variável que se deseja manipular. Senão for especificado, a função pegará todos os caracteres, dovalor do segundo argumento até o final.

OBS: É possível manipular dados numéricos. Estes serãoautomáticamente convertidos para caracter, mas atenção, todocampo númerico é alinhado pela direita e possui um formatopadrão de 12 “dígitos”, no mínimo, isso equivale a 12caracteres resultantes, na conversão.

Número: 3 5

Caracter: 3 5

Page 69: Apostila Sas

696.2.4 - Função COMPRESS

Função que retira caracteres, individualmente, de umargumento.

<variável>=COMPRESS(arg1,[arg2]);

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função;

arg1 Primeiro argumento, especifíca a variável ou expressãocaracter cujo conteúdo será compactado;

arg2 Segundo argumento, opcional e entre aspas, especifíca um oumais caracteres que serão retirados, individualmente, doprimeiro argumento.

OBS:Se o segundo argumento não for especificado, a funçãoassumirá o “branco” como caracter “default” para ser retirado.

6.2.5 - Função LENGTH

Função que informa o tamanho, em bytes, do argumento.

<variável>=LENGTH(arg);

variável Nome até 32 caracteres que armazenará o resultado, numérico,do processamento da função;

arg Argumento, especifíca a variável ou expressão caracter cujoconteúdo será determinado o tamanho;

OBS: O Valor retornado pela função LENGTH, sempre seránumérico.

Page 70: Apostila Sas

70

Exemplo que trabalha com o arquivo SAS, CADASTRO. Este arquivopossui as variaveis: NOME, ENDERECO, SEXO, RG, CIC. Deseja-seseparar da variável RG o valor numérico do valor caracter queidentifica a Secretaria de Segurança Pública, armazenado-os em duasnovas variáveis: RG_NUM e RG_SSP.

DATA NOVO ; INFILE “C:\ID\RG.DAT”; INPUT RG $ 18. ; RG1=0 ; RG2=0 ; AUX1=COMPRESS ( RG ) ; AUX2=LENGTH ( AUX1 ) ; DO I=1 TO AUX2 ; AUX3=SUBSTR ( AUX1, I, 1 ) ; IF ("0" LE AUX3 LE "9") THEN RG1=RG1+1 ;

ELSE RG2=RG2+1 ; END ; RG_NUM=SUBSTR ( AUX1, 1, RG1 ) ; RG_SSP=SUBSTR ( AUX1, RG1+1, RG2 ); RG_SSP = UPCASE ( RG_SSP ) ; DROP AUX1 AUX2 AUX3 I RG1 RG2 ;RUN;

Arquivo: RG.TXT01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

5 8 4 1 6 6 s s p / d f

2 3 4 s s p / s p

2 2 3 9 7 4 8 8 s s p / r g

PROC PRINT NOOBS ;VAR RG_NUM RG_SSP ;

RUN ;

SAS

RG_NUM RG_SSP

584166 SSP/DF234 SSP/SP22397488 SSP/RG

Ex.37:

Page 71: Apostila Sas

71

DATA PALAVRA;REGIAO=”FRANÇA#ALEMANHA#ESPANHA#ITÁLIA”;PAIS=SCAN(REGIAO,1,”#”); OUTPUT ;PAIS=SCAN(REGIAO,2,”#”); OUTPUT ;PAIS=SCAN(REGIAO,3,”#”); OUTPUT ;PAIS=SCAN(REGIAO,4,”#”); OUTPUT ;

RUN;PROC PRINT; VAR PAIS; RUN;

The SAS System

PAISFRANÇAALEMANHAESPANHAITÁLIA

6.2.6 - Função SCAN

Função que retorna caracteres de acordo com a posiçãorelativa de um caracter específico.

<variável>=SCAN (arg1, arg2, [arg3]) ;

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função.

arg1 Primeiro argumento, especifíca a variável ou expressãocaracter cujo conteúdo será manipulado.

arg2 Segundo argumento, determina a posição dos caracteres, quese deseja, em relação a um caracter específico;

arg3 Terceiro argumento, opcional e entre aspas determina ocaracter que servirá como limite entre os caracteres desejados.Se não for especificado, todos os caracteres especiais serãolimitrófes.(! @ # $ % & * - , ; branco).

OBS: O resultado da função SCAN será armazenado numavariável com o tamanho de 200 bytes, por “default”.

Ex.38:

Page 72: Apostila Sas

72

DATA POSICAO;REGIAO=”FRANÇA#ALEMANHA#ESPANHA#ITÁLIA”;LOCAL=INDEX(REGIAO,”ESPANHA”); OUTPUT ;LOCAL=INDEX(REGIAO,”NHA”); OUTPUT ;LOCAL=INDEX(REGIAO,”I”); OUTPUT ;LOCAL=INDEX(REGIAO,”ING”); OUTPUT ;

RUN;PROC PRINT; VAR LOCAL; RUN;

The SAS System

LOCAL171325 0

6.2.7 - Função INDEX

Função que retorna, um valor numérico, que representa aprimeira posição de um determinado caracter dentro doargumento.

<variável>=INDEX (arg1, arg2) ;

variável Nome até 32 caracteres que armazenará o resultado, numérico,do processamento da função.

arg1 Primeiro argumento, especifíca a variável ou expressãocaracter cujo conteúdo será manipulado.

arg2 Segundo argumento, determina o caracter, entre aspas, quese deseja localizar no primeiro argumento.

OBS: Se o caracter especificado não for encontrado a funçãoindex retornará o valor zero..

Ex.39:

Page 73: Apostila Sas

73

Exemplo que trabalha com o arquivo SAS, CADASTRO. Este arquivopossui as variaveis: NOME, ENDERECO, SEXO, RG, CIC. Deseja-seseparar da variável RG o valor numérico do valor caracter queidentifica a Secretaria de Segurança Pública, armazenado-os em duasnovas variáveis: RG_NUM e RG_SSP.

DATA NOVO ; LENGTH AUX $ 6; INFILE “C:\ID\RG.DAT”; INPUT RG $ 18. ; RG_NUM=SCAN( RG, 1,”S” ) ; AUX=SCAN( RG, 2, “/” ); RG_SSP=”SSP/” || UPCASE(AUX );RUN;

Arquivo: RG.TXT01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

5 8 4 1 6 6 s s p / d f

2 3 4 s s p / s p

2 2 3 9 7 4 8 8 s s p / r g

PROC PRINT NOOBS ;VAR RG_NUM RG_SSP ;

RUN ;

SAS

RG_NUM RG_SSP

584166 SSP/DF234 SSP/SP22397488 SSP/RG

Ex.40: Solução Alternativa 1

Page 74: Apostila Sas

74

Exemplo que trabalha com o arquivo SAS, CADASTRO. Este arquivopossui as variaveis: NOME, ENDERECO, SEXO, RG, CIC. Deseja-seseparar da variável RG o valor numérico do valor caracter queidentifica a Secretaria de Segurança Pública, armazenado-os em duasnovas variáveis: RG_NUM e RG_SSP.

DATA NOVO ; INFILE “C:\ID\RG.DAT”; INPUT RG $ 18. ; RG=UPCASE(RG); IF INDEX(RG,”S”)>0; RG_NUM=SUBSTR(RG, 1, INDEX(RG,”S” )-1) ; RG_SSP=SUBSTR(RG, INDEX(RG,”S”));RUN;

Arquivo: RG.TXT01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

5 8 4 1 6 6 s s p / d f

2 3 4 s s p / s p

2 2 3 9 7 4 8 8 s s p / r g

PROC PRINT NOOBS ;VAR RG_NUM RG_SSP ;

RUN ;

SAS

RG_NUM RG_SSP

584166 SSP/DF234 SSP/SP22397488 SSP/RG

Ex.41: Solução Alternativa 2

Page 75: Apostila Sas

756.3 - Funções de Truncamento

6.3.1 - Função INT

Função que retorna com o valor inteiro de uma variável ou deuma expressão.

<variável> = INT ( argumento ) ;

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função.

argumento Variável ou expressão numérica, da qual se deseja obter ovalor inteiro.

6.3.2 - Função ROUND

Função que retorna um valor arredondado de uma variável ouexpressão numérica.

<variável> = ROUND ( arg1, [arg2] ) ;

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função.

arg1 Variável ou expressão numérica da qual se deseja arredondar.

arg2 Argumento opcional, especifica o múltiplo do arredondamentoe a posição numérica aonde será feita o arredondamento ( 1,10, . . . ou 0.1, 0.01, . . . ). Se não for especificado, a funçãoarredondará para um valor inteiro.

Page 76: Apostila Sas

76

DATA DADOS ; INFILE “A:\NUMEROS.DAT”; 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: NUMEROS.DAT

01 02 03 04 05 06 07

3 2 6 . 5 4

1 9 7 7 . 0 9

5 5 8 . 8 8

1 5 8 8 . 2 9

PROC PRINT DOUBLE;RUN ;

The SAS System 13:24 Monday, January 22, 1996

OBS X TRUNCA INTEIRO DEZENA CENTENA DECIMO CENTES MULT5

1 326.54 326 327 330 300 326.5 326.54 325

2 1977.09 1977 1977 1980 2000 1977.1 1977.09 1975

3 558.88 558 559 560 600 558.9 558.88 560

4 1588.29 1588 1588 1590 1600 1588.3 1588.29 1590

Ex.42:

Page 77: Apostila Sas

776.4 - Funções Estatísticas Descritivas

6.4.1 - Função SUM

Função que efetua um somatório de valores entre variáveisnuméricas, para cada registro de dados.

<variável> = SUM ( [OF] var1, var2, . . . varn ) ;

variável Nome até 32 caracteres que armazenará o resultadodo processamento da função.

var1, var2, . . . varn Nome das variáveis numéricas que se deseja efetuarum somatório.

OF Opcional, identifica um intervalo de variáveis.

6.4.2 - Função MEAN

Função que efetua uma média entre os valores de variáveisnuméricas, para cada registro de dados.

<variável> = MEAN ( [OF] var1, var2, . . ., varn ) ;

variável Nome até 32 caracteres que armazenará o resultadodo processamento da função.

var1, var2, . . . varn Nome das variáveis numéricas que se deseja efetuaruma média.

OF Opcional, identifica um intervalo de variáveis.

Page 78: Apostila Sas

78

LIBNAME T "C:\" ;DATA T.TEMP ;

INFILE “C:\REGIAO\TEMP.DAT”;INPUT (T1-T6) (4.) ;TEMPSOMA = SUM ( OF T1-T6 ) ;TEMPMED = MEAN ( OF T1-T6 ) ;

RUN;

Arquivo: TEMP.DAT

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

2 3 . 5 2 5 . 2 2 4 . 8 2 5 . 7 2 5 . 8 2 2 . 0

1 8 . 5 1 7 . 4 1 8 . 9 1 8 . 9 2 0 . 5 2 0 . 8

PROC PRINT DATA=T.TEMP DOUBLE NOOBS ;RUN ;

The SAS System 14:18 Monday, January 22, 1996

T1 T2 T3 T4 T5 T6 TEMPSOMA TEMPMED

23.5 25.2 24.8 25.7 25.8 22.0 147 24.5000

18.5 17.4 18.9 18.9 20.5 20.8 115 19.1667

Ex.43:

Page 79: Apostila Sas

796.5 - Funções de Tratamento de Data e Hora

6.5.1 - Função MDY

Função que gera uma data a partir de valores de dia, mês eano

<variável>=MDY(mm, dd, yyyy);

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função;

mm Valor numérico que representa o mês;

dd Valor numérico que representa o dia;

yyyy Valor numérico que representa o ano.

6.5.2 - Funções: DAY, MONTH , YEAR

Funções que extraem de uma data o dia, o mês e o anorespectivamente.

<variável>=DAY(data);<variável>=MONTH(data);<variável>=YEAR(data);

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função;

data Valor que representa uma data SAS.

Page 80: Apostila Sas

806.5.3 - Função TODAY

Função que retorna a data atual do ambiente deprocessamento. Não possui argumentos.

<variável>=TODAY();

6.5.4 - Função TIME

Função que retorna a hora atual do ambiente deprocessamento. Não possui argumentos.

<variável>=TIME();

6.5.5 - Funções: HOUR, MINUTE e SECOND

Funções que extraem de um valor tempo a hora, minuto esegundo respectivamente.

<variável>=HOUR(tempo);<variável>=MINUTE(tempo);<variável>=SECOND(tempo);

variável Nome até 32 caracteres que armazenará o resultado doprocessamento da função;

tempo Valor que representa o tempo no formato SAS.

Page 81: Apostila Sas

816.6 - Funções MACRO

6.6.1 - Função %SYSFUNC

Função macro que permite executar funções de DATA Stepem qualquer parte do programa SAS.

%SYSFUNC(função, [formato]);

funçao Função de DATA Step que será utilizada;

formato Argumento opcional que especifica um formato para oresultado da função.

Page 82: Apostila Sas

82

DATA ANIVERSARIO;INPUT DIA MES ANO;ANIV=MDY(MES,DIA,ANO);IDADE_ANO=INT((TODAY()-ANIV)/365.25);IDADE_DIA=”01jan2000"d - ANIV;

CARDS;10 11 197625 04 200014 08 193408 01 196703 03 1955;RUN;

TITLE1 “Relatório de Idades”;TITLE2 “Em relação a data de hoje: %SYSFUNC(TODAY(), ddmmyy10.)”;

PROC PRINT;RUN;

Relatório de Idades Em relação a data de hoje: 04/04/2006

IDADE_ IDADE_ Obs DIA MES ANO ANIV ANO DIA

1 10 11 1976 6158 29 8452 2 25 4 2000 14725 5 -115 3 14 8 1934 -9271 71 23881 4 8 1 1967 2564 39 12046 5 3 3 1955 -1765 51 16375

Ex.44: Tratamento de DATA

Page 83: Apostila Sas

834º LABORATÓRIO

Utilizar as funções do SAS.

1 - A partir dos dados do arquivo CADASTRO, monte um programa que crie um novo arquivo SAS,temporário, e as novas variáveis:

DV Conterá os dois últimos caracteres da variável CPF;INTEIRO Conterá o valor inteiro da variável SALARIO;ARR1 Conterá o arredondamento da expressão SALARIO*0.8235 para um valor com

duas casas decimais;ARR2 Conterá o arredondamento da expressão SALARIO*0.8235 para um valor

inteiro;ARR3 Conterá o arredondamento da expressão SALARIO*0.8235 para um valor

múltiplo de 5;T_EMP Conterá o tempo do funcionário na empresa, em anos;APOS Conterá a data que o funcionario poderá se aposentar, sabendo-se que a idade

para solicitar aposentadoria é com 65 anos;NO_INV Conterá a o formato “nome sobrenome” da variável NOME, que atualmente

está como “sobrenome,nome”;

- Gere um relatório para verificar os resultados;

OBS: Utilize as funções: SUBSTR, INT, ROUND, YEAR, MDY, INDEX ou SCAN e ooperador ||.

2 - A partir dos dados do arquivo CADASTRO, monte um programa que crie um arquivo SAS,temporário, e as novas variáveis novas:

SAL_FAM Salário família, só para quem possui filhos. Será o resultado doSALARIO*(1+(FILHOS*0.05)) ;

SAL_COM Salário comissionado, só para quem possui cargo de chefia. Será o resultado doSALARIO*1.2 ;

SAL_SOM Somatório de salários. Será o resultado do somatório entre as variáveis: SAL,SAL_FAM e SAL_COM;

SAL_MED Média dos salários. Será o resultdo da média entre as variáveis: SAL,SAL_FAM e SAL_COM ;

- Gere um relatório para visualizar os resultados;

OBS: Utilize as funções SUM e MEAN, para somar e tirar a médias entre as variáveis,respectivamente.

Page 84: Apostila Sas

847 - Comandos de Configuração

7.1 - Comando OPTIONS

Comando definição que altera e configura opções de performance, de impressão, devisualização do ambiente SAS, de comunicação, etc

OPTIONS opt1 opt2 . . . optn ;

Algumas opções:

COMPRESS=NO Opção que especifica a compactação dos dados na geração de umarquivo Data set ( YES ou CHAR/BIN/NO );

DEVICE=WIN Opção que especifica um "driver" para impressão ou saída de relatório;

OBS=MAX Opção que especifica qual será o último registro a ser processado;

FIRSTOBS=1 Opção que especifica qual será o primeiro registro a ser processado;

(NO)DATE Opção que determina a “impressão” ou não, da data nos relatórios;

(NO)NUMBER Opção que determina a “impressão” ou não, do número da página;

PAGENO= Opção que especifica a numeração inicial das paginas de “OUTPUT”,para cada execução;

LINESIZE= Opção que especifica o tamanho da linha de “impressão” do relatório(número de colunas);

PAGESIZE= Opção que especifica o tamanho da pagina de “impressão” (número delinhas);

ERRORS=20 Opção que especifica o número máximo de erros a serem exibidos no“LOG”;

(NO)REPLACE Opção que determina a sobreposição ou não, dos dados de um arquivo;

SORTSIZE= Opção que especifica a quantidade de memória que o procedimentoSORT poderá utilizar (em bytes). No windows: 66MBytes;

MEMSIZE= Opção que especifica a quantidade de memória que o sistema SASpoderá utilizar para qualquer processamento. No windows: livre;

Page 85: Apostila Sas

85

LIBNAME ARQ "C:\SAS" ;OPTIONS COMPRESS=YES DEVICE=WIN PS=66 LS=132 NODATE ;DATA ARQ.OPT ;

SET ARQ.DADOS ;<comando><comando> . .

.PROC PRINT ;RUN ;

SERÁ GERADO UM ARQUIVO COMPACTADO E, UM RELATÓRIO COM 66LINHAS E 132 COLUNAS POR PÁGINA, SEM A IMPRESSÃO DA DATA NOCABEÇALHO, NO AMBIENTE WINDOWS.

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

O PROCEDIMENTO SORT PODERÁ UTILIZAR ATE 200MBYTES DEMEMÓRIA PARA PROCESSAR E SERÁ GERADO UM RELATÓRIO COM 60 LINHASE 132 COLUNAS POR PÁGINA, NA IMPRESSORA PADRÃO DO WINDOWS.

Ex.45:

Ex.46:

Page 86: Apostila Sas

86

DATA ROTULO ;INFILE “C:\CADASTRO\ROTULO.DAT”;INPUT NOME $6. @8 ALT 4.1 @13 PES 4.1 ;LABEL ALT = "ALTURA EM POLEGADAS" PES = "PESO EM LIBRAS" ;

RUN;Arquivo: ROTULO.DAT

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16

P A U L O 5 9 . 0 9 9 . 5

M A R C I O 5 7 . 3 8 3 . 0

S O N I A 5 1 . 3 5 0 . 5

PROC PRINT NOOBS SPLIT="" ;RUN ;

The SAS System

NOME ALTURA EM PESO EMPOLEGADAS LIBRAS

PAULO 59.0 99.5MARCIO 57.3 83.0SONIA 51.3 50.5

7.2 - Comando LABEL

Comando de Definição, utilizado para atribuir rótulos descritivos asvariáveis;

Utilizado para melhorar a aparência de um relatório , pode associar rótuloscom no máximo 256 caracteres;

Este comando pode ser utilizado em Data Step's e Proc Step's.

- DATA Step Permante, armazenado na estrutura do arquivo;- PROC Step Temporário, apenas para a execução do procedimento.

LABEL <variável> = "rótulo" . . . ;

variável Nome da variável na qual será associado um rótulo descritivo.rótulo Descrição, até 256 caracteres, associada a variável.

Ex.47:

Page 87: Apostila Sas

87

PROC PRINT DATA=ARQ.CADASTRO LABEL;VAR NOME DATA_ANIV SALARIO;LABEL DATA_ANIV=”Data de Aniversário”

SAL=”Salário”;FORMAT DATA_ANIV DDMMYY10.

SALARIO COMMAX12.2 ;RUN; The SAS System

Data de Obs NOME Aniversário Salário

1 SONTAS,MARCIO 16/04/1985 3.240,05 2 SERPA,MARCO 06/02/1941 26.540,67 3 LONAS,PAULO 24/07/1930 55.211,27 4 CERTO,MARCO 03/07/1979 3.121,80 5 BENTES,MARCO 06/06/1967 9.452,31 6 MARUEL,PAULO 18/07/1977 3.288,80 7 LUILA,ROSANE 27/03/1950 25.628,72 8 APARECIDO,ELIANE 17/03/1943 . 9 SAUL,ROSANE 16/03/1957 24.949,40 10 PISCO,ROSANE 04/09/1962 9.710,13

7.3 - Comando FORMAT

Comando de definição, serve para formatar variáveis e melhorar a aparênciados dados num relatório;

Este comando pode ser utilizado em Data Step's e Proc Step's.

- DATA Step Permante, armazenado na estrutura do arquivo;- PROC Step Temporário, apenas para a execução do procedimento.

FORMAT <variável> <formatow.d> . . . ;

variável Nome da variável que será formatada.formatow.d Nome do formato com o tamanho do campo (w) e número de

casas decimais (d), criado pelo próprio usuário ou dabiblioteca de formatos do SAS:

COMMAXw.d Formata com pontos e vírgula(Padrão Brasil);

DDMMYYw. Formata um campo data com“/”;

Ex.48:

Page 88: Apostila Sas

887.4 - Comando ODS

Output Delivery System (ODS), é um recurso especial para amanipulação dos resultados gerados pelos procedimentos SAS,permitindo a escolha de padrões de impressão e visualização,geração de arquivos e geração de documentos.

ODS <padrão> [opções] ;

. . .

ODS <padrão> CLOSE ;

padrões:

HTML Gera os resultados no formato html;PDF Gera os resultados no formato Adobe PDF;PS Gera os resultados no formato PostScript;RTF Gera os resultados no formato Rich Text, gerando resultados

para Microsoft Word;

opção genérica:

FILE= Especifica a localização e nome do arquivo gerado com opadrão.

OBS: Cada padrão de visualização possui suas próprias opções;

Page 89: Apostila Sas

89

ODS HTML FILE="C:\temp\teste.html" STYLE=minimal;

PROC PRINT DATA=ARQ.CADASTRO(OBS=10) LABEL ;VAR NOME DATA_ANIVERSARIO SALARIO ;LABEL DATA_ANIVERSARIO="Data de Aniversário"

SALARIO="Salário";FORMAT DATA_ANIV DDMMYY10.

SAL COMMAX12.2 ;RUN;

ODS HTML CLOSE;

The SAS System

Obs NOMEData de

AniversárioSalário

1 SONTAS,MARCIO 16/04/1985 3.240,05

2 SERPA,MARCO 06/02/1941 26.540,67

3 LONAS,PAULO 24/07/1930 55.211,27

4 CERTO,MARCO 03/07/1979 3.121,80

5 BENTES,MARCO 06/06/1967 9.452,31

6 MARUEL,PAULO 18/07/1977 3.288,80

7 LUILA,ROSANE 27/03/1950 25.628,72

8 APARECIDO,ELIANE 17/03/1943 .

9 SAUL,ROSANE 16/03/1957 24.949,40

10 PISCO,ROSANE 04/09/1962 9.710,13

Ex.49:

Page 90: Apostila Sas

908 - PROCEDIMENTOS ESTATÍSTICOS BÁSICOS

8.1 - Procedimento MEANS

Procedimento que produz relatórios com estatísticas descritivassimples para variáveis numéricas. O relatório gerado possui umaformatação padrão com algumas estatísticas: Frequência (N), Média(MEAN), Desvio Padrão (STD), valor máximo (MAX) e o valormínimo (MIN).

PROC MEANS [opções] ;CLASS <lista de variáveis> ;VAR <lista de variáveis> ;BY <lista de variáveis> ;OUTPUT <opções>;

opções DATA= Nome do arquivo SAS para ser processado;MAXDEC= Especifica o número de casas decimais (máximo 8);NOPRINT Opção para não gerar o relatório;

CLASS Especifica uma ou mais variáveis que possibilitam oagrupamento de dados. OBS: Não é necessário executar umPROC SORT, antes;

VAR Especifica as variáveis numéricas que serão analisadas peloprocedimento;

BY Especifica uma ou mais variáveis que possibilitam oagrupamento de dados. OBS: É necessário executar umPROC SORT, antes;

OUTPUT OUT= Nome do arquivo que armazenará os resultados doprocedimento;

<estatistica>= Nome das variáveis que irão armazenar o resultadoda estatística especificada (MEAN, SUM, MAX,MIN, etc). OBS: Na mesma ordem que aparece nocomando VAR.

Page 91: Apostila Sas

91

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC MEANS DATA=ARQ.MEDIA ;RUN ; The SAS System Variable N Mean Std Dev Minimum Maximum --------------------------------------------------------------------------------------------- IDADE 18 26.0000000 6.5079137 18.0000000 38.0000000 ALTURA 18 1.7227778 0.0769878 1.5800000 1.8500000 PESO 18 74.4444444 14.9123803 50.0000000 110.0000000 ----------------------------------------------------------------------------------------------------------

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC MEANS DATA=ARQ.MEDIA MAXDEC=2 N MEAN MAX MIN ;RUN ;

The SAS System Variable N Mean Maximum Minimum ---------------------------------------------------------------------------- IDADE 18 26.00 38.00 18.00 ALTURA 18 1.72 1.85 1.58 PESO 18 74.44 110.00 50.00 ----------------------------------------------------------------------------

LIBNAME ARQ "G:\KUSEL\SAS";PROC MEANS DATA=ARQ.MEDIA MAXDEC=2 N MEAN MAX MIN ; CLASS TURNO ; VAR IDADE ;RUN ;

The SAS System Analysis Variable : IDADE

TURNO N Obs N Mean Maximum Minimum ------------------------------------------------------------------------------- 1 12 12 24.42 38.00 18.00

2 6 6 29.17 36.00 21.00 -------------------------------------------------------------------------------

Ex.50:

Ex.51:

Ex.52:

Page 92: Apostila Sas

92

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC SORT DATA=ARQ.MEDIA ; BY TURNO ;PROC MEANS DATA=ARQ.MEDIA MAXDEC=2 N MEAN MAX MIN ; BY TURNO ; VAR IDADE ;RUN ;

The SAS System Analysis Variable : IDADE

---------------------------------- TURNO=1 -------------------------------- N Mean Maximum Minimum ------------------------------------------------------- 12 24.42 38.00 18.00 -------------------------------------------------------

---------------------------------- TURNO=2 -------------------------------- N Mean Maximum Minimum ------------------------------------------------------- 6 29.17 36.00 21.00 -------------------------------------------------------

TITLE;OPTIONS NODATE PAGENO=1;PROC MEANS DATA=ARQ.CADASTRO NOPRINT;

CLASS EMPRESA;VAR IDADE SAL;OUTPUT OUT=TESTE

MIN=ID_MINIMO SAL_MINIMO MEAN=ID_MEDIA SAL_MEDIA MAX=ID_MAXIMA SAL_MAXIMA;

RUN;

PROC PRINT DATA=TESTE;RUN;

1

SAL_ SAL_ SAL_ Obs empresa _TYPE_ _FREQ_ ID_MINIMO MINIMO ID_MEDIA MEDIA ID_MAXIMA MAXIMA

1 0 432 19 3000.40 43.4838 16299.47 79 55998.09 2 ATLAS S.A. 1 104 19 3000.40 24.4615 3626.58 30 27538.21 3 MALTA LTDA 1 162 50 25002.08 64.4321 30792.82 79 55998.09 4 PARIS INSTITUTO 1 166 20 3064.58 34.9578 10018.65 49 24988.44

Ex.53:

Ex.54:

Page 93: Apostila Sas

938.2 - Procedimento FREQ

Procedimento que produz tabelas simples e tabelas cruzadas, dafrequência de variáveis numéricas e caracter.

PROC FREQ [opções] ;BY <lista de variáveis> ;TABLES <variáveis> / [opções] ;

opções DATA= Nome de um arquivo SAS;PAGE Determina que seja gerado uma tabela por página do relatório.COMPRESS Determina que seja gerado o máximo de tabelas possíveis em

cada página do relatório;

BY Especifica uma ou mais variáveis que possibilitam o agrupamento de dados.OBS: É necessário executar um PROC SORT, antes;

TABLES Especifica as variáveis e a regra de formação da tabela de frequência.Utiliza-se o caracter “*” para cruzar variáveis. Ex.: (a*b , y*x , peso*altura).

opções LIST Os resultados sairão num formato listado aoinvês de uma tabela cruzada.

MISSING Inclui os valores "missing" na tabela.NOPRINT Não gera relatório de saída.OUT= Especifica arquivo SAS de saída.NOCUM Não gera as colunas de frequência e percentual

acumulativo.NOPERCENT Não gera as colunas com percentuais.NOFREQ Não gera a coluna de frequência.

Page 94: Apostila Sas

94

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC FREQ DATA=ARQ.DADOS ; TABLES SEXO IDADE ;RUN ;

The SAS System

Cumulative Cumulative SEXO Frequency Percent Frequency Percent --------------------------------------------------------------------- F 9 50.0 9 50.0 M 9 50.0 18 100.0

Cumulative Cumulative IDADE Frequency Percent Frequency Percent ---------------------------------------------------------------------- 18 2 11.1 2 11.1 19 1 5.6 3 16.7 20 1 5.6 4 22.2 21 2 11.1 6 33.3 22 2 11.1 8 44.4 25 2 11.1 10 55.6 26 1 5.6 11 61.1 28 1 5.6 12 66.7 29 1 5.6 13 72.2 32 1 5.6 14 77.8 33 1 5.6 15 83.3 35 1 5.6 16 88.9 36 1 5.6 17 94.4 38 1 5.6 18 100.0

Ex.55:

Page 95: Apostila Sas

95

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC FREQ DATA=ARQ.CADASTRO ; TABLES SEXO*EMPRESA ;RUN ;

The FREQ Procedure

Table of sexo by empresa

sexo empresa

Frequency| Percent | Row Pct | Col Pct |ATLAS S.|MALTA LT|PARIS IN| Total |A. |DA |STITUTO | ---------+--------+--------+--------+ F | 58 | 101 | 112 | 271 | 13.36 | 23.27 | 25.81 | 62.44 | 21.40 | 37.27 | 41.33 | | 59.79 | 58.05 | 68.71 | ---------+--------+--------+--------+ M | 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

Ex.56:

Page 96: Apostila Sas

96

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC FREQ DATA=ARQ.DADOS ; TABLES SEXO*IDADE / LIST ;RUN ;

The SAS System Cumulative Cumulative SEXO IDADE Frequency Percent Frequency Percent -------------------------------------------------------------------------------- F 18 2 11.1 2 11.1 F 19 1 5.6 3 16.7 F 20 1 5.6 4 22.2 F 21 1 5.6 5 27.8 F 22 2 11.1 7 38.9 F 25 1 5.6 8 44.4 F 36 1 5.6 9 50.0 M 21 1 5.6 10 55.6 M 25 1 5.6 11 61.1 M 26 1 5.6 12 66.7 M 28 1 5.6 13 72.2 M 29 1 5.6 14 77.8 M 32 1 5.6 15 83.3 M 33 1 5.6 16 88.9 M 35 1 5.6 17 94.4 M 38 1 5.6 18 100.0

Ex.57:

Page 97: Apostila Sas

97

TITLE;OPTIONS NODATE PAGENO=1;PROC FREQ DATA=ARQ.CADASTRO ;

TABLE SEXO*EMPRESA / OUT=TESTE MISSING NOCUM NOPERCENT;

RUN;

PROC PRINT DATA=TESTE;RUN; 1

The FREQ Procedure

Table of sexo by empresa

sexo empresa

Frequency| Row Pct | Col Pct | |ATLAS S.|MALTA LT|PARIS IN| Total | |A. |DA |STITUTO | ---------+--------+--------+--------+--------+ F | 79 | 58 | 101 | 112 | 350 | 22.57 | 16.57 | 28.86 | 32.00 | | 68.10 | 59.79 | 58.05 | 68.71 | ---------+--------+--------+--------+--------+ M | 37 | 39 | 73 | 51 | 200 | 18.50 | 19.50 | 36.50 | 25.50 | | 31.90 | 40.21 | 41.95 | 31.29 | ---------+--------+--------+--------+--------+ Total 116 97 174 163 550

2

Obs sexo empresa COUNT PERCENT

1 F 79 14.3636 2 F ATLAS S.A. 58 10.5455 3 F MALTA LTDA 101 18.3636 4 F PARIS INSTITUTO 112 20.3636 5 M 37 6.7273 6 M ATLAS S.A. 39 7.0909 7 M MALTA LTDA 73 13.2727 8 M PARIS INSTITUTO 51 9.2727

Ex.58:

Page 98: Apostila Sas

988.3 - Procedimento TABULATE

O procedimento TABULATE monta relatórios com estatíticas descritivasnum formato tabular.

PROC TABULATE [opções] ;CLASS <variáveis> ;VAR <variáveis> ;BY <variáveis> ;TABLE <página , linha , coluna> / [opções] ;

opções DATA=Nome do arquivo SAS;

CLASS Especifica uma ou mais variáveis, numéricas ou caracter, que possibilitam oagrupamento de dados.e que serão utilizadas como variáveis classificatóriasno comando TABLE. OBS: Não é necessário executar um PROC SORT,antes;

VAR Especifica as variáveis numéricas que irão participar de uma análiseestatística e que serão utilizadas no comando TABLE;

BY Especifica uma ou mais variáveis que possibilitam o agrupamentode dados, com quebra da tabela. OBS: É necessário executar umPROC SORT, antes;

TABLE Especifica a regra de formação da tabela;

página Especifica uma variável ou expressão que irá definir a regra deformação das páginas da tabela;

linha Especifica uma variável ou expressão que irá definir a regra deformação das linhas da tabela;

coluna Especifica uma variável ou expressão que irá definir a regra deformação das colunas da tabela;

opções Opções do comando TABLE:

OBS: Regras de formação: elemento*elemento ö cruzamentoelemento elemento ö concatenação

(elemento elemento)ö agrupamento

elementos: variáveis, funções estatísticas (SUM, MEAN, N, PCTN, PCTSUM, etc), ALL(totalizador).

Page 99: Apostila Sas

99

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC TABULATE DATA=ARQ.DADOS ; CLASS SEXO ; VAR IDADE PESO; TABLE SEXO , IDADE PESO ;RUN ; ------------------------------------------------- | | IDADE | PESO | | |------------+------------| | | Sum | Sum | |---------------------+------------+------------| |SEXO | | | |---------------------| | | |F | 440.00| 939.00| |---------------------+------------+------------| |M | 344.00| 919.88| -------------------------------------------------

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC TABULATE DATA=ARQ.DADOS ; CLASS SEXO ; VAR IDADE PESO; TABLE SEXO , (IDADE PESO) * MEAN ;RUN ; ------------------------------------------------- | | IDADE | PESO | | |------------+------------| | | Mean | Mean | |---------------------+------------+------------| |SEXO | | | |---------------------| | | |F | 31.43| 67.07| |---------------------+------------+------------| |M | 31.27| 83.63| -------------------------------------------------

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC TABULATE DATA=ARQ.DADOS ; CLASS SEXO EMPRESA ; VAR PESO; TABLE SEXO, EMPRESA* PESO * MEAN ;RUN ; ------------------------------------------------- | | EMPRESA | | |-------------------------| | | ATLAS | MANTAS | | |------------+------------| | | PESO | PESO | | |------------+------------| | | Mean | Mean | |---------------------+------------+------------| |SEXO | | | |---------------------| | | |F | 65.80| 68.34| |---------------------+------------+------------| |M | 88.45| 80.87| -------------------------------------------------

Ex.59:

Ex.60:

Ex.61:

Page 100: Apostila Sas

100

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC TABULATE DATA=ARQ.DADOS ; CLASS SEXO EMPRESA ; VAR ALTURA; TABLE SEXO, EMPRESA ALL, ALTURA * MEAN / CONDENSE;RUN ; SEXO F ------------------------------------ | | ALTURA | | |------------| | | Mean | |---------------------+------------| |EMPRESA | | |---------------------| | |ATLAS | 1.71| |---------------------+------------| |MANTAS | 1.67| |---------------------+------------| |All | 1.69| ------------------------------------

SEXO M ------------------------------------ | | ALTURA | | |------------| | | Mean | |---------------------+------------| |EMPRESA | | |---------------------| | |ATLAS | 1.82| |---------------------+------------| |MANTAS | 1.79| |---------------------+------------| |All | 1.80| ------------------------------------

Ex.62:

Page 101: Apostila Sas

101

LIBNAME ARQ "G:\KUSEL\SAS" ;PROC TABULATE DATA=ARQ.DADOS ; CLASS SEXO ALTURA ; TABLE ALTURA , SEXO ALL;RUN ; -------------------------------------------------------------- | | SEXO | | | |-------------------------| | | | F | M | All | | |------------+------------+------------| | | N | N | N | |---------------------+------------+------------+------------| |ALTURA | | | | |---------------------| | | | |1.58 | 1.00| .| 1.00| |---------------------+------------+------------+------------| |1.6 | 2.00| .| 2.00| |---------------------+------------+------------+------------| |1.63 | 1.00| .| 1.00| |---------------------+------------+------------+------------| |1.65 | 1.00| 1.00| 2.00| |---------------------+------------+------------+------------| |1.67 | 1.00| .| 1.00| |---------------------+------------+------------+------------| |1.68 | 1.00| 2.00| 3.00| |---------------------+------------+------------+------------| |1.7 | 1.00| .| 1.00| |---------------------+------------+------------+------------| |1.72 | 1.00| .| 1.00| |---------------------+------------+------------+------------| |1.75 | 2.00| 3.00| 5.00| |---------------------+------------+------------+------------| |1.78 | 1.00| .| 1.00| |---------------------+------------+------------+------------| |1.8 | 1.00| .| 1.00| |---------------------+------------+------------+------------| |1.81 | 1.00| .| 1.00| |---------------------+------------+------------+------------| |1.85 | .| 1.00| 1.00| |---------------------+------------+------------+------------| |1.86 | .| 1.00| 1.00| |---------------------+------------+------------+------------| |1.88 | .| 1.00| 1.00| |---------------------+------------+------------+------------| |1.9 | .| 1.00| 1.00| |---------------------+------------+------------+------------| |2.05 | .| 1.00| 1.00| --------------------------------------------------------------

Ex.63:

Page 102: Apostila Sas

102

TITLE1 "Relatório com a Média de Salário";TITLE2 "e a Distribuição Percentual dos Funcionários por Empresa";

OPTIONS LS=130;

PROC TABULATE DATA=ARQ.CADASTRO MISSING; CLASS SEXO EMPRESA; VAR SAL ; TABLE SEXO="Sexo"*EMPRESA="Empresa" ALL="Total", (N*f=6. PCTN="%"*f=commax6.2 SAL=""*MEAN="Média de Salário"*f=commax12.2) ;RUN ;

OBS: *f= Formata a variável*= Especifica um LABEL para a variável

Relatório com a Média de Salário e a Distribuição Percentual dos Funcionários por Empresa

----------------------------------------------------------- | | | | Média de | | | N | % | Salário | |------------------------------+------+------+------------| |Sexo |Empresa | | | | |--------------+---------------| | | | |F | | 79| 14,36| .| | |---------------+------+------+------------| | |ATLAS S.A. | 58| 10,55| 3.094,50| | |---------------+------+------+------------| | |MALTA LTDA | 101| 18,36| 3.739,14| | |---------------+------+------+------------| | |PARIS INSTITUTO| 112| 20,36| 3.016,84| |--------------+---------------+------+------+------------| |M | | 37| 6,73| .| | |---------------+------+------+------------| | |ATLAS S.A. | 39| 7,09| 3.019,42| | |---------------+------+------+------------| | |MALTA LTDA | 73| 13,27| 4.023,08| | |---------------+------+------+------------| | |PARIS INSTITUTO| 51| 9,27| 2.739,57| |------------------------------+------+------+------------| |Total | 550|100,00| 3.332,21| -----------------------------------------------------------

Ex.64:

Page 103: Apostila Sas

1035º LABORATÓRIO

Utilização dos procedimentos estatísticos básicos.

Utlizando o arquivo SAS CADASTRO, gerado no 1º LABORATÓRIO :

1 - Gere um relatório com a média, o valor máximo, o valor mínimo e o desvio padrãodas variáveis PESO e ALTURA, classificados por SEXO e com apresentação dosresultados com duas casas decimais.

2 - Gere um arquivo SAS, permanente, no diretório c:\curso\sas, com a média , o valormáximo e o valor mínimo da variável IDADE, classificados por EMPRESA.

- Este programa não deve gerar relatório;- Deverá gerar três variáveis referentes a média, o valor máximo e o valormínimo da idade: MED_ID, MAX_ID e MIN_ID;

3 - Com o arquivo gerado no item anterior, crie um programa que emita um relatórioordenado por EMPRESA.

- As variáveis deverão ser rotuladas:MED_ID="Idade Média"MAX_ID="Idade Máxima"MIN_ID="Idade Mínima"

- Os resultados numéricos deverão aparecer formatados com pontos e vírgula.ecom no máximo duas casas decimais;

- Deverá ser criado um título: "Variação da Idade por Empresa"

4 - Gere um relatório apenas coma média e somatório de todas as variáveis numéricasdo arquivo SAS, CADASTRO ordenados por EMPRESA.

5 - Gere um relatório com as tabelas de frequência de SEXO, IDADE, ESTADOCIVIL, FILHOS, EMPRESA e FUNCAO.

6 - Gere um relatório com uma tabela de frequência de SEXO versus IDADE.

7 - Gere um relatório com uma tabela de frequência, "listada", de SEXO versusIDADE, e que não contenha as colunas de valores acumulativos e gere um arquivo desaída com os resultados. Imprima o arquivo gerado com a PROC PRINT.

8 - Gere um relatório com duas tabelas de frequência de ESTADO CIVIL versusFILHOS e SEXO versus EMPRESA na mesma PROC.

Page 104: Apostila Sas

1049 - Gere um relatório com uma tabela que apresente a média das variáveis IDADE ePESO, classificadas pela variável SEXO.

- A variável SEXO deverá formar as linhas;- As variáveis IDADE e PESO deverão formar as colunas;- Deverá ser utilizado a opção MEAN para formar as colunas;

(Utilize o procedimento TABULATE)

10 - Gere um relatório com uma tabela que apresente a média e o somatório davariável SALARIO, classificado por SEXO versus EMPRESA.

- A expressão SEXO versus EMPRESA deverá formar as linhas;- A variável SALARIO deverá formar as colunas;- Deverá ser utilizado as opções MEAN e SUM para formar as colunas- Tamanho da página de 55 linhas e 80 colunas;

(Utilize o procedimento TABULATE)

11 - Acrescente a tabela do relatório anterior :

- Um totalizador na linha e na coluna: ALL;- Rotule todos os elmentos (variáveis, estatísticas e totalizadores);- Formate os resultados numéricos com pontos, vírgula e duas casas decimais;- Título: “Apresentação do Salário por Sexo e Empresa”;- Sem a data e paginação iniciando do 1;- Gere a tabela no padrão HTML e PDF.

Page 105: Apostila Sas

1059 - RECURSO DE FORMATAÇÃO ESPECIAL

9.1 - Procedimento FORMAT

O procedimento FORMAT permite que o usuário crie os seus própriosformatos de leitura e impressão, para variáveis numéricas e caracter.

PROC FORMAT ;VALUE <nome> [( opções )]

<intervalo> = "<descrição>" ;

VALUE Comando que define um formato diferente para os valores de uma variávelnumérica ou caracter.

nome -Nome do formato até 32 caracteres; -Nome de formatos para serem aplicados em variáveis caracter,obrigatóriamente, deverão iniciar com $ ;-Nomes de formato não podem terminar com números.

opções MULTILABEL Permite sobreposição de intervalos;NOTSORTED Não ordenar as descrições;

OBS: A opção MULTILABEL só funcionará em procedimentosque possuem o comando CLASS (PROC MEANS, TABULATEe SUMMARY), que permite ativar o uso do formato comsobreposição através da sua opção MLF

CLASS <variável> / MLF

intervalo -Especifica um valor, ou intervalos, que os valores de uma variávelpoderá assumir durante a formatação.-Valores ou intervalos de variáveis caracter, deverão vir entreaspas. -Parâmetros epeciais são utilizados para definir limites deintervalos: LOW Menor valor encontrado;

HIGH Maior valor encontrado;OTHER Qualquer outro valor não identificado;< Não inclui o valor do intervalo.

descrição -Valor, no qual a variável formatada, assumirá no momento de suautilização;-No máximo 32K caracteres entre aspas;

Page 106: Apostila Sas

106

LIBNAME ARQ "G:\KUSEL\SAS" ;OPTIONS PS=30 ;PROC FORMAT ; VALUE $TUR "1"="MANHA" "2"="TARDE" OTHER="DADO ERRADO" ;

VALUE ALT LOW-<1.50="BAIXO" 1.50-<1.70="MEDIO" 1.70-HIGH="ALTO" ;

PROC PRINT DATA=ARQ.DADOS ; FORMAT TURNO $TUR. ALTURA ALT. ;RUN ;

The SAS System 15:01 Tuesday, January 30, 1996

OBS NOME SEXO IDADE ALTURA PESO TURNO

1 Alfredo M 25 ALTO 80 MANHA 2 Alicia F 22 ALTO 65 MANHA 3 Carol F 22 MEDIO 65 MANHA 4 Paulo M 29 ALTO 90 MANHA 5 Maria F 20 MEDIO 70 MANHA 6 Ricardo M 35 ALTO 83 MANHA 7 Tomas M 26 ALTO 75 MANHA 8 Joao M 38 ALTO 90 MANHA 9 Marcia F 18 MEDIO 50 MANHA 10 Ligia F 19 ALTO 80 MANHA 11 Laura F 18 MEDIO 69 MANHA 12 Paula F 21 MEDIO 58 MANHA 13 Carlos M 21 MEDIO 55 TARDE 14 Jaime M 28 ALTO 75 TARDE 15 Joice F 25 ALTO 60 TARDE 16 Filipe M 32 ALTO 110 TARDE 17 Roberto M 33 ALTO 89 TARDE 18 Lia F 36 MEDIO 76 TARDE

Ex.65:

Page 107: Apostila Sas

1076º LABORATÓRIO

Criar, utilizar e manipular formatos ( Procedimento FORMAT )

1 - Criar um programa que gere formatos especiais para os valores das variáveis:IDADE, PESO, ALTURA, ESTADO CIVIL e SALARIO . Gere vários relatóriosque utilize esses formatos.

Criar rótulos para variável IDADE:

15-25 = "15 a 25 anos"26-50 = "26 a 50 anos"51-HIGH = "Mais de 50 anos"

Criar faixas para a variável PESO:

50-<70 = "50 a 69"70-<80 = "70 a 79"80-<100 = "80 a 99"

Criar rótulos para a variável ALTURA:

1.50-<1.66 = "1,50 a 1,65"1.67-<1.80 = "1,66 a 1,79"1.80-HIGH = "Mais de 1,80"

Criar rótulos para a variável ESTADO CIVIL:

"1" = "SOLTEIRO""2" = "CASADO""3" = "SEPARADO"

Criar faixas para a variável SALARIO:

do menor até 2000, não incluso = "Iniciante"de 2000 até 4000, não incluso = "Junior"de 4000 até 7000, não incluso = "Senior"de7000 até 10000, não incluso = "Gerente"acima de 10000, não incluso = "Diretor"Do menor ao maior valor, missing=”Total”missing=”Desempregado”;

OBS: Os dois últimos intervalos são um sobreposição

Page 108: Apostila Sas

1082 - Gere um relatório com tabelas de frequência de IDADE, ALTURA, PESO eESTADO CIVIL com os dados formatados .

(Utilize o procedimento FREQ com o comando FORMAT)

3 - Gere um relatório com uma tabela de frequência de IDADE versus ESTADOCIVIL, com os dados formatados

(Utilize o procedimento FREQ com o comando FORMAT)

4 - Gere um relatório com as pessoas classificadas por SEXO, EMPRESA eSALARIO, com os dados de SALARIO formatados.

- Utilize o procedimento TABULATE;- Comando FORMAT;- Comando CLASS com a opção MLF, apenas para SALARIO).

Page 109: Apostila Sas

109

ARQ2

ARQ1

ARQ1

ARQ2

DATA ARQ3 ;SET ARQ1 ARQ2 ;

RUN ;

ARQ3

10 - COMBINAÇÃO DE ARQUIVOS SAS

10.1 - CONCATENAÇÃO

Concatenação é a união sem critérios, de dois ou mais arquivos SAS, umapós o outro, na vertical, originando um único arquivo.

SET <arquivo1> . . . <arquivon> ;

Page 110: Apostila Sas

110

LIBNAME IN "A:\" ;DATA IN.ARQ1 ;

INFILE “A:\ARQ1.TXT”INPUT NOME $ 1-6 @8 SEXO $1. ;

RUN; Arquivo: ARQ1.TXT

01 02 03 04 05 06 07 08

M A R C I O M

S A N D R A F

P A U L A F

C E L S O MDATA IN.ARQ2 ;

INFILE “C:\ARQ2.TXT”INPUT NOME $ 1-7 IDADE 2. ;

RUN ; Arquivo: ARQ2.TXT

01 02 03 04 05 06 07 08 09

M A R C I O 2 5

C E L S O 2 2

P A U L A 1 8

S A N D R A 1 5DATA IN.CONCAT ;

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

SAS

OBS NOME SEXO IDADE1 MARCIO M .2 SANDRA F .3 PAULA F .4 CELSO M .5 MARCIO 256 CELSO 227 PAULA 188 SANDRA 15

Ex.66:

Page 111: Apostila Sas

111

ARQ2

ARQ2ARQ1

ARQ1

PROC SORT DATA=ARQ1; BY <variável comum>;RUN;PROC SORT DATA=ARQ2; BY <variável comum>;RUN;DATA ARQ3 ;

MERGE ARQ1 ARQ2 ;BY <variável comum>

RUN ;

ARQ3

10.2 - COMBINAÇÃO ORDENADA ( Match-Merging )

Combinação ordenada é a união de dois ou mais arquivos SAS em um únicoarquivo, combinado e ordenado por uma ou mais variáveis comum. Osarquivos deverão estar ordenados, antes do "Match-Merging", pela variávelcomum.

MERGE <arquivo1> . . . <arquivon> ;BY <variável comum> ;

Page 112: Apostila Sas

112

LIBNAME IN "C:\KUSEL\CUR_SAS" ;PROC SORT DATA=IN.ARQ1 ; BY NOME ;PROC SORT DATA=IN.ARQ2 ; BY NOME ;DATA IN.ORD ;

MERGE IN.ARQ1 IN.ARQ2 ;BY NOME ;

PROC PRINT DATA=IN.ORD ; RUN ;

SAS

OBS NOME SEXO IDADE1 CELSO M 222 MARCIO M 253 PAULA F 184 SANDRA F 15

Ex.67:

Page 113: Apostila Sas

1137º LABORATÓRIO

Utilização da combinação de arquivos SAS

Utilizando os arquivos SAS gerados no 3º LABORATÓRIO item 6:

1 - Monte um programa que gere um arquivo SAS (CONCAT) que será aconcatenação dos dados dos arquivos: PESSOAL e TRABALHO. Gere umrelatorio com os dados do arquivo CONCAT, para visualizar o resultado.

(Utilize os comandos DATA e SET)

2 - Monte um programa que gere um arquivo SAS (INTER) que será a intercalaçãoordenada dos dados dos arquivos: PESSOAL e TRABALHO por uma variávelcomum CPF. Gere um relatório com os dados do arquivo INTER, para visualizar oresultado.

(Utilize os comandos DATA, SET e BY)

OBS: Lembre-se os arquivos devem estar ordenados pela variável comum.

3 - Monte um programa que gere um arquivo SAS (JUSTA) que será a justaposiçãoordenada dos dados dos arquivos: PESSOAL e TRABALHO por uma variávelcomum CIC. Gere um relatório com os dados do arquivo JUSTA, para visualizar oresultado.

(Utilize os comandos DATA, MERGE e BY)

OBS: Lembre-se os arquivos devem estar ordenados pela variável comum.

Page 114: Apostila Sas

114

11 - BIBLIOGRAFIA

MANUAIS:

SAS Introductory GuideSAS Institute Inc.SAS Circle, Cary - NCTerceira Edição

SAS Language Version 9SAS Institute Inc.SAS Circle, Cary - NC

SAS Procedures Guide Version 9SAS Institute Inc.SAS Circle, Cary - NC

SAS Guide to TABULATE ProcessingSAS Institute Inc.SAS Circle, Cary - NC1987 Edition

Curso de SAS/BÁSICOSoft Consultoria