Treinamento SAS Nome Aluno

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 101

Treinamento SAS

<Nome Aluno> 1
Autores

Marcelo Menossi – Gerência de Provisões Cíveis, Trabalhistas e Rewards

Fabiana Galhardi Rodrigues – Gerência de Processamento Base de Perdas

Participação Especial

Julyana Yumi Kuwabara – Gerência de Provisões Cíveis, Trabalhistas e Rewards

Diego Pedroso dos Santos – Gerência de Provisões Cíveis, Trabalhistas e Rewards

Agradecimentos

Maria Alice L. Bruno – Gerência de Provisões Cíveis, Trabalhistas e Rewards

Bruno Rodrigues Domingues – Gerência de Provisões Cíveis, Trabalhistas e Rewards

2
Sumário
1. INTRODUÇÃO ..................................................................................................................................................... 6
1.1 SOBRE A EMPRESA ..................................................................................................................................... 6
1.2 O QUE É SAS? ............................................................................................................................................. 6
2. COMO ACESSAR O SAS ....................................................................................................................................... 8
3. DATA SET ............................................................................................................................................................ 8
3.1 DROP = DATA SET OPTION .......................................................................................................................10
3.2 KEEP = DATA SET OPTION ........................................................................................................................11
3.3 OPTIONS COMPRESS = DATA SET OPTIONS .............................................................................................12
3.4 WHERE = DATA SET OPTION ....................................................................................................................12
4. STATEMENTS (DECLARAÇÕES) .........................................................................................................................13
4.1 LIBNAMES STATEMENT (DECLARAÇÃO)...................................................................................................13
4.2 FORMAT STATEMENT...............................................................................................................................15
4.3 LENGTH STATEMENT ................................................................................................................................19
4.4 RENAME STATEMENT ..............................................................................................................................20
4.5 PROC DELETE STATEMENT .......................................................................................................................21
4.6 IF-THEN/ELSE STATEMENT .......................................................................................................................21
4.7 IN STATEMENT .........................................................................................................................................24
4.8 DO WHILE STATEMENT ............................................................................................................................25
4.9 PROC CONTENTS STATEMENT (PROPRIEDADES DA TABELA) ..................................................................27
4.10 PROC SORT STATEMENT ..........................................................................................................................28
4.11 PROC IMPORT STATEMENT ......................................................................................................................30
4.12 PROC EXPORT STATEMENT ......................................................................................................................31
4.13 PROC FREQ STATEMENT ..........................................................................................................................32
4.14 PROC MEANS STATEMENT .......................................................................................................................32
4.15 PROC UNIVARIATE STATEMENT ...............................................................................................................33
4.16 PROC TABULATE STATEMENT ..................................................................................................................33
4.17 PROC SERVEYSELECT STATEMENT ...........................................................................................................34
4.18 PROC TRANSPOSE STATEMENT ................................................................................................................34
4.19 PROC FCMP STATEMENT (CRIAR SUA PRÓPRIA FUNÇÃO EM SAS) .........................................................36
4.20 MACRO STATEMENT ................................................................................................................................38
4.21 UPDATE STATEMENT................................................................................................................................39
4.22 DELETE STATEMENT .................................................................................................................................40
4.23 FILENAME SEND E-MAIL STATEMENT ......................................................................................................41
5. FUNÇÕES ..........................................................................................................................................................42

3
5.1 LENGTH FUNCTION ..................................................................................................................................42
5.2 SUBSTR FUNCTION ...................................................................................................................................44
5.3 OUTPUT STATEMENT ...............................................................................................................................46
5.4 INPUT FUNCTION .....................................................................................................................................47
5.5 PUT FUNCTION .........................................................................................................................................48
5.6 SCAN FUNCTION.......................................................................................................................................50
5.7 ROUND FUNCTION ...................................................................................................................................51
5.8 FLOOR FUNCTION ....................................................................................................................................52
5.9 CELL FUNCTION ........................................................................................................................................53
5.10 INT FUNCTION ..........................................................................................................................................54
5.11 LOWCASE FUNCTION ..............................................................................................................................55
5.12 UPCASE FUNCTION...................................................................................................................................56
5.13 PROPCASE FUNCTION ..............................................................................................................................58
5.14 INDEX FUNCTION .....................................................................................................................................59
5.15 %LET STATEMENT ....................................................................................................................................61
5.16 %SYSFUNC FUNCTION ..............................................................................................................................62
5.17 %EVAL FUNCTION ....................................................................................................................................63
5.18 DATETIME FUNCTION ..............................................................................................................................64
5.19 DATE FUNCTION .......................................................................................................................................65
5.20 DAY FUNCTION .........................................................................................................................................66
5.21 MONTH FUNCTION ..................................................................................................................................67
5.22 YEAR FUNCTION .......................................................................................................................................68
5.23 MDY FUNCTION........................................................................................................................................69
5.24 DATEPART FUNCTION ..............................................................................................................................71
5.25 INTNX FUNCTION .....................................................................................................................................72
5.26 INTCK FUNCTION ......................................................................................................................................73
5.27 WEEKDAY FUNCTION ...............................................................................................................................74
5.28 COMPRESS FUNCTION .............................................................................................................................76
5.29 TRANWRD FUNCTION ..............................................................................................................................78
5.30 TRIM FUNCTION .......................................................................................................................................80
5.31 SUM FUNCTION........................................................................................................................................81
6. SQL PROCEDURE REFERENCES .........................................................................................................................82
6.1 INNER JOIN PROCEDURE ..........................................................................................................................82
6.2 OUTER JOIN PROCEDURE .........................................................................................................................83
6.3 LEFT JOIN PROCEDURE .............................................................................................................................83
6.4 FULL JOIN PROCEDURE ............................................................................................................................84
4
6.5 RIGHT JOIN PROCEDURE ..........................................................................................................................85
6.6 SELECT CASE PROCEDURE ........................................................................................................................86
6.7 BETWEEN PROCEDURE.............................................................................................................................88
7. ROUTINE ...........................................................................................................................................................89
7.1 CALL SYMPUT ROUTINE ...........................................................................................................................89
7.2 CALL SLEEP ROUTINE (CHAMADA ROTINA DE SONO)..............................................................................89
8. CRIANDO UM CONTADOR ................................................................................................................................90
9. ADD ABBREVIATION .........................................................................................................................................91
10. EXERCÍCIOS ...................................................................................................................................................94
10.1 Exercício 1 ................................................................................................................................................94
10.2 Exercício 2 ................................................................................................................................................94
10.3 Exercício 3 ................................................................................................................................................95
10.4 Exercício 4 ................................................................................................................................................96
10.5 Exercício 5 ................................................................................................................................................97
10.6 Exercício 6 ................................................................................................................................................98
10.7 Exercício 7 ................................................................................................................................................99
11. ANOTAÇÕES .................................................................................................................................................99
12. BIBLIOGRAFIA .............................................................................................................................................101

5
1. INTRODUÇÃO
1.1 SOBRE A EMPRESA

SAS, ou "Statistical Analysis System", é o nome de uma empresa pioneira em Business intelligence e de
uma família de softwares gerenciadores de bancos de dados comercializados por ela. A empresa se chamava
SAS Institute até 2001, a partir de então teve seu nome alterado para SAS.
A empresa SAS Inc. fica em Cary, Carolina do Norte, Estados Unidos, e tem sido uma das maiores produtoras de
softwares voltados para Business Intelligence, desde a sua fundação em 1976 por Anthony Barr, James
Goodnight, John Sall e Jane Helwig. Originalmente SAS era um acrônimo de Sistema de Análises Estatísticas
(Statistical Analysis System). Seu maior uso comercial no início da carreira era na agronomia, para medir e
estimar o tamanho das colheitas. Até hoje, o ministério da agricultura dos Estados Unidos ainda é um de seus
clientes.
Em 2001, o SAS Institute passou a se chamar SAS e remodelou seu logotipo e sua linha de produtos.
Com isso ele pretendia se descolar da imagem de fornecedor de software modular (uma atividade cada vez
menos rentável) e assumir a imagem de fornecedor de soluções integradas (uma atividade cada vez mais
rentável). Assim, o Sistema SAS deixou de existir para o mercado e passou a ser mostrado apenas as soluções
montadas com o Sistema SAS.

1.2 O QUE É SAS?

O SAS é um sistema integrado de aplicações para a análise de dados, que consiste de: Recuperação de
dados, Gerenciamento de arquivos, Análise estatística, Acesso a Banco de Dados, Geração de gráficos, Geração
de relatórios. Trabalha com quatro ações básicas sobre o dado: Acessar, Manipular, Analisar e Apresentar. Pode
ser instalado em diversos ambientes operacionais disponíveis no mercado, sendo os programas e arquivos
portáveis para qualquer um desses ambientes. Na verdade, é lendária sua portabilidade e disponibilidade.
Outro aspecto lendário do Sistema SAS é a habilidade de acessar praticamente qualquer formato de dado, em
qualquer base. Mesmo bases de dados descontinuadas comercialmente ainda contam com possibilidade de
acesso via SAS. O módulo SAS/ACCESS to é o responsável por essa funcionalidade, bastando escolher o
adequado. Por exemplo, SAS/ACCESS to Adabas acessa o banco de dados Adabas. SAS/ACCESS to ODBC acessa
diversos formatos, todos mapeados através da interface ODBC. Formatos texto (CSV, TXT etc) e o próprio
formato SAS, são acessados nativamente pelo Base SAS, sem necessidade de nenhum outro módulo.
Sobre o SAS
O SAS é o líder mundial no segmento de inteligência analítica, o conjunto de processos, modelos e
tecnologias que ajuda empresas de diferentes setores da economia a entender em profundidade os próprios
negócios e também os mercados em que atuam. Desde 1976, o SAS dá a seus clientes em todo o mundo THE
POWER TO KNOW® (O Poder do Conhecimento).
6
As soluções do SAS são utilizadas para realizar análises em organizações com bancos de dados complexos,
solucionando problemas específicos que impactam os negócios dos seus clientes. O diferencial do SAS está
justamente na inteligência analítica, que possibilita transformar os dados já armazenados em informações
estratégicas, permitindo tomar as melhores decisões possíveis mais rapidamente, em cenários pré-
determinados pelos clientes.
No início desta década, o SAS adotou a estratégia de desenvolver soluções verticalizadas para resolver
problemas específicos de determinados setores. Alguns exemplos: bancos (detecção de fraudes, solução contra
lavagem de dinheiro, alocação de capital para operações de risco); varejo (verificação de produtos ideais para
perfil de cada loja, onde e quando); gás e petróleo (atividades de exploração, produção, refino, transporte e
comercialização); governo (onde colocar postos médicos e para quais doenças; locais e ocasiões em que é
preciso reforçar o policiamento); telecomunicações (custeio baseado em atividade, gerenciamento de
campanhas); educação (quais alunos têm mais probabilidade de reprovação, por quais razões e como evitar que
sejam repetentes), energia (níveis de consumo, riscos de apagão, onde e como evitar); agricultura (previsão de
safra, aumento de produção), manufatura (definição dos melhores preços para os itens fabricados), entre outras
inúmeras aplicações.
Esse pioneirismo está sendo bem aceito pelo mercado, visto os resultados que o SAS tem obtido. Com
mais de 45.000 instalações em todo o mundo - sendo que noventa e duas destas empresas estão presentes no
top 100 da Fortune 500 - o SAS teve um crescimento em 2009 de 2,2% nas vendas mundiais de soluções
analíticas, atingindo US$ 2,31 bilhões de faturamento. O SAS investe anualmente 23% da sua receita em
Pesquisa e Desenvolvimento (quase o dobro da média do mercado). Isso explica sua presença em diversas
verticais de negócio como varejo, telecomunicações, governo, finanças, manufatura, energia e educação.
No Brasil e no mundo o SAS tem uma sólida base de clientes em vários setores de atividade, especialmente nas
áreas de:
• finanças
• manufatura
• varejo
• energia
• telecomunicações
• governo

7
2. COMO ACESSAR O SAS

Iniciar > Todos os programas > SAS > Enterprise Guide 4.2

3. DATA SET

É um conjunto de dados SAS que contém valores de dados que são organizados em uma tabela de observações
(linhas) e variáveis (colunas) que podem ser processados pelo software SAS. Um conjunto de dados também
contém informação SAS descrito os tipos de dados e os comprimentos das variáveis. Ele também contém a
porção descritiva com as informações de data da criação, informação de variáveis, tamanho, usuário que criou e
etc. Segue abaixo um exemplo de criação de uma tabela SAS:

Exemplo: Criação da tabela

DATA
PROVISAO_AREAS_V1;
INPUT
DT_REF DATE11.
CDPASTA
NOME $ 23-44
AREA $ 45-56
PROVISAO;
FORMAT
DT_REF DDMMYY10.;
CARDS;
01JAN2014 000000000123 BILLY BARROS ITCV 1000
01JAN2014 000000000222 JULYANA B. CHOCOLATE DCRPF 1500

8
01JAN2014 000000000333 DANIEL R. WARDS xXx DCJE 20000
01FEB2014 000000000123 BILLY BARROS ITCV 1800
01FEB2014 000000000222 JULYANA B. CHOCOLATE DCRPF 1500
01FEB2014 000000000223 NEIDE MAÇÃ DCRPF 1500
01FEB2014 000000000124 TALITA O9BJ ITCV 1200
01FEB2014 000000000333 DANIEL R. WARDS xXx DCJE 20000
01MAR2014 000000000222 JULYANA B. CHOCOLATE DCRPF 1650
01MAR2014 000000000123 BILLY BARROS ITCV 1950
01MAR2014 000000000124 TALITA O9BJ ITCV 1300
01MAR2014 000000000333 DANIEL R. WARDS xXx DCJE 21050
01MAR2014 000000000334 FABIANA PULGA BATISTADCJE 250000
;
RUN;

PROC PRINT DATA= PROVISAO_AREAS_V1;


RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY BARROS ITCV 1000

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000

4 01/02/2014 123 BILLY BARROS ITCV 1800

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

(Observações)
6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500
Linhas

7 01/02/2014 124 TALITA O9BJ ITCV 1200

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650

10 01/03/2014 123 BILLY BARROS ITCV 1950

11 01/03/2014 124 TALITA O9BJ ITCV 1300

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

Colunas
(Variáveis)

9
3.1 DROP = DATA SET OPTION
Para um conjunto de dados de entrada, exclui as variáveis especificadas do processamento; para um conjunto
de dados de saída, exclui as variáveis especificadas sejam escritos para o conjunto de dados.
Sintaxe
DROP < variável> ;

Exemplo: Exclui os campos


Neste exemplo excluímos a variável NOME da tabela de destino PROVISAO_AREAS_V1_RETIRA. Na tabela
abaixo podemos ver o resultado onde este campo já não consta mais na tabela destino, porém na origem
permanece sem alterações.

/* CRIA TABELA */
DATA
PROVISAO_AREAS_V1_RETIRA(DROP=NOME);
SET
PROVISAO_AREAS_V1;
RUN;
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = PROVISAO_AREAS_V1_RETIRA;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA AREA PROVISAO

1 01/01/2014 123 ITCV 1000

2 01/01/2014 222 DCRPF 1500

3 01/01/2014 333 DCJE 20000

4 01/02/2014 123 ITCV 1800

5 01/02/2014 222 DCRPF 1500

6 01/02/2014 223 DCRPF 1500

7 01/02/2014 124 ITCV 1200

8 01/02/2014 333 DCJE 20000

9 01/03/2014 222 DCRPF 1650

10 01/03/2014 123 ITCV 1950

11 01/03/2014 124 ITCV 1300

12 01/03/2014 333 DCJE 21050

13 01/03/2014 334 DCJE 250000

Retira o campo NOME

10
3.2 KEEP = DATA SET OPTION
Keep especifica as variáveis que serão mantidas para o conjunto de dados.
Sintaxe
KEEP < variável> ;

Exemplo: Mantém os campos


O KEEP funciona basicamente como o DROP, porém ao invés de informar as variáveis que deverão ser
removidas ele informa as variáveis de deverão serem mantidas para um conjunto de dados. No exemplo, a
variável CDPASTA da tabela de destino PROVISAO_AREAS_V1_MANTEM é a única variável mantida na tabela
conforme resultado demonstrado através da tabela.

/* CRIA TABELA */
DATA
PROVISAO_AREAS_V1_MANTEM(KEEP=CDPASTA);
SET
PROVISAO_AREAS_V1;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = PROVISAO_AREAS_V1_MANTEM;
RUN;
Obs CDPASTA

1 123

2 222

3 333

4 123

5 222

6 223

7 124

8 333

9 222

10 123

11 124

12 333

13 334

Mantém apenas o campo CDPASTA

11
3.3 OPTIONS COMPRESS = DATA SET OPTIONS

Ao executar esta opção, ao processar um DATA SET ou PROC SQL para criação de uma tabela, o SAS já criará a
mesma compactada. Faça um teste e crie uma tabela sem executar esta opção e veja o tamanho da tabela.
Depois execute esta opção e em seguida crie a mesma tabela e verá que o tamanho desta nova é muito menor
do que a anterior.

OPTIONS COMPRESS = YES REUSE = YES

3.4 WHERE = DATA SET OPTION

Filtrar uma condição.

Exemplo 1:

No exemplo abaixo criamos a tabela FILTRO_BASE_PROV_EX1 apenas com os registros cujo a AREA = 'ITCV'.

DATA
FILTRO_BASE_PROV_EX1;
SET
PROVISAO_AREAS_V1;
WHERE
AREA = 'ITCV';
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= FILTRO_BASE_PROV_EX1;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY BARROS ITCV 1000

2 01/02/2014 123 BILLY BARROS ITCV 1800

3 01/02/2014 124 TALITA O9BJ ITCV 1200

4 01/03/2014 123 BILLY BARROS ITCV 1950

5 01/03/2014 124 TALITA O9BJ ITCV 1300

12
Exemplo 2, usando proc sql e contains.

Neste exemplo criamos a tabela FILTRO_BASE_PROV_EX2 apenas com os registros cujo campo NOME contém o
texto 'ANA' em qualquer parte do texto.

PROC SQL;
CREATE TABLE
FILTRO_BASE_PROV_EX2 AS
SELECT
TAB1.*
FROM
PROVISAO_AREAS_V1 AS TAB1
WHERE
NOME CONTAINS 'ANA';
QUIT;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= FILTRO_BASE_PROV_EX2;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

2 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

3 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650

4 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

4. STATEMENTS (DECLARAÇÕES)
4.1 LIBNAMES STATEMENT (DECLARAÇÃO)

Associa ou desassocia uma biblioteca SAS com o libref (um nome de atalho), apaga um ou todos os librefs,
lista as características de uma biblioteca SAS, concatena bibliotecas SAS, ou concatena catálogos SAS.

Sintaxe:
Libname (<apelido do local de armazenamento>, <endereço de armazenamento>)

13
Exemplo 1: Atribuição e Utilização de um Libref (Nome atribuído)
Este exemplo atribui ao grupo de trabalho ACRF_WOR libref para um local de armazenamento de
agregação especificada entre aspas, como um nome de diretório físico. Esta etapa cria a ACRF_WOR. A tabela
PROVISAO_AREAS_V0 é armazena no local atribuído. O passo PRINT PROC faz referência a ele por seu nome de
dois níveis, ACRF_WOR.PROVISAO_AREAS_V0.

LIBNAME ACRF_WOR '/home/cau002/acrf/def/sgcoc/gpre/workgroup';

/* CRIA TABELA */
DATA
ACRF_WOR.PROVISAO_AREAS_V0;
INPUT
CDPASTA
;
CARDS;
000000000123
000000000222
000000000333
;
RUN;

/* CRIA TABELA */
PROC PRINT DATA= ACRF_WOR.PROVISAO_AREAS_V0;
RUN;

Resultado do PROC PRINT:

Obs CDPASTA

1 123

2 222

3 333

Exemplo 2: Atribuição e Utilização de uma junção de Librefs

O exemplo abaixo atribui dois locais de armazenamento a duas librefs.


LIBNAME ACRF_FAB '/home/cau002/acrf/def/sgcoc/gpre/galhfab';
LIBNAME ACRF_MEN '/home/cau002/acrf/def/sgcoc/gpre/menomar';
14
Na libref ACRF é criada a junção das duas librefs, ACRF_MEN e ACRF_FAB, assim é possível visualizar e utilizar as
tabelas de ambas librefs em apenas uma.

LIBNAME ACRF (ACRF_MEN ACRF_FAB);


Exemplo 3: Atribuição e Utilização de Libref armazenado em servidor diferente

Quando o local de armazenamento dos dados pertencer a um servidor diferente do que o usuário esta alocado
é necessário à autenticação com o usuário e senha (lembrando que o usuário deve ter acesso ao servidor) ao
servidor especificado, neste caso o servidor HOSTNAME='SCXX004CAU-APP' SERVER=__8551.

Neste exemplo, passamos o usuário e senha através de duas macro variáveis USER (usuário) que neste caso é
preenchido automaticamente através da macro variável &_CLIENTUSERID disponível no SAS que captura
automaticamente o usuário logado na máquina e a PASS que é a senha do usuário logado. OBS: Você também
pode passar manualmente o usuário para macro variável USER se preferir.

%LET USER = &_CLIENTUSERID; /*USUÁRIO AUTOMATICO (LOGADO NA MÁQUINA)*/


%LET PASS = '123BANCO'; /* INFORMAR A SENHA */

/* BASE DE AÇÕES ATIVAS JURIDICO CENTRALIZADO */


LIBNAME AJC_ATV '/home/cau004/aj/dccvoj/sppo/gpj/share/civel/fechamento/ativos'
HOSTNAME='SCXX004CAU-APP' SERVER=__8551 USER=&USER PASSWORD=&PASS;

4.2 FORMAT STATEMENT

Associa com formatos a variáveis.


Sintaxe
FORMAT variável <formato> ;

Exemplo: Formata a variável


Neste exemplo criamos uma tabela e inserimos alguns dados. Podemos perceber que o campo DT_REF que
neste caso é a data de referência, não está formatado mostrando apenas o número SAS que representa a data
em questão.
IMPORTANTE: Vale lembrar que a data inicio do SAS é 01/01/1960, sendo que no Windows a data inicio é
01/01/1900, ou seja, se exportar um arquivo SAS para um Excel no Windows sem formata-lo, a data ficara
incorreta pois como citado, o dia 1 no SAS é 01/01/1960 enquanto no Windows é 01/01/1900.

15
/* CRIA TABELA */
DATA
PROVISAO_AREAS_V0;
INPUT
DT_REF DATE11.
CDPASTA
AREA $
PROVISAO
PROVISAO_ANTERIOR;
CARDS;
01JAN2014 000000000123 ITCV 1000 0
01JAN2014 000000000222 DCRPF 1500 .
01JAN2014 000000000333 DCJE 20000 15000
;
RUN;
Resultado do PROC PRINT:
Obs DT_REF CDPASTA AREA PROVISAO PROVISAO_ANTERIOR

1 19724 123 ITCV 1000 0

2 19724 222 DCRPF 1500 .

3 19724 333 DCJE 20000 15000

Agora aplicamos o formato DDMMYY10., este é o formado com o dia, mês e ano com 10 posições incluindo as
barras.

/* SOBREPOE A TABELA FORMATANDO O CAMPO DATA */


DATA
PROVISAO_AREAS_V0;
SET
PROVISAO_AREAS_V0;
FORMAT
DT_REF DDMMYY10.;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= PROVISAO_AREAS_V0;
RUN;

16
Resultado do PROC PRINT:

Obs DT_REF CDPASTA AREA PROVISAO PROVISAO_ANTERIOR

1 01/01/2014 123 ITCV 1000 0

2 01/01/2014 222 DCRPF 1500 .

3 01/01/2014 333 DCJE 20000 15000

OUTROS FORMATOS (Dica pelo Query Builder – SAS Guide)

O SAS possui inúmeros formatos e seria difícil informar todos em uma apostila, desta forma resolvemos passar
esta dica utilizando o query builder do SAS Guide. Para mostrar os formatos, abrimos uma tabela qualquer
existente conforme abaixo:

Primeiro inclua os campos na consulta (query) e depois selecione um campo para formata-lo, neste exemplo
selecionamos o campo DT_REF. Em seguida clique no botão propriedades depois aparecerá à caixa de dialogo
abaixo:

17
Agora clique no botão change. Após isso aparecerá diversos formatos que poderão ser selecionados de acordo
com a necessidade do usuário. Neste exemplo selecionamos a categoria Data (Date) e o formato em
PTGDFWDXw. que é um formato em Português como podemos visualizar no exemplo da caixa de dialogo
“janeiro”.

Feito isso o formato é preenchido. O formato escolhido poderá ser utilizado em qualquer função e formato em
DATA SET ou funções SAS.

18
Segue abaixo a tabela com o campo DT_REF formatado:

DT_REF CDPASTA AREA PROVISAO PROVISAO_ANTERIOR


01 janeiro 2014 123 ITCV 1000 0
01 janeiro 2014 222 DCRPF 1500
01 janeiro 2014 333 DCJE 20000 15000

4.3 LENGTH STATEMENT


Especifica o número de bytes para armazenar variáveis.

Sintaxe
LENGTH <nome da variavel><formato>;

Exemplo: Cria um campo tipo texto com n posições


Na tabela PROVISAO_AREAS_V0_1, criamos o campo STATUS com formato texto ($) e tamanho 5, ou seja, a
variável em questão será uma variável de texto e poderá ter até 5 caracteres, ultrapassando este tamanho o
texto será cortado até a quinta posição e populado no campo STATUS. Após criado, o usuário tentar incluir o
conteúdo 'ENCERRADO' que possui 9 caracteres, porém como o campo só aceita 5, o valor é preenchido
apenas com 'ENCER’ conforme demonstrado na tabela.

19
/* CRIA TABELA */
DATA
PROVISAO_AREAS_V0_1;
SET
PROVISAO_AREAS_V0;
LENGTH STATUS $5.;
STATUS = 'ENCERRADO';

RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= PROVISAO_AREAS_V0_1;
RUN;

Resultado do PROC PRINT:

Obs DT_REF CDPASTA AREA PROVISAO PROVISAO_ANTERIOR STATUS

1 01/01/2014 123 ITCV 1000 0 ENCER

2 01/01/2014 222 DCRPF 1500 . ENCER

3 01/01/2014 333 DCJE 20000 15000 ENCER

4.4 RENAME STATEMENT


Especifica novos nomes para variáveis na saída de conjuntos de dados SAS.

Sintaxe
RENAME <nome antigo>=<nome novo> ;

Exemplo: Altera o nome do campo


Neste exemplo renomeamos o campo DT_REF para DATA_REFERENCIA, ou seja, na tabela PROVISAO_AREAS_V1
o campo com a data de referência possui o nome DT_REF. Já na tabela de saída PROVISAO_AREAS_V1_RENAME
o nome do campo é alterado e passa a ser DATA_REFERENCIA.

/* CRIA TABELA */
DATA
PROVISAO_AREAS_V1_RENAME(RENAME=(DT_REF=DATA_REFERENCIA));
SET
PROVISAO_AREAS_V1;
RUN;

20
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = PROVISAO_AREAS_V1_RENAME;
RUN;

Resultado do PROC PRINT:

Obs DATA_REFERENCIA CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY BARROS ITCV 1000

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000

4 01/02/2014 123 BILLY BARROS ITCV 1800

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500

7 01/02/2014 124 TALITA O9BJ ITCV 1200

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650

10 01/03/2014 123 BILLY BARROS ITCV 1950

11 01/03/2014 124 TALITA O9BJ ITCV 1300

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

4.5 PROC DELETE STATEMENT


Exclui os arquivos de bibliotecas de SAS.

Exemplo: Exclui a Tabela


Exclui a tabela informada no PROC DELETE, neste exemplo excluímos a tabela TB_VALOR_TRATADO.

PROC DELETE DATA = TB_VALOR_TRATADO;


RUN;

4.6 IF-THEN/ELSE STATEMENT


Executa um comando SAS para observações que atendam a condições específicas.

Sintaxe

IF <expressão> THEN;

ELSE
21
Exemplo 1: Com apenas uma variável

No exemplo abaixo criamos a variável COD_AREA e a populamos de acordo com as condições estabelecidas, se
AREA = 'DCRPF' o COD_AREA = 1, se AREA = 'ITCV' o COD_AREA = 1, se AREA = 'DCJE' o COD_AREA = 2.

/* CRIA TABELA */
DATA
PROVISAO_CONDICAO_EX1;
SET
PROVISAO_AREAS_V1;

IF AREA = 'DCRPF' THEN


COD_AREA = 1;
ELSE IF AREA = 'ITCV' THEN
COD_AREA = 1;
ELSE IF AREA = 'DCJE' THEN
COD_AREA = 2;

RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= PROVISAO_CONDICAO_EX1;
RUN;
Obs DT_REF CDPASTA NOME AREA PROVISAO COD_AREA

1 01/01/2014 123 BILLY BARROS ITCV 1000 1

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 2

4 01/02/2014 123 BILLY BARROS ITCV 1800 1

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 1

7 01/02/2014 124 TALITA O9BJ ITCV 1200 1

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 2

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 1

10 01/03/2014 123 BILLY BARROS ITCV 1950 1

11 01/03/2014 124 TALITA O9BJ ITCV 1300 1

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 2

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 2

22
Exemplo 2: Com n variáveis

No exemplo 2 criamos a variável COD_AREA e a variável SIGLA e as populamos de acordo com as condições
estabelecidas conforme exemplo 1 porém quando fazemos com mais de uma variável precisamos acrescentar
DO após o THEN e END para fechar o escopo, um para cada IF criado.
/* CRIA TABELA */
DATA
PROVISAO_CONDICAO_EX2;
SET
PROVISAO_AREAS_V1;

IF AREA = 'DCRPF' THEN DO;


COD_AREA = 1;
SIGLA = 'PF';
END;
ELSE IF AREA = 'ITCV' THEN DO;
COD_AREA = 1;
SIGLA = 'IT';
END;
ELSE IF AREA = 'DCJE' THEN DO;
COD_AREA = 2;
SIGLA = 'JE';
END;
RUN;
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= PROVISAO_CONDICAO_EX2;
RUN;
Obs DT_REF CDPASTA NOME AREA PROVISAO COD_AREA SIGLA

1 01/01/2014 123 BILLY BARROS ITCV 1000 1 IT

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1 PF

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 2 JE

4 01/02/2014 123 BILLY BARROS ITCV 1800 1 IT

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1 PF

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 1 PF

7 01/02/2014 124 TALITA O9BJ ITCV 1200 1 IT

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 2 JE

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 1 PF

10 01/03/2014 123 BILLY BARROS ITCV 1950 1 IT

11 01/03/2014 124 TALITA O9BJ ITCV 1300 1 IT

23
Obs DT_REF CDPASTA NOME AREA PROVISAO COD_AREA SIGLA

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 2 JE

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 2 JE

4.7 IN STATEMENT
Verifica se contém um conteúdo em uma variável.

Sintaxe

IN ( <CONTEÚDO1>, <CONTEÚDO2> , ... <CONTEÚDO )

Exemplo:

No exemplo abaixo criamos a variável COD_AREA e a populamos com 1 se o campo AREA for 'DCRPF' ou 'ITCV' e
2 para os demais.

/* CRIA TABELA */
DATA
PROVISAO_CONDICAO_IN;
SET
PROVISAO_AREAS_V1;

IF AREA IN ('DCRPF', 'ITCV') THEN


COD_AREA = 1;
ELSE
COD_AREA = 2;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= PROVISAO_CONDICAO_IN;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO COD_AREA

1 01/01/2014 123 BILLY BARROS ITCV 1000 1

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 2

4 01/02/2014 123 BILLY BARROS ITCV 1800 1

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 1

7 01/02/2014 124 TALITA O9BJ ITCV 1200 1

24
Obs DT_REF CDPASTA NOME AREA PROVISAO COD_AREA

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 2

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 1

10 01/03/2014 123 BILLY BARROS ITCV 1950 1

11 01/03/2014 124 TALITA O9BJ ITCV 1300 1

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 2

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 2

4.8 DO WHILE STATEMENT


Executa instruções em um loop DO repetidamente enquanto uma condição for verdadeira.

Sintaxe
DO WHILE (expressão);

Tabela inicial
Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY BARROS ITCV 1000

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000

4 01/02/2014 123 BILLY BARROS ITCV 1800

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500

7 01/02/2014 124 TALITA O9BJ ITCV 1200

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650

10 01/03/2014 123 BILLY BARROS ITCV 1950

11 01/03/2014 124 TALITA O9BJ ITCV 1300

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

Exemplo:
No exemplo abaixo utilizamos o DO WHILE para acrescentar 1.000 ao valor da provisão enquanto o valor da
provisão for menor ou igual a 5.000. Quando o valor se tornar maior que 5.000 o loop para e o valor final
acrescentado é populado na variável.

25
/* CRIA TABELA */
DATA
ACRESCIMO_PROVISAO;
SET
PROVISAO_AREAS_V1;
DO WHILE (PROVISAO <=5000);
PROVISAO + 1000;
END;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = TB_LINHA_COLUNA;
RUN;
Tabela final
Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY BARROS ITCV 6000

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 5500

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000

4 01/02/2014 123 BILLY BARROS ITCV 5800

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 5500

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 5500

7 01/02/2014 124 TALITA O9BJ ITCV 5200

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 5650

10 01/03/2014 123 BILLY BARROS ITCV 5950

11 01/03/2014 124 TALITA O9BJ ITCV 5300

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

Teste de Mesa:
Obs DT_REF CDPASTA NOME AREA PROVISAO
2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500
Sim é menor que 5.000 ? <= 1500 + 1000
Sim é menor que 5.000 ? <= 2500 + 1000
Sim é menor que 5.000 ? <= 3500 + 1000
Sim é menor que 5.000 ? <= 4500 + 1000
Não é menor que 5.000 ? <= 5500

26
4.9 PROC CONTENTS STATEMENT (PROPRIEDADES DA TABELA)
Listar os campos de uma tabela, bem como os atributos dos campos.

PROC CONTENTS DATA = PROVISAO_AREAS_V0_1;


RUN;

Data Set Name WORK.PROVISAO_AREAS_V0_1 Observations 3

Member Type DATA Variables 6

Engine V9 Indexes 0

Created Friday, April 25, 2014 12:24:01 PM Observation Length 48

Last Modified Friday, April 25, 2014 12:24:01 PM Deleted Observations 0

Protection Compressed NO

Data Set Type Sorted NO

Label

Data Representation HP_UX_64, RS_6000_AIX_64, SOLARIS_64, HP_IA64

Encoding latin1 Western (ISO)

Engine/Host Dependent Information

Data Set Page Size 524288

Number of Data Set Pages 1

First Data Page 1

Max Obs per Page 10893

Obs in First Data Page 3

Number of Data Set Repairs 0

Filename /home/workp02/SAS_work287D01A000CA_scxx002cau/SAS_work0DC801A000CA_scxx002cau/provisao_areas_v0_1.sas7bdat

Release Created 9.0202M2

Host Created AIX

Inode Number 8205

Access Permission rw-r-----

Owner Name Menomar

File Size (bytes) 532480

27
Alphabetic List of Variables and Attributes

# Variable Type Len Format

3 AREA Char 8

2 CDPASTA Num 8

1 DT_REF Num 8 DDMMYY10.

4 PROVISAO Num 8

5 PROVISAO_ANTERIOR Num 8

6 STATUS Char 5

4.10 PROC SORT STATEMENT


Ordenar uma tabela.

Exemplo 1:

Neste exemplo criamos a tabela TB_PROV e multiplicamos o valor da provisão pelo fator 1.052315 no campo
PROV_AT e arredondamos o valor atualizado no campo PROV_AT_ROUND. Em seguida ordenamos por CDPASTA
e DTREF sendo o primeiro campo a ser ordenado CDPASTA e depois DTREF conforme resultado abaixo.

/* CRIA TABELA COM TODOS OS CAMPOS */


DATA
TB_PROV;
SET
PROVISAO_AREAS_V1;

PROV_AT = PROVISAO * 1.052315;


PROV_AT_ROUND = ROUND(PROV_AT);

RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = TB_PROV;
RUN;

28
Obs DT_REF CDPASTA NOME AREA PROVISAO PROV_AT PROV_AT_ROUND

1 01/01/2014 123 BILLY BARROS ITCV 1000 1052.32 1052

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1578.47 1578

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 21046.30 21046

4 01/02/2014 123 BILLY BARROS ITCV 1800 1894.17 1894

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1578.47 1578

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 1578.47 1578

7 01/02/2014 124 TALITA O9BJ ITCV 1200 1262.78 1263

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 21046.30 21046

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 1736.32 1736

10 01/03/2014 123 BILLY BARROS ITCV 1950 2052.01 2052

11 01/03/2014 124 TALITA O9BJ ITCV 1300 1368.01 1368

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 22151.23 22151

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 263078.75 263079

/* ORDENA */
PROC SORT DATA = TB_PROV;
BY CDPASTA DT_REF;
RUN;
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = TB_PROV;
RUN;
Obs DT_REF CDPASTA NOME AREA PROVISAO PROV_AT PROV_AT_ROUND

1 01/01/2014 123 BILLY BARROS ITCV 1000 1052.32 1052

2 01/02/2014 123 BILLY BARROS ITCV 1800 1894.17 1894

3 01/03/2014 123 BILLY BARROS ITCV 1950 2052.01 2052

4 01/02/2014 124 TALITA O9BJ ITCV 1200 1262.78 1263

5 01/03/2014 124 TALITA O9BJ ITCV 1300 1368.01 1368

6 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1578.47 1578

7 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1578.47 1578

8 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 1736.32 1736

9 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 1578.47 1578

10 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 21046.30 21046

11 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 21046.30 21046

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 22151.23 22151

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 263078.75 263079

29
Exemplo 2:
No exemplo 2, criamos a tabela TB_PROV2 através do PROC SORT retirando duplicação por pasta de acordo com
a ordem que aplicamos no exemplo 1. Quando a duplicação é retirada, mantem-se apenas o primeiro registro
de acordo com a ordem aplicada no exemplo 1.

/* RETIRA DUPLICAÇÃO MANTENDO O MAIS ANTIGO */


PROC SORT DATA = TB_PROV OUT = TB_PROV2 NODUPKEY;

BY CDPASTA;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = TB_PROV2;
RUN;
Obs DT_REF CDPASTA NOME AREA PROVISAO PROV_AT PROV_AT_ROUND

1 01/01/2014 123 BILLY BARROS ITCV 1000 1052.32 1052

2 01/02/2014 124 TALITA O9BJ ITCV 1200 1262.78 1263

3 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1578.47 1578

4 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 1578.47 1578

5 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 21046.30 21046

6 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 263078.75 263079

4.11 PROC IMPORT STATEMENT

Realiza a importação de arquivo de dados. Para fazer automaticamente precisamos ter instalado no computador
local o aplicativo PC File Server 9.2 (Para SAS 4.2).

Exemplo:
Neste exemplo importamos o arquivo VP_DE_PARA_EXEMPLO.XLSX que se encontra no diretório local da
máquina para o SAS (Work).

PROC IMPORT DBMS = EXCELCS


DATAFILE="C:\USERS\MENOMAR\DESKTOP\VP_DE_PARA_EXEMPLO.XLSX"
/* AREA DE TRABALHO - COMPUTADOR LOCAL */
OUT = BASE_IMPORT /* BASE SAS CRIADA */
REPLACE; /* SUBSTITUI CASO EXITIR */
SHEET = 'BASE'; /* NOME DA GUIA DE PLANILHA DO EXCEL */
SERVER = 'IU500010332545.CORP1.RC.ITAU'; /* NOME DA MÁQUINA LOCAL */
PORT = 8162; /* PORTA DO PC FILE SERVER */
RUN;
30
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=BASE_IMPORT;
RUN;
Obs DATA_REF AREA VP AREA_NEGOCIO GRANDE_AREA SIGLA

1 01DEC2013 77 CORPORAÇÃO DEMAIS OUTROS CORP

2 01DEC2013 80 BANCO PESSOA FISICA-AGENCIAS BANCO PF BANCO PF BPF

3 01DEC2013 83 CORPORAÇÃO DEMAIS OUTROS CORP

4 01DEC2013 84 AREA SEGUROS ACIVS ACIVS A.S.

5 01DEC2013 88 CORPORAÇÃO DEMAIS OUTROS CORP

6 01DEC2013 89 CAIXAS ELETRÔNICOS BANCO PF BANCO PF CEI

7 01DEC2013 90 BANCO PESSOA FISICA-AGENCIAS BANCO PF BANCO PF BPF

8 01DEC2013 97 DESAFIO ORC DEMAIS OUTROS DESAF ORC

9 01DEC2013 98 CORPORAÇÃO DEMAIS OUTROS CORP

10 01DEC2013 99 CORPORAÇÃO DEMAIS OUTROS CORP

11 01DEC2013 64 BANCO ITAU BBA IBBA OUTROS C.I.B

12 01DEC2013 82 AREA EMPRESAS 3 BANCO PF BANCO PF EMP 3

4.12 PROC EXPORT STATEMENT


Realiza a exportação de arquivo de dados. Para fazer automaticamente precisamos ter instalado no
computador local o aplicativo PC File Server 9.2 (Para SAS 4.2).

Exemplo:
Neste exemplo exportamos a tabela SAS BASE_IMPORT (que encontra-se no WORK) apenas os registros cujo
campo SIGLA for igual 'BPF'. Exportamos para o diretório local em EXCEL com o nome
VP_DE_PARA_EXPORT.XLS.

/* EM WINDOWS */
PROC EXPORT DATA = BASE_IMPORT (WHERE=(SIGLA='BPF'))
OUTFILE="C:\USERS\MENOMAR\DESKTOP\FINANCAS\VP_DE_PARA_EXPORT.XLS"
/* AREA DE TRABALHO - COMPUTADOR LOCAL WINDOWS */
DBMS = EXCELCS /* EM EXCEL */
REPLACE; /* SOBREPOE O ARQUIVO SE EXISTIR */
SHEET = 'BASE_EXPORT'; /* CRIA A GUIA DE PLANILHA BASE_EXPORT */
SERVER = 'IU500010332545.CORP1.RC.ITAU'; /* NOME DA MÁQUINA LOCAL */
PORT = 8162; /* PORTA DO PC FILE SERVER */
RUN;

31
/* EM UNIX */
PROC EXPORT DATA = BASE_IMPORT (WHERE=(SIGLA='BPF'))
OUTFILE="/home/cau002/acrf/def/sgcoc/gpre/menomar/VP_DE_PARA_EXPORT.CSV"
/* SERVIDOR SAS - UNIX */
DBMS = CSV
REPLACE;
RUN;

DATA_REF AREA VP AREA_NEGOCIO GRANDE_AREA SIGLA


01/12/2013 80 BANCO PESSOA FISICA-AGENCIAS BANCO PF BANCO PF BPF
01/12/2013 90 BANCO PESSOA FISICA-AGENCIAS BANCO PF BANCO PF BPF

4.13 PROC FREQ STATEMENT


Utilizado para encontrar a frequência que a informação aparece na base.

PROC FREQ DATA = TB_AREA;


TABLE DT_REF;
RUN;
The FREQ Procedure
DT_REF Frequency Percent Cumulative Cumulative
Frequency Percent
DEC2012 22792 5.39 22792 5.39
JAN2013 21854 5.17 44646 10.56
FEB2013 22084 5.22 66730 15.78
MAR2013 22510 5.32 89240 21.11
APR2013 22934 5.42 112174 26.53
MAY2013 23291 5.51 135465 32.04
JUN2013 23579 5.58 159044 37.61
JUL2013 23832 5.64 182876 43.25
AUG2013 44238 10.46 227114 53.71
SEP2013 25223 5.97 252337 59.68
OCT2013 25783 6.10 278120 65.78
NOV2013 25156 5.95 303276 71.72
DEC2013 23879 5.65 327155 77.37
JAN2014 24690 5.84 351845 83.21
FEB2014 45030 10.65 396875 93.86
MAR2014 25959 6.14 422834 100.00

4.14 PROC MEANS STATEMENT


Utilizado para gerar indicadores estatísticos, como por exemplo: média, mediana, soma, frequência, etc...

PROC MEANS NOPRINT DATA = BD_PROVISAO NWAY;


OUTPUT OUT= BD_PROVISAO2 N=FREQ MEAN=MEDIA MEDIAN=MEDIANA;
WHERE TIPO_INFO = 'SALDO' AND VLR_PROV_ATUAL >=10000;
CLASS BASECONS;
RUN;

PROC PRINT DATA = BD_PROVISAO2;


RUN;

32
Obs BASECONS _TYPE_ _FREQ_ freq media mediana

1 DCJE 1 1626 1548 353 341

2 DCRP 1 112 112 349 341

3 ITCV 1 52 52 417 426

4.15 PROC UNIVARIATE STATEMENT


Utilizado para gerar indicadores estatísticos, como por exemplo: média, mediana, percentis, etc...
É necessário ordenar as informações primeiramente para depois utilizar esse proc.

PROC SORT DATA = ACRF_WOR.CIVEL_SALDO_DEZ12MAR14_2204 OUT=BD_PROVISAO;


BY BASECONS;
RUN;

PROC UNIVARIATE DATA=BD_PROVISAO;


BY BASECONS;
WHERE TIPO_INFO = 'SALDO' AND VLR_PROV_ATUAL >=10000;
VAR VLR_PROV_ATUAL;
OUTPUT OUT=BD_PROVISAO2 SUM=PVLR_SUM MEAN=PVLR_MEAN MIN=PVLR_MIN MAX=PVLR_MAX
MEDIAN=PVLR_MEDIAN
VAR=PVLR_VAR;
RUN;

PROC PRINT DATA = BD_PROVISAO2;


RUN;

Obs BASECONS pvlr_mean pvlr_sum pvlr_var pvlr_max pvlr_median pvlr_min

1 DCJE 881005.57 1432515052.62 3.4538802E12 14846729.06 259495.71 10005.00

2 DCRP 21908.06 2453702.85 537492787.80 208854.11 15329.48 10000.00

3 ITCV 15230.53 791987.52 61185.05 15393.84 15393.84 14863.08

4.16 PROC TABULATE STATEMENT


Utilizado para gerar indicadores estatísticos, como por exemplo: média, mediana, percentis, etc...

PROC TABULATE DATA=BD_PROVISAO;


VAR VLR_PROV_ATUAL;
CLASS BASECONS;
TABLE (BASECONS='BASE' ALL='TOTAL'),
VLR_PROV_ATUAL*(N SUM MIN MEAN MEDIAN VAR P5 P25 P75 P90 P95 P99 MAX STD);
RUN;

33
VLR_PROV_ATUAL

N Sum Min Mean Median Var P5 P25 P75 P90 P95 P99 Max Std

Base 4178699 46161836439 0.00 11046.94 3443.52 47525278607 5.09 1650.42 6922.70 15064.20 32326.59 103729.53 60208946.82 218002.93

AJC

DCJE 373917 2199355074.0 0.00 5881.93 2612.80 18356239834 0.00 1553.40 2629.49 2659.35 2659.35 4467.78 14846729.06 135485.20

DCRP 437316 842322682.69 -331658.62 1926.12 1861.39 2811680.50 0.00 959.24 2800.88 3952.25 4093.38 5832.47 208854.11 1676.81

ITCV 3271203 1763824552.9 -21350.57 539.20 469.53 3853580.65 -2456.11 -383.65 1606.38 2186.18 3525.92 7317.77 21350.57 1963.05

Total 8261135 50967338748 -331658.62 6169.53 1837.16 24897589869 -1843.17 451.29 3769.77 7887.30 15088.78 69227.01 60208946.82 157789.70

4.17 PROC SERVEYSELECT STATEMENT


Utilizado para selecionar informações aleatórias em uma tabela.

PROC SURVEYSELECT DATA= PROVISAO_AREAS_V1


METHOD=SRS N=3 OUT= BD_PROVISAOSRS;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=BD_PROVISAOSRS;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO


1 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500
2 01/02/2014 123 BILLY BARROS ITCV 1800
3 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

4.18 PROC TRANSPOSE STATEMENT

Transpõe as variáveis de uma tabela.

Tabela Origem
Obs DT_REF CDPASTA NOME AREA PROVISAO PROV_AT PROV_AT_ROUND
1 01/01/2014 123 BILLY BARROS ITCV 1000 1052.32 1052
2 01/02/2014 124 TALITA O9BJ ITCV 1200 1262.78 1263
3 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 1578.47 1578
4 01/02/2014 223 NEIDE MAÇA DCRPF 1500 1578.47 1578
5 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 21046.30 21046
6 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 263078.75 263079

34
Exemplo 1:

/* TRANSFORMA COLUNA EM LINHA (COM A BASE JA ORDENADA) */


PROC TRANSPOSE
NAME = TIPO_VALOR /* VARIAVEL QUE RECEBERÁ O NOME DA COLUNA */
DATA = TB_PROV2 /* NOME DA TABELA ORIGEM */
OUT = TB_COLUNA_LINHA(RENAME=(COL1=VALOR)); /* NOME DA TABELA DESTINO */
BY /* VARIVEIS QUE SE MANTEM NA COLUNA */
CDPASTA
DT_REF
;
VAR /* VARIAVEIS QUE IRÃO SE TORNAR LINHA */
PROVISAO:
PROV_AT_ROUND:
;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = TB_COLUNA_LINHA;
RUN;

Obs CDPASTA DT_REF TIPO_VALOR VALOR

1 123 01/01/2014 PROVISAO 1000

2 123 01/01/2014 PROV_AT_ROUND 1052

3 124 01/02/2014 PROVISAO 1200

4 124 01/02/2014 PROV_AT_ROUND 1263

5 222 01/01/2014 PROVISAO 1500

6 222 01/01/2014 PROV_AT_ROUND 1578

7 223 01/02/2014 PROVISAO 1500

8 223 01/02/2014 PROV_AT_ROUND 1578

9 333 01/01/2014 PROVISAO 20000

10 333 01/01/2014 PROV_AT_ROUND 21046

11 334 01/03/2014 PROVISAO 250000

12 334 01/03/2014 PROV_AT_ROUND 263079

35
Exemplo 2:

/* TRANSFORMA LINHA EM COLUNA (COM A BASE JA ORDENADA) */


PROC TRANSPOSE
DATA = TB_COLUNA_LINHA /* NOME DA TABELA ORIGEM */
OUT = TB_LINHA_COLUNA (DROP = _NAME_); /* NOME DA TABELA DESTINO */
BY /* VARIVEIS QUE SE MANTEM NA LINHA */
CDPASTA
DT_REF
;
ID /* VARIAVEL QUE GERARÁ O NOME DAS COLUNAS */
TIPO_VALOR;
VAR /* VARIAVEL COM OS VALORES A SEREM POPULADOS NAS COLUNAS GERADAS PELO TIPO
VALOR */
VALOR:;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = TB_LINHA_COLUNA;
RUN;

Obs CDPASTA DT_REF PROVISAO PROV_AT_ROUND

1 123 01/01/2014 1000 1052

2 124 01/02/2014 1200 1263

3 222 01/01/2014 1500 1578

4 223 01/02/2014 1500 1578

5 333 01/01/2014 20000 21046

6 334 01/03/2014 250000 263079

4.19 PROC FCMP STATEMENT (CRIAR SUA PRÓPRIA FUNÇÃO EM SAS)

Cria sua própria função para utilização em qualquer programa SAS.

Exemplo:
Primeiramente precisamos listar a biblioteca a qual estaremos gravando esta função para posterior utilização e
neste caso escolhemos a ACRF_MEN (/home/cau002/acrf/def/sgcoc/gpre/menomar/) arquivo FUNCS.MATH.
Para utilização posterior basta lista o biblioteca de funções criada através do comando OPTIONS CMPLIB =
ACRF_MEN.FUNCS;. No exemplo criamos a função MOB que possui 2 parâmetros a ser passados DATA_INICIO e

36
DATA_FIM quando a função for chamada. Esta função faz um calculo para obter a quantidade de meses entre
duas datas de referencia, porém em formato numérico “201409”. O calculo é realizado e passado para a variável
RESULTADO que retorna o valor a função.

/* CRIA FUNÇÃO DO USUÁRIO */


PROC FCMP OUTLIB=ACRF_MEN.FUNCS.MATH;

FUNCTION MOB(DATA_INICIO, DATA_FIM);

RESULTADO = (((SUBSTR(PUT(DATA_FIM,Z6.),1,4)*1)-
(SUBSTR(PUT(DATA_INICIO,Z6.),1,4)*1))*12)+
((SUBSTR(PUT(DATA_FIM,Z6.),5,2)*1)-
(SUBSTR(PUT(DATA_INICIO,Z6.),5,2)*1));

RETURN(RESULTADO);

ENDSUB;

/* CARREGA A FUNÇÃO PARA PODER UTILIZA-LA */


OPTIONS CMPLIB = ACRF_MEN.FUNCS;

Depois de criada a função chamamos a biblioteca (OPTIONS acima) podemos utilizer a função conforme
código abaixo, a quantidade de meses entre 201301 e 201310 é 9.

/* CRIA TABELA E EXECUTA A FUNÇÃO */


DATA
MESES_ENTRE_DTREF;
QTDE_MESES = MOB(201301,201310);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = MESES_ENTRE_DTREF;
RUN;

Obs QTDE_MESES

1 9

37
4.20 MACRO STATEMENT
Começa uma definição de macro.

Sintaxe
%MACRO nome_da_macro (<parametros>);

Exemplo:
No exemplo abaixo criamos a macro função chamada ALTERA_NOME para fazer a alterações de nomes dentro
de uma tabela. A macro possui os parâmetros a serem informados: NOME_PARA (qual será o novo nome) e
NOME_DE (nome atual). Criada a macro, executamos a mesma que ficará em memória até que os parâmetros
sejam passados para macro. Para chamar a macro e passar os parâmetros para execução colocamos o % na
frente do nome da macro e passamos os parâmetros desta forma: %ALTERA_NOME('JULYANA B. CHOCOLATE',
'JULYANA YUMI');. Feito isso o Proc SQL que esta na macro receberá os parâmetros e será executado e irá
alterar o nome existente na tabela de 'JULYANA B. CHOCOLATE' para 'JULYANA YUMI'. Depois você poderá
chamar a macro N vezes como fizemos no exemplo depois (%ALTERA_NOME('NEIDE MAÇÃ', 'NEIDE BARROS'))
isso evita que você precise criar muitos programas, neste caso, muitos PROC SQL para fazer a mesma coisa
mudando apenas o parâmetro.

/* MACRO - ATUALIZA TABELA */


%MACRO ALTERA_NOME(NOME_DE, NOME_PARA);

PROC SQL;
UPDATE PROVISAO_AREAS_V1
SET NOME = &NOME_PARA.
WHERE NOME = &NOME_DE.;
QUIT;

%MEND ALTERA_NOME;

/* CHAMANDA DA MACRO */
%ALTERA_NOME('JULYANA B. CHOCOLATE', 'JULYANA YUMI');
%ALTERA_NOME('NEIDE MAÇÃ', 'NEIDE BARROS');

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = PROVISAO_AREAS_V1;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY DICAS ITCV 1000

38
Obs DT_REF CDPASTA NOME AREA PROVISAO

2 01/01/2014 222 JULYANA YUMI DCRPF 1500

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000

4 01/02/2014 123 BILLY DICAS ITCV 1800

5 01/02/2014 222 JULYANA YUMI DCRPF 1500

6 01/02/2014 223 NEIDE BARROS DCRPF 1500

7 01/02/2014 124 TALITA O9BJ ITCV 1200

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000

9 01/03/2014 222 JULYANA YUMI DCRPF 1650

10 01/03/2014 123 BILLY DICAS ITCV 1950

11 01/03/2014 124 TALITA O9BJ ITCV 1300

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

4.21 UPDATE STATEMENT

Atualizar informações em uma tabela.

Exemplo:
No exemplo abaixo atualizamos o campo NOME apenas do conteúdo 'BILLY BARROS' para 'BILLY
DICAS'. Vale lembrar que a alteração é definitiva na tabela origem e em caso de dúvida faça um backup

antes.

PROC SQL;
UPDATE PROVISAO_AREAS_V1
SET NOME = 'BILLY DICAS'
WHERE NOME = 'BILLY BARROS';
QUIT;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = PROVISAO_AREAS_V1;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY DICAS ITCV 1000

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

39
Obs DT_REF CDPASTA NOME AREA PROVISAO

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000

4 01/02/2014 123 BILLY DICAS ITCV 1800

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500

7 01/02/2014 124 TALITA O9BJ ITCV 1200

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650

10 01/03/2014 123 BILLY DICAS ITCV 1950

11 01/03/2014 124 TALITA O9BJ ITCV 1300

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

4.22 DELETE STATEMENT


Exclui as linhas de uma tabela.

Exemplo : Excluindo linha de uma tabela mediante condições informadas


Exclui as linhas que a informação é passada através do IF. No exemplo será excluído da tabela BASE_ITCV todas
as linhas onde o campo NOME for igual a BILLY BARROS.

/* CRIA TABELA*/
DATA
TB_EXCLUI_LINHA;
SET
BASE_ITCV;
IF
NOME='BILLY BARROS' THEN DELETE;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_EXCLUI_LINHA;
RUN;
BASE_ITCV
Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/02/2014 124 TALITA O9BJ ITCV 1200

2 01/03/2014 124 TALITA O9BJ ITCV 1300

Todas as linhas cujo campo nome estava populado com 'BILLY BARROS' foram excluídas.
40
4.23 FILENAME SEND E-MAIL STATEMENT
Envia e-mail utilizando o SAS.

Obs DATA_REF AREA GRANDE_AREA SIGLA


1 01JAN2009 8 BANCO VAREJO BPF
2 01JAN2009 10 BANCO VAREJO BPF
3 01JAN2009 22 BANCO VAREJO BPF
4 01JAN2009 23 BANCO VAREJO BPF
5 01JAN2009 28 BANCO VAREJO DEOP
6 01JAN2009 32 BANCO VAREJO BPF
7 01JAN2009 40 BANCO VAREJO BMG
8 01JAN2009 46 BANCO VAREJO CONSIG
9 01JAN2009 80 BANCO VAREJO BPF
10 01JAN2009 89 BANCO VAREJO CEI
11 01JAN2009 90 BANCO VAREJO BPF
BASE_IMPORT

Exemplo: Envia e-mail


No exemplo abaixo, primeiramente criamos a tabela BASE_IMPORT_EMAIL com base na tabela BASE_IMPORT
filtrando apenas que possui no campo SIGLA o conteúdo 'BPF'. Caso queira encaminhar algum arquivo
anexo, coloque no seu diretório do SAS (o meu utilizei /home/cau002/acrf/def/sgcoc/gpre/menomar/)
você pode colocar através de algum programa de FTP como por exemplo (WS_FTP contate o Help Desk) e insira
o nome do arquivo no ATTACH conforme código abaixo. Em TO coloque o e-mail do destinatário do conteúdo e
em SUBJECT insira o assunto. No Proc Print você poderá inserir o cabeçalho que irá no corpo do e-mail (TITLE) e
o rodapé (FOOTNOTE). O resultado da tabela BASE_IMPORT_EMAIL sera encaminhado no corpo do e-mail.

/* CRIA TABELA PARA CORPO DE E-MAIL */


DATA
BASE_IMPORT_EMAIL;
SET
BASE_IMPORT;
WHERE
SIGLA='BPF';
RUN;

41
/* ENVIA E-MAIL */
FILENAME SEND EMAIL SUBJECT="VP_DE_PARA"
TO="[email protected]"
CC = ("[email protected]")
TYPE="TEXT/HTML"
ATTACH = '/home/cau002/acrf/def/sgcoc/gpre/menomar/VP_DE_PARA_EXPORT.CSV';

ODS HTML BODY=SEND;

PROC PRINT DATA=BASE_IMPORT_EMAIL;


TITLE 'SEGUE RELAÇÃO DE VPS';
FOOTNOTE 'QUALQUER DÚVIDA ESTAMOS A DISPOSIÇÃO - GCPRO
FONE: 7070';

RUN;

ODS HTML CLOSE;

Resultado enviado por e-mail

5. FUNÇÕES

5.1 LENGTH FUNCTION


Retorna o comprimento de uma cadeia de caracteres não-branco, excluindo espaços à direita e retorna 1 para
uma sequência de caracteres em branco.

Sintaxe
LENGTH (<texto>)

42
Exemplo: Criando um campo e contando a quantidade de caracteres

Neste exemplo criamos a tabela CONTAR_CARACTER a partir da tabela origem PROVISAO_AREAS_V1. Criamos
nesta nova tabela o campo QTDE_CARACTER e utilizamos a função LENGTH para contar a quantidade de
caracteres contida no campo área de cada linha da tabela.

/* CRIA A TABELA */
DATA
CONTAR_CARACTER;
SET
PROVISAO_AREAS_V1;
QTDE_CARACTER = LENGTH(NOME);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=CONTAR_CARACTER;
RUN;

Resultado do PROC PRINT:

Obs DT_REF CDPASTA NOME AREA PROVISAO QTDE_CARACTER

1 01/01/2014 123 BILLY BARROS ITCV 1000 12

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 20

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 19

4 01/02/2014 123 BILLY BARROS ITCV 1800 12

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 20

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 10

7 01/02/2014 124 TALITA O9BJ ITCV 1200 11

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 19

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 20

10 01/03/2014 123 BILLY BARROS ITCV 1950 12

11 01/03/2014 124 TALITA O9BJ ITCV 1300 11

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 19

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 21

43
5.2 SUBSTR FUNCTION
Substitui o valor definido na função.

Sintaxe
SUBSTR (<variável>, <posição> , <comprimento>) = conteúdo a substituir.

Exemplo 1: Criando um campo novo e substituindo parte do texto


Em nosso exemplo criamos a tabela SUBSTITUIR_TEXTO a partir da tabela origem PROVISAO_AREAS_V1. Apenas
se a área for ITCV, substituímos a partir do terceiro caracter (ITCV) os próximos 6 caracteres por “AUCRED”, ou
seja, o conteúdo do campo será alterado de ITCV para ITAUCRED.

/* CRIA A TABELA */
DATA
SUBSTITUIR_TEXTO;
SET
PROVISAO_AREAS_V1;
IF AREA = 'ITCV' THEN
SUBSTR(AREA,3,6)="AUCRED";
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=SUBSTITUIR_TEXTO;
RUN;
Resultado do PROC PRINT:
Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY BARROS ITAUCRED 1000

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000

4 01/02/2014 123 BILLY BARROS ITAUCRED 1800

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500

7 01/02/2014 124 TALITA O9BJ ITAUCRED 1200

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650

10 01/03/2014 123 BILLY BARROS ITAUCRED 1950

11 01/03/2014 124 TALITA O9BJ ITAUCRED 1300

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

44
Exemplo 2: Criando um campo novo e substituindo parte do texto por vazio
No exemplo a seguir, criamos a tabela SUBSTITUIR_TEXTO_VAZIO a partir da tabela origem
PROVISAO_AREAS_V1. Nesta tabela criamos o campo ABREVIACAO_NOME, a partir do campo NOME mantendo
apenas os 3 caracteres a partir da primeira posição conforme Sintaxe passados para a função.
Dica: Quando criamos um campo texto sem informar a quantidade de posições que ele irá ter, o SAS por padrão
cria o campo com a quantidade de posições obtidas através do conteúdo da primeira linha criada, por exemplo,
se o conteúdo da primeira for “AU” ele terá duas posições, assim, se em outra linha o conteúdo for “AUDI”,
como o campo foi criado apenas com duas posições, o conteúdo será preenchido com “AU” apenas disprezando
o “DI”.

/* CRIA A TABELA */
DATA
SUBSTITUIR_TEXTO_VAZIO;
SET
PROVISAO_AREAS_V1;

ABREVIACAO_NOME = SUBSTR(NOME,1,3);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=SUBSTITUIR_TEXTO_VAZIO;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO ABREVIACAO_NOME

1 01/01/2014 123 BILLY BARROS ITCV 1000 BIL

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JUL

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 DAN

4 01/02/2014 123 BILLY BARROS ITCV 1800 BIL

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JUL

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 NEI

7 01/02/2014 124 TALITA O9BJ ITCV 1200 TAL

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 DAN

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 JUL

10 01/03/2014 123 BILLY BARROS ITCV 1950 BIL

11 01/03/2014 124 TALITA O9BJ ITCV 1300 TAL

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 DAN

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 FAB

45
5.3 OUTPUT STATEMENT

Utilizando o OUTPUT você conseguirá criar uma ou mais tabelas a partir de um DATA SET.

Exemplo: Criando três tabelas com OUTPUT


No exemplo abaixo criamos as tabelas BASE_ITCV, BASE_DCRPF, BASE_DCJE a partir da tabela
PROVISAO_AREAS_V1. A tabela BASE_ITCV é criada apenas com as linhas cujo a AREA seja igual a 'ITCV', a
tabela BASE_DCRPF é criada apenas com as linhas cujo a AREA seja igual a 'DCRPF' e a base BASE_DCJE é
criada com as demais linhas conforme condição estabelecida no DATA SET abaixo:

/* CRIA TABELA */
DATA BASE_ITCV
BASE_DCRPF
BASE_DCJE;
SET
PROVISAO_AREAS_V1;
IF AREA = 'ITCV' THEN
OUTPUT BASE_ITCV;
ELSE IF AREA = 'DCRPF' THEN
OUTPUT BASE_DCRPF;
ELSE
OUTPUT BASE_DCJE;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=BASE_ITCV;
RUN;
PROC PRINT DATA=BASE_DCRPF;
RUN;
PROC PRINT DATA=BASE_DCJE;
RUN;
Resultado dos PROC PRINTS:
BASE_ITCV
Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY BARROS ITCV 1000

2 01/02/2014 123 BILLY BARROS ITCV 1800

3 01/02/2014 124 TALITA O9BJ ITCV 1200

4 01/03/2014 123 BILLY BARROS ITCV 1950

5 01/03/2014 124 TALITA O9BJ ITCV 1300

46
BASE_DCRPF
Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

2 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

3 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500

4 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650

BASE_DCJE
Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000

2 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000

3 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050

4 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000

5.4 INPUT FUNCTION

Retorna o valor que é produzido quando SAS converte uma expressão usando o informat especificado.

Sintaxe
INPUT(<variavel>, <formato>)

Exemplo: Converte texto para numero


Na tabela TB_QTDE_PAES o campo QTDE_PAES é um campo texto porém tem um número populado
nele. Neste exemplo, criamos dois campos e populamos os dois com o conteúdo na forma numérica,
convertendo de duas formas diferentes, uma é utilizando a função INPUT passando o conteúdo da variável e
formatando com 10 posições, então se o texto tiver até 10 posições ele fará a conversão corretamente (campo
QTDE_PAES_NUMERICO_V1) e a outra é a mais simples apenas multiplicando por 1 ele já transforma o novo
campo em numérico (campo QTDE_PAES_NUMERICO_V2).

47
/* CRIA TABELA*/
DATA
TB_QTDE_PAES_NUMERICO;
SET
TB_QTDE_PAES;

QTDE_PAES_NUMERICO_V1 = INPUT(QTDE_PAES,10.);
QTDE_PAES_NUMERICO_V2 = QTDE_PAES*1;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_QTDE_PAES_NUMERICO;
RUN;

Resultado do PROC PRINT:

Obs NOME AREA QTDE_PAES QTDE_PAES_NUMERICO_V1 QTDE_PAES_NUMERICO_V2

1 BILLY BARROS ITCV 5 5 5

2 JULYANA B. CHOCOLATE DCRPF 3 3 3

3 DANIEL R. WARDS xXx DCJE 2 2 2

4 BILLY BARROS ITCV 5 5 5

5 JULYANA B. CHOCOLATE DCRPF 3 3 3

6 NEIDE MAÇÃ DCRPF 0 0 0

7 TALITA O9BJ ITCV 2 2 2

8 DANIEL R. WARDS xXx DCJE 2 2 2

9 JULYANA B. CHOCOLATE DCRPF 3 3 3

10 BILLY BARROS ITCV 5 5 5

11 TALITA O9BJ ITCV 2 2 2

12 DANIEL R. WARDS xXx DCJE 2 2 2

13 FABIANA PULGA BATISTA DCJE 2 2 2

5.5 PUT FUNCTION


Retorna um valor usando um formato especificado.

Sintaxe
PUT(<variavel >,<formato>)

Exemplo: Converte numero para texto

48
Criamos o campo QTDE_PAES_TEXTO na tabela TB_QTDE_PAES_TEXTO e populamos o mesmo como o valor que
está contido no campo QTDE_PAES_NUMERICO_V1 da tabela TB_QTDE_PAES_NUMERICO que está em formato
numérico convertendo para texto utilizando a função PUT. Neste exemplo passamos a variável
QTDE_PAES_NUMERICO_V1 para função e o formato Z3. para que o mesmo converta para texto, porém
mantenha 3 posições conforme formato passado. Confira o resultado na tabela abaixo extraída do
processamento deste código.

/* CRIA TABELA*/
DATA
TB_QTDE_PAES_TEXTO;
SET
TB_QTDE_PAES_NUMERICO;

QTDE_PAES_TEXTO = PUT(QTDE_PAES_NUMERICO_V1,Z3.);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_QTDE_PAES_TEXTO;
RUN;

Resultado do PROC PRINT:


Obs NOME AREA QTDE_PAES QTDE_PAES_NUMERICO_V1 QTDE_PAES_NUMERICO_V2 QTDE_PAES_TEXTO

1 BILLY BARROS ITCV 5 5 5 005

2 JULYANA B. CHOCOLATE DCRPF 3 3 3 003

3 DANIEL R. WARDS xXx DCJE 2 2 2 002

4 BILLY BARROS ITCV 5 5 5 005

5 JULYANA B. CHOCOLATE DCRPF 3 3 3 003

6 NEIDE MAÇÃ DCRPF 0 0 0 000

7 TALITA O9BJ ITCV 2 2 2 002

8 DANIEL R. WARDS xXx DCJE 2 2 2 002

9 JULYANA B. CHOCOLATE DCRPF 3 3 3 003

10 BILLY BARROS ITCV 5 5 5 005

11 TALITA O9BJ ITCV 2 2 2 002

12 DANIEL R. WARDS xXx DCJE 2 2 2 002

13 FABIANA PULGA BATISTA DCJE 2 2 2 002

49
5.6 SCAN FUNCTION
Retorna a palavra enésima de uma cadeia de caracteres.

Sintaxe
SCAN(<texto>,<posição palavra>,<modificação>)

Exemplo:
Neste exemplo criamos dois campos, um para o primeiro nome e outro para o sobrenome. O campo
PRIMEIRO_NOME recebe o primeiro nome a partir do campo NOME oriundo da tabela PROVISAO_AREAS_V1 e
o campo SOBRENOME recebe o sobrenome (último) a partir do campo NOME também. Quando passamos o
número 1 na função SCAN para a <posição palavra> ele trará a primeira palavra e quando passamos o -1 ele
também trará a primeira na forma inversa, neste caso a última.

/* CRIA A TABELA */
DATA
TB_NOME_SOBRENOME;
SET
PROVISAO_AREAS_V1;

PRIMEIRO_NOME = SCAN(NOME,1,'');
SOBRENOME = SCAN(NOME,-1,'');

RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_NOME_SOBRENOME;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO PRIMEIRO_NOME SOBRENOME

1 01/01/2014 123 BILLY BARROS ITCV 1000 BILLY BARROS

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANA CHOCOLATE

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIEL xXx

4 01/02/2014 123 BILLY BARROS ITCV 1800 BILLY BARROS

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANA CHOCOLATE

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 NEIDE MAÇÃ

7 01/02/2014 124 TALITA O9BJ ITCV 1200 TALITA O9BJ

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIEL xXx

50
Obs DT_REF CDPASTA NOME AREA PROVISAO PRIMEIRO_NOME SOBRENOME

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 JULYANA CHOCOLATE

10 01/03/2014 123 BILLY BARROS ITCV 1950 BILLY BARROS

11 01/03/2014 124 TALITA O9BJ ITCV 1300 TALITA O9BJ

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 DANIEL xXx

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 FABIANA BATISTA

5.7 ROUND FUNCTION

Arredonda o primeiro argumento para o múltiplo mais próximo do segundo argumento, ou para o número
inteiro mais próximo, quando o segundo argumento for omitido.

Sintaxe
ROUND (<argumento >, <arredondando>)

Exemplo: Arredonda número para o mais próximo


Neste exemplo criamos o campo PROV_AT com o valor da provisão atualizado e em seguida criamos o campo
PROV_AT_ROUND arredondado para o mais próximo.

/* CRIA A TABELA */
DATA
TB_ARREDANDAMENTO_EX1 (DROP = NOME AREA);
SET
PROVISAO_AREAS_V1;

PROV_AT = PROVISAO * 1.052315; /* 5,2315% */


PROV_AT_ROUND = ROUND(PROV_AT);

RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_ARREDANDAMENTO_EX1;
RUN;

51
Resultado do PROC PRINT:

Obs DT_REF CDPASTA PROVISAO PROV_AT PROV_AT_ROUND

1 01/01/2014 123 1000 1052.32 1052

2 01/01/2014 222 1500 1578.47 1578

3 01/01/2014 333 20000 21046.30 21046

4 01/02/2014 123 1800 1894.17 1894

5 01/02/2014 222 1500 1578.47 1578

6 01/02/2014 223 1500 1578.47 1578

7 01/02/2014 124 1200 1262.78 1263

8 01/02/2014 333 20000 21046.30 21046

9 01/03/2014 222 1650 1736.32 1736

10 01/03/2014 123 1950 2052.01 2052

11 01/03/2014 124 1300 1368.01 1368

12 01/03/2014 333 21050 22151.23 22151

13 01/03/2014 334 250000 263078.75 263079

5.8 FLOOR FUNCTION

Retorna o inteiro que é menor ou igual ao argumento para evitar imprevistos resultados de ponto flutuante,
resumindo arredonda o número para baixo.

Sintaxe
FLOOR (<argumento>)

Exemplo: Arredonda número para baixo


Neste exemplo criamos o campo PROV_AT_FLOOR em cima do campo da provisão atualizada. Utilizamos a
função FLOOR para arredondar o número para baixo.

/* CRIA A TABELA */
DATA
TB_ARREDANDAMENTO_EX2;
SET
TB_ARREDANDAMENTO_EX1;

PROV_AT_FLOOR = FLOOR(PROV_AT);

RUN;
52
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_ARREDANDAMENTO_EX2;
RUN;

Resultado do PROC PRINT:

Obs DT_REF CDPASTA PROVISAO PROV_AT PROV_AT_ROUND PROV_AT_FLOOR

1 01/01/2014 123 1000 1052.32 1052 1052

2 01/01/2014 222 1500 1578.47 1578 1578

3 01/01/2014 333 20000 21046.30 21046 21046

4 01/02/2014 123 1800 1894.17 1894 1894

5 01/02/2014 222 1500 1578.47 1578 1578

6 01/02/2014 223 1500 1578.47 1578 1578

7 01/02/2014 124 1200 1262.78 1263 1262

8 01/02/2014 333 20000 21046.30 21046 21046

9 01/03/2014 222 1650 1736.32 1736 1736

10 01/03/2014 123 1950 2052.01 2052 2052

11 01/03/2014 124 1300 1368.01 1368 1368

12 01/03/2014 333 21050 22151.23 22151 22151

13 01/03/2014 334 250000 263078.75 263079 263078

5.9 CELL FUNCTION


Retorna o inteiro que é maior ou igual ao argumento para evitar imprevistos resultados de ponto flutuante,
resumindo arredonda o número para cima.

Sintaxe
CEIL (<argumento>)

Exemplo: Arredonda número para cima


Neste exemplo criamos o campo PROV_AT_CEIL em cima do campo da provisão atualizada. Utilizamos a função
CEIL para arredondar o número para cima.

53
/* CRIA A TABELA */
DATA
TB_ARREDANDAMENTO_EX3;
SET
TB_ARREDANDAMENTO_EX2;

PROV_AT_CEIL = CEIL(PROV_AT);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_ARREDANDAMENTO_EX3;
RUN;

Resultado do PROC PRINT:

Obs DT_REF CDPASTA PROVISAO PROV_AT PROV_AT_ROUND PROV_AT_FLOOR PROV_AT_CEIL

1 01/01/2014 123 1000 1052.32 1052 1052 1053

2 01/01/2014 222 1500 1578.47 1578 1578 1579

3 01/01/2014 333 20000 21046.30 21046 21046 21047

4 01/02/2014 123 1800 1894.17 1894 1894 1895

5 01/02/2014 222 1500 1578.47 1578 1578 1579

6 01/02/2014 223 1500 1578.47 1578 1578 1579

7 01/02/2014 124 1200 1262.78 1263 1262 1263

8 01/02/2014 333 20000 21046.30 21046 21046 21047

9 01/03/2014 222 1650 1736.32 1736 1736 1737

10 01/03/2014 123 1950 2052.01 2052 2052 2053

11 01/03/2014 124 1300 1368.01 1368 1368 1369

12 01/03/2014 333 21050 22151.23 22151 22151 22152

13 01/03/2014 334 250000 263078.75 263079 263078 263079

5.10 INT FUNCTION


Retorna o valor inteiro para evitar imprevistos resultados de ponto flutuante.

Sintaxe
INT (<argumento>)

54
Exemplo: Retorna a parte inteira de um número
Neste exemplo é criado o campo PROV_AT_INT em cima do campo da provisão atualizada. Utilizamos a função
INT para retorna a parte inteira da provisão.

/* CRIA A TABELA */
DATA
TB_ARREDANDAMENTO_EX4;
SET
TB_ARREDANDAMENTO_EX3;

PROV_AT_INT = INT(PROV_AT);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_ARREDANDAMENTO_EX4;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA PROVISAO PROV_AT PROV_AT_ROUND PROV_AT_FLOOR PROV_AT_CEIL PROV_AT_INT

1 01/01/2014 123 1000 1052.32 1052 1052 1053 1052

2 01/01/2014 222 1500 1578.47 1578 1578 1579 1578

3 01/01/2014 333 20000 21046.30 21046 21046 21047 21046

4 01/02/2014 123 1800 1894.17 1894 1894 1895 1894

5 01/02/2014 222 1500 1578.47 1578 1578 1579 1578

6 01/02/2014 223 1500 1578.47 1578 1578 1579 1578

7 01/02/2014 124 1200 1262.78 1263 1262 1263 1262

8 01/02/2014 333 20000 21046.30 21046 21046 21047 21046

9 01/03/2014 222 1650 1736.32 1736 1736 1737 1736

10 01/03/2014 123 1950 2052.01 2052 2052 2053 2052

11 01/03/2014 124 1300 1368.01 1368 1368 1369 1368

12 01/03/2014 333 21050 22151.23 22151 22151 22152 22151

13 01/03/2014 334 250000 263078.75 263079 263078 263079 263078

5.11 LOWCASE FUNCTION


Converte todas as letras em um argumento em minúsculas.

Sintaxe
LOWCASE (<argumento>)

55
Exemplo: Converte as letras para minúscula
No exemplo abaixo descrito, é criado o campo NOME_MIN com base no campo NOME convertendo todas as
letras para minúsculas.

/* CRIA A TABELA */
DATA
TB_MINUSCULA;
SET
PROVISAO_AREAS_V1;

NOME_MIN = LOWCASE(NOME);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_MINUSCULA;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO NOME_MIN

1 01/01/2014 123 BILLY BARROS ITCV 1000 billy barros

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 julyana b. chocolate

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 daniel r. wards xxx

4 01/02/2014 123 BILLY BARROS ITCV 1800 billy barros

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 julyana b. chocolate

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 neide MAÇÃ

7 01/02/2014 124 TALITA O9BJ ITCV 1200 talita o9bj

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 daniel r. wards xxx

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 julyana b. chocolate

10 01/03/2014 123 BILLY BARROS ITCV 1950 billy barros

11 01/03/2014 124 TALITA O9BJ ITCV 1300 talita o9bj

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 daniel r. wards xxx

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 fabiana pulga batista

5.12 UPCASE FUNCTION


Converte todas as letras em um argumento em maiúsculas.

Sintaxe
UPCASE (<argumento>)

56
Exemplo: Converte as letras para maiúsculas
No exemplo abaixo descrito, é criado o campo NOME_MAI com base no campo NOME convertendo todas as
letras para maiúsculas.
Dica: Lembrando que o UNIX é case sensitive, existe diferença entre letras maiúsculas e minúsculas, assim,
podemos utilizar para evitar erros no cruzamento entre tabelas utilizando por exemplo o INNER JOIN.

/* CRIA A TABELA */
DATA
TB_MAIUSCULA;
SET
TB_MINUSCULA;

NOME_MAI = UPCASE(NOME_MIN);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_MAIUSCULA;
RUN;

Resultado do PROC PRINT:

Obs DT_REF CDPASTA NOME AREA PROVISAO NOME_MIN NOME_MAI

1 01/01/2014 123 BILLY BARROS ITCV 1000 billy barros BILLY BARROS

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 julyana b. chocolate JULYANA B. CHOCOLATE

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 daniel r. wards xxx DANIEL R. WARDS XXX

4 01/02/2014 123 BILLY BARROS ITCV 1800 billy barros BILLY BARROS

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 julyana b. chocolate JULYANA B. CHOCOLATE

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 neide MAÇÃ NEIDE MAÇÃ

7 01/02/2014 124 TALITA O9BJ ITCV 1200 talita o9bj TALITA O9BJ

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 daniel r. wards xxx DANIEL R. WARDS XXX

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 julyana b. chocolate JULYANA B. CHOCOLATE

10 01/03/2014 123 BILLY BARROS ITCV 1950 billy barros BILLY BARROS

11 01/03/2014 124 TALITA O9BJ ITCV 1300 talita o9bj TALITA O9BJ

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 daniel r. wards xxx DANIEL R. WARDS XXX

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 fabiana pulga batista FABIANA PULGA BATISTA

57
5.13 PROPCASE FUNCTION
Converte em maiúscula a primeira letra de todas as palavras.

Sintaxe
PROPCASE(<argumento>,<delimitador>)

Exemplo: Converte a primeira letra das palavras para maiúscula


No exemplo abaixo criamos o campo NOME_PMAI com base no campo NOME convertendo as primeiras letras
de todas as palavras para maiúsculas.

/* CRIA A TABELA */
DATA
TB_PRI_MAIUSCULA;
SET
TB_MAIUSCULA;

NOME_PMAI = PROPCASE(NOME_MIN);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_PRI_MAIUSCULA;
RUN;

Resultado do PROC PRINT:

Obs DT_REF CDPASTA NOME AREA PROVISAO NOME_MIN NOME_MAI NOME_PMAI

1 01/01/2014 123 BILLY BARROS ITCV 1000 billy barros BILLY BARROS Billy Barros

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 julyana b. chocolate JULYANA B. CHOCOLATE Julyana B. Chocolate

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 daniel r. wards xxx DANIEL R. WARDS XXX Daniel R. Wards Xxx

4 01/02/2014 123 BILLY BARROS ITCV 1800 billy barros BILLY BARROS Billy Barros

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 julyana b. chocolate JULYANA B. CHOCOLATE Julyana B. Chocolate

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 neide MAÇÃ NEIDE MAÇÃ Neide MAÇÃ

7 01/02/2014 124 TALITA O9BJ ITCV 1200 talita o9bj TALITA O9BJ Talita O9bj

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 daniel r. wards xxx DANIEL R. WARDS XXX Daniel R. Wards Xxx

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 julyana b. chocolate JULYANA B. CHOCOLATE Julyana B. Chocolate

10 01/03/2014 123 BILLY BARROS ITCV 1950 billy barros BILLY BARROS Billy Barros

11 01/03/2014 124 TALITA O9BJ ITCV 1300 talita o9bj TALITA O9BJ Talita O9bj

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 daniel r. wards xxx DANIEL R. WARDS XXX Daniel R. Wards Xxx

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 fabiana pulga batista FABIANA PULGA BATISTA Fabiana Pulga Batista

58
5.14 INDEX FUNCTION
Pesquisas uma expressão de caracteres de uma sequência de caracteres e retorna a posição do primeiro
caractere da cadeia para a primeira ocorrência do texto.

Sintaxe
INDEX (<variavel>, <texto>)

Exemplo 1: Procura texto e informa o número referente à posição desejada


Neste exemplo criamos o campo POSICAO e atribuímos o número referente à posição da palavra pesquisada
que é 'xXx' para as linhas que forem encontradas. Depois criamos o campo VERDADEIRO e atribuímos o valor
'SIM' quando a condição for atendida, ou seja, quando o texto 'xXx' for encontrado na variável NOME.

/* CRIA A TABELA */
DATA
TB_INDEX_EX1;
SET
PROVISAO_AREAS_V1;

POSICAO = INDEX(NOME,'xXx');

IF INDEX(NOME,'xXx') THEN
VERDADEIRO = 'SIM';
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_INDEX_EX1;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO POSICAO VERDADEIRO

1 01/01/2014 123 BILLY BARROS ITCV 1000 0

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 0

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 17 SIM

4 01/02/2014 123 BILLY BARROS ITCV 1800 0

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 0

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 0

7 01/02/2014 124 TALITA O9BJ ITCV 1200 0

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 17 SIM

59
Obs DT_REF CDPASTA NOME AREA PROVISAO POSICAO VERDADEIRO

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 0

10 01/03/2014 123 BILLY BARROS ITCV 1950 0

11 01/03/2014 124 TALITA O9BJ ITCV 1300 0

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 17 SIM

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 0

Exemplo 2: Procura texto em variável e atribui valor a um campo criado se a condição dor verdadeira
Neste exemplo criamos o campo NOVO_NOME e atribuímos um valor para ele se a condição estipulada for
verdadeira. Se o campo NOME contém o texto 'xXx' em qualquer parte do campo, será atribuída a variável
criada o conteúdo da variável NOME da primeira posição até a posição 16 (17-1), desta forma eliminamos o
texto 'xXx'. O nome é alterado de DANIEL R. WARDS xXx para DANIEL R. WARDS.

/* CRIA A TABELA */
DATA
TB_INDEX_EX2;
SET
TB_INDEX_EX1;

IF INDEX(NOME,'xXx') THEN
NOVO_NOME = SUBSTR(NOME,1,INDEX(NOME,'xXx')-1);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_INDEX_EX2;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO POSICAO VERDADEIRO NOVO_NOME

1 01/01/2014 123 BILLY BARROS ITCV 1000 0

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 0

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 17 SIM DANIEL R. WARDS

4 01/02/2014 123 BILLY BARROS ITCV 1800 0

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 0

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 0

7 01/02/2014 124 TALITA O9BJ ITCV 1200 0

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 17 SIM DANIEL R. WARDS

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 0

60
Obs DT_REF CDPASTA NOME AREA PROVISAO POSICAO VERDADEIRO NOVO_NOME

10 01/03/2014 123 BILLY BARROS ITCV 1950 0

11 01/03/2014 124 TALITA O9BJ ITCV 1300 0

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 17 SIM DANIEL R. WARDS

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 0

5.15 %LET STATEMENT


Cria uma variável de macro variável e atribui a ele um valor.
Esta macro variável pode ser utilizada em todo o código/projeto do SAS.

Sintaxe
%LET <nome macro variável> = <valor>

Exemplo:
Neste exemplo criamos à macro variável DT_REF e atribuímos a data SAS 01/09/2014. Atribuímos o valor a
variável DATA_REFERENCIA criada no data step, chamando através do & antes do nome da macro variável, ou
seja, &DT_REF.. OBS: Esta macro variável poderá ser utilizada em toda a extensão do seu código SAS.

/* MACRO VARIAVEL */
%LET DT_REF = '01SEP2014'D;

/* CRIA A TABELA */
DATA
TB_DATA_REFERENCIA;
SET
TB_COMPRESS_EX2;

DATA_REFERENCIA = &DT_REF.; /* ATRIBUI A DATA A VARIAVEL */


FORMAT DATA_REFERENCIA DDMMYY10.;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_REFERENCIA;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO DATA_REFERENCIA


1 01/01/2014 123 BILLY BARROS ITCV 1000 01/09/2014
2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 01/09/2014
3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 01/09/2014
4 01/02/2014 123 BILLY BARROS ITCV 1800 01/09/2014
5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 01/09/2014

61
Obs DT_REF CDPASTA NOME AREA PROVISAO DATA_REFERENCIA
6 01/02/2014 223 NEIDE MAÇA DCRPF 1500 01/09/2014
7 01/02/2014 124 TALITA O9BJ ITCV 1200 01/09/2014
8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 01/09/2014
9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 01/09/2014
10 01/03/2014 123 BILLY BARROS ITCV 1950 01/09/2014
11 01/03/2014 124 TALITA O9BJ ITCV 1300 01/09/2014
12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 01/09/2014
13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 01/09/2014

5.16 %SYSFUNC FUNCTION


Executam funções do SAS ou funções escritas pelo usuário.
Normalmente utilizamos esta macro função quando queremos resolver uma função dentro de macro variável.

Sintaxe
%SYSFUNC (função)

Exemplo:
Neste exemplo utilizamos a macro função %SYSFUNC para resolver a função DATE e a função INTNX na macro
variável DT_ATUAL e ULT_DIA_MES_ATUAL respectivamente. O dia atual é 21/10/2014 e passando esta data
para a função INTNX (macro variável ULT_DIA_MES_ATUAL) conseguimos obter o último dia do mês atual.
Quando informamos como primeiro critério “MONTH” significa que iremos movimentar o mês para frente ou
para trás, ao passar o parâmetro “0” significa que queremos o mês vigente da data informada, no caso Outubro
e ao passar o parâmetro “END” significa que queremos o último dia, ou seja, 31/10/2014.

/* CRIA MACRO VARIAVEIS*/


%LET DT_ATUAL = %SYSFUNC(DATE()); /* DATA DO DIA ATUAL */
%LET ULT_DIA_MES_ATUAL = %SYSFUNC(INTNX(MONTH,&DT_ATUAL,0,END)); /* DATA DO ÚLTIMO
DIA DO MÊS */

/* CRIA TABELA */
DATA
TB_DATA_ULTIMO_DIA_MES (DROP = NOME_REMOVE_CARACTER);
SET
TB_COMPRESS_EX2;

ULTIMO_DIA_MES = &ULT_DIA_MES_ATUAL.;
FORMAT ULTIMO_DIA_MES DDMMYY10.;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_ULTIMO_DIA_MES;
RUN;

62
Obs DT_REF CDPASTA NOME AREA PROVISAO ULTIMO_DIA_MES
1 01/01/2014 123 BILLY BARROS ITCV 1000 31/10/2014
2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 31/10/2014
3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 31/10/2014
4 01/02/2014 123 BILLY BARROS ITCV 1800 31/10/2014
5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 31/10/2014
6 01/02/2014 223 NEIDE MAÇA DCRPF 1500 31/10/2014
7 01/02/2014 124 TALITA O9BJ ITCV 1200 31/10/2014
8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 31/10/2014
9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 31/10/2014
10 01/03/2014 123 BILLY BARROS ITCV 1950 31/10/2014
11 01/03/2014 124 TALITA O9BJ ITCV 1300 31/10/2014
12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 31/10/2014
13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 31/10/2014

5.17 %EVAL FUNCTION


Avalia expressões aritméticas e lógicas usando aritmética inteira.

Sintaxe
% EVAL (aritmético ou expressão lógica)

Exemplo: Cria macro variáveis e atribui valor

No exemplo abaixo criamos duas macro variáveis com os nomes: DIA_ATUAL e DIA_ANTERIOR. A macro variável
DIA_ATUAL recebe o valor referente à data do dia atual. Utilizamos à macro função %SYSFUNC para resolver a
data antes de utilizar a macro variável, se não utilizar a macro função %SYSFUNC, o date só será resolvido no
DATA SET impossibilitando calcular o valor para macro variável DIA_ANTERIOR. Após resolver e atribuir o valor
na macro variável DIA_ATUAL, utilizamos o valor para calcular o dia anterior e atribuir na macro variável
DIA_ANTERIOR, porém para efetuarmos cálculos em macro variáveis precisamos utilizar a macro função %EVAL,
caso contrário não conseguiremos realiza a operação.

/* MACRO VARIAVEIS */
%LET DIA_ATUAL = %SYSFUNC(DATE());
%LET DIA_ANTERIOR = %EVAL(&DIA_ATUAL-1);

/* CRIA TABELA */
DATA TB_DIAS;
HOJE = &DIA_ATUAL;
ONTEM = &DIA_ANTERIOR;

FORMAT
HOJE
ONTEM DDMMYY10.;
RUN;
63
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DIAS;
RUN;

Resultado do PROC PRINT:

Obs HOJE ONTEM

1 24/04/2014 23/04/2014

5.18 DATETIME FUNCTION


Retorna a data e a hora atual do dia como um valor datetime SAS.

Sintaxe
DATETIME ()

Exemplo: Atribui a data e hora atual


Neste exemplo criamos o campo DATA_REF e atribuímos valor da data e hora atual. Utilizamos o formato
DATETIME16..

/* CRIA A TABELA */
DATA
TB_DATA_EX1;
SET
PROVISAO_AREAS_V1;

DATA_REF = DATETIME();
FORMAT DATA_REF DATETIME16.;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX1;
RUN;

64
Resultado do PROC PRINT:
Obs DT_REF CDPASTA NOME AREA PROVISAO DATA_REF

1 01/01/2014 123 BILLY BARROS ITCV 1000 24APR14:14:59:36

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24APR14:14:59:36

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 24APR14:14:59:36

4 01/02/2014 123 BILLY BARROS ITCV 1800 24APR14:14:59:36

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24APR14:14:59:36

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 24APR14:14:59:36

7 01/02/2014 124 TALITA O9BJ ITCV 1200 24APR14:14:59:36

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 24APR14:14:59:36

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 24APR14:14:59:36

10 01/03/2014 123 BILLY BARROS ITCV 1950 24APR14:14:59:36

11 01/03/2014 124 TALITA O9BJ ITCV 1300 24APR14:14:59:36

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 24APR14:14:59:36

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 24APR14:14:59:36

5.19 DATE FUNCTION

Retorna a data atual como um valor de data.

Sintaxe
DATE()

Exemplo: Atribui a data atual


No exemplo abaixo criamos o campo DATA_REF e atribuímos valor da data. Utilizamos o formato DATETIME9..

/* CRIA A TABELA */
DATA
TB_DATA_EX2;
SET
PROVISAO_AREAS_V1;

DATA_REF = DATE();
FORMAT DATA_REF DATE9.;

RUN;

65
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX2;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO DATA_REF

1 01/01/2014 123 BILLY BARROS ITCV 1000 24APR2014

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24APR2014

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 24APR2014

4 01/02/2014 123 BILLY BARROS ITCV 1800 24APR2014

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24APR2014

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 24APR2014

7 01/02/2014 124 TALITA O9BJ ITCV 1200 24APR2014

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 24APR2014

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 24APR2014

10 01/03/2014 123 BILLY BARROS ITCV 1950 24APR2014

11 01/03/2014 124 TALITA O9BJ ITCV 1300 24APR2014

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 24APR2014

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 24APR2014

5.20 DAY FUNCTION


Retorna o dia do mês a partir de um valor de data SAS.

Sintaxe
DAY(date)

Exemplo: Atribui o dia a partir de uma data

No exemplo abaixo criamos o campo DIA_REF e atribuímos valor do dia a partir da data atual através da função
DATE.

/* CRIA A TABELA */
DATA
TB_DATA_EX3;
SET
PROVISAO_AREAS_V1;

DIA_REF = DAY(DATE());
RUN;

66
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX3;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO DIA_REF

1 01/01/2014 123 BILLY BARROS ITCV 1000 24

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 24

4 01/02/2014 123 BILLY BARROS ITCV 1800 24

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 24

7 01/02/2014 124 TALITA O9BJ ITCV 1200 24

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 24

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 24

10 01/03/2014 123 BILLY BARROS ITCV 1950 24

11 01/03/2014 124 TALITA O9BJ ITCV 1300 24

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 24

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 24

5.21 MONTH FUNCTION


Retorna o mês a partir de um valor de data SAS.

Sintaxe
MONTH(date)

Exemplo: Atribui o mês a partir de uma data

No exemplo abaixo criamos o campo MES_REF e atribuímos valor do mês a partir da data atual informada
através da função DATE.

/* CRIA A TABELA */
DATA
TB_DATA_EX4;
SET
TB_DATA_EX3;

MES_REF = MONTH(DATE());
RUN;
67
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX4;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO DIA_REF MES_REF

1 01/01/2014 123 BILLY BARROS ITCV 1000 24 4

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24 4

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 24 4

4 01/02/2014 123 BILLY BARROS ITCV 1800 24 4

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24 4

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 24 4

7 01/02/2014 124 TALITA O9BJ ITCV 1200 24 4

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 24 4

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 24 4

10 01/03/2014 123 BILLY BARROS ITCV 1950 24 4

11 01/03/2014 124 TALITA O9BJ ITCV 1300 24 4

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 24 4

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 24 4

5.22 YEAR FUNCTION


Retorna o ano a partir de um valor de data SAS.

Sintaxe
YEAR(date)

Exemplo: Atribui a data atual

No exemplo abaixo criamos o campo ANO_REF e atribuímos o ano mês a partir da data atual informada através
da função DATE.

/* CRIA A TABELA */
DATA
TB_DATA_EX5;
SET
TB_DATA_EX4;

ANO_REF = YEAR(DATE());
RUN;
68
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX5;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO DIA_REF MES_REF ANO_REF

1 01/01/2014 123 BILLY BARROS ITCV 1000 24 4 2014

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24 4 2014

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 24 4 2014

4 01/02/2014 123 BILLY BARROS ITCV 1800 24 4 2014

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24 4 2014

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 24 4 2014

7 01/02/2014 124 TALITA O9BJ ITCV 1200 24 4 2014

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 24 4 2014

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 24 4 2014

10 01/03/2014 123 BILLY BARROS ITCV 1950 24 4 2014

11 01/03/2014 124 TALITA O9BJ ITCV 1300 24 4 2014

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 24 4 2014

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 24 4 2014

5.23 MDY FUNCTION


Retorna um valor de data SAS de valores de mês, dia e ano.

Sintaxe
MDY(mês, dia, ano)

Exemplo 1: A partir do dia mês e ano, criamos a data completa.


No exemplo abaixo criamos o campo DATA_REF e atribuímos à data construída a partir do dia, mês e ano
passados para a função MDY.

/* CRIA A TABELA */
DATA
TB_DATA_EX6;
SET
TB_DATA_EX5;

DATA_REF = MDY(MES_REF, DIA_REF, ANO_REF);


FORMAT DATA_REF DDMMYY10.;
RUN;
69
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX6;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO DIA_REF MES_REF ANO_REF DATA_REF

1 01/01/2014 123 BILLY BARROS ITCV 1000 24 4 2014 24/04/2014

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24 4 2014 24/04/2014

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 24 4 2014 24/04/2014

4 01/02/2014 123 BILLY BARROS ITCV 1800 24 4 2014 24/04/2014

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24 4 2014 24/04/2014

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 24 4 2014 24/04/2014

7 01/02/2014 124 TALITA O9BJ ITCV 1200 24 4 2014 24/04/2014

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 24 4 2014 24/04/2014

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 24 4 2014 24/04/2014

10 01/03/2014 123 BILLY BARROS ITCV 1950 24 4 2014 24/04/2014

11 01/03/2014 124 TALITA O9BJ ITCV 1300 24 4 2014 24/04/2014

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 24 4 2014 24/04/2014

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 24 4 2014 24/04/2014

Exemplo 2: A partir do dia mês e ano, criamos a data completa.


No exemplo 2 criamos a macro variável ANOMES e atribuímos o valo de 201404 (numérico). Depois utilizamos a
função SUBSTR para obter o mês e o ano e atribuir à função MDY. Com relação ao dia passamos o valor fixo 1.

%LET ANOMES = 201404;

/* CRIA A TABELA */
DATA
TB_DATA_EX7;

DATA_REF = MDY(SUBSTR("&ANOMES.",6,2), 1, SUBSTR("&ANOMES.",1,4));


FORMAT DATA_REF DDMMYY10.;

RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX7;
RUN;

70
Resultado do PROC PRINT:
Obs DATA_REF

1 01/04/2014

5.24 DATEPART FUNCTION


Extrai a data de um valor de data e hora SAS.

Sintaxe
DATEPART(data hora)

Exemplo: Extrai apenas a data desprezando a hora


Neste exemplo abaixo criamos o campo DATA_REF_TRATADA e atribuímos à data desprezando a hora da do
campo data hora original (DATA_REF).

/* CRIA A TABELA */
DATA
TB_DATA_EX8;
SET
TB_DATA_EX1;

DATA_REF_TRATADA = DATEPART(DATA_REF);
FORMAT DATA_REF_TRATADA DDMMYY10.;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX8;
RUN;

Resultado do PROC PRINT:


Obs DT_REF CDPASTA NOME AREA PROVISAO DATA_REF DATA_REF_TRATADA

1 01/01/2014 123 BILLY BARROS ITCV 1000 24APR14:14:59:36 24/04/2014

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24APR14:14:59:36 24/04/2014

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 24APR14:14:59:36 24/04/2014

4 01/02/2014 123 BILLY BARROS ITCV 1800 24APR14:14:59:36 24/04/2014

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24APR14:14:59:36 24/04/2014

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 24APR14:14:59:36 24/04/2014

7 01/02/2014 124 TALITA O9BJ ITCV 1200 24APR14:14:59:36 24/04/2014

71
Obs DT_REF CDPASTA NOME AREA PROVISAO DATA_REF DATA_REF_TRATADA

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 24APR14:14:59:36 24/04/2014

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 24APR14:14:59:36 24/04/2014

10 01/03/2014 123 BILLY BARROS ITCV 1950 24APR14:14:59:36 24/04/2014

11 01/03/2014 124 TALITA O9BJ ITCV 1300 24APR14:14:59:36 24/04/2014

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 24APR14:14:59:36 24/04/2014

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 24APR14:14:59:36 24/04/2014

5.25 INTNX FUNCTION


Incrementa uma data, hora ou valor de data e hora por um determinado intervalo de tempo, e retorna uma
data, hora ou valor de data e hora.

Sintaxe
INTNX(<intervalo>,<variavel>,<incremento>,<alinhamento>)

Exemplo: Extrai apenas a data desprezando a hora


Neste exemplo criamos o campo DATA_INICIO_MES e atribuímos à data do primeiro dia do mês ('BEGINNING')
de 14 meses ('MONTH') atrás (-14) a partir do campo DATA_REF_TRATADA. Criamos também o campo
DATA_FIM_MES e atribuímos à data do último dia do mês ('END') de 1 mês ('MONTH') atrás (-1) a partir do
campo DATA_REF_TRATADA.

/* CRIA A TABELA */
DATA
TB_DATA_EX9;
SET
TB_DATA_EX8;

DATA_INICIO_MES = INTNX('MONTH', DATA_REF_TRATADA, -14, 'BEGINNING');


DATA_FIM_MES = INTNX('MONTH', DATA_REF_TRATADA, -1, 'END');
FORMAT DATA_INICIO_MES
DATA_FIM_MES DDMMYY10.;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX9;
RUN;

72
Resultado do PROC PRINT:
Obs DT_REF CDPASTA NOME AREA PROVISAO DATA_REF DATA_REF_TRATADA DATA_INICIO_MES DATA_FIM_MES

1 01/01/2014 123 BILLY BARROS ITCV 1000 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

4 01/02/2014 123 BILLY BARROS ITCV 1800 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

7 01/02/2014 124 TALITA O9BJ ITCV 1200 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

10 01/03/2014 123 BILLY BARROS ITCV 1950 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

11 01/03/2014 124 TALITA O9BJ ITCV 1300 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 24APR14:14:59:36 24/04/2014 01/02/2013 31/03/2014

5.26 INTCK FUNCTION


A função INTCK permite calcular o tempo entre duas datas.

Sintaxe
INTCK(<interval>, <data inicial>, <data final>)

Exemplo: Obtém a quantidade de semestres e de meses entre duas datas


Neste exemplo criamos os campos SEMESTRES e MESES e calculamos o número de semestres para a variável
SEMESTRES e o número de meses para variável MESES utilizando a função INTCK. Temos muitos tipos de
intervalos possíveis de serem utilizados (consulte os tipos na ajuda do SAS) neste exemplo, para o campo
SEMESTRES, escolhemos o intervalo 'SEMIYEAR' que nos retorna o número de semestres entre duas datas.
Passando a variável DATA_INICIO_MES (01/02/2013) como data inicial e DATA_FIM_MES (31/03/2014) como
data final temos o resultado 2 que significa que temos 2 semestres entre estas datas. Já para o campo MESES,
escolhemos o intervalo 'MONTH'que nos retorna o número de meses entre duas datas. Passando as mesmas
variáveis, DATA_INICIO_MES (01/02/2013) como data inicial e DATA_FIM_MES (31/03/2014) como data final
temos o resultado 13 que significa que temos 13 meses entre estas datas. Para identificar a quantidade de
meses/semestres a função identifica pela mudança do mês, por exemplo, se a data inicial for 31/03/2014 e a
data final for 01/04/2014 a função vai contar como 1 mês.

73
/* CRIA A TABELA */
DATA
TB_DATA_EX10 (DROP = DATA_REF NOME);
SET
TB_DATA_EX9;

SEMESTRES = INTCK('SEMIYEAR',DATA_INICIO_MES, DATA_FIM_MES);


MESES = INTCK('MONTH',DATA_INICIO_MES, DATA_FIM_MES);

RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX10;
RUN;

Resultado do PROC PRINT:

Obs DT_REF CDPASTA AREA PROVISAO DATA_REF_TRATADA DATA_INICIO_MES DATA_FIM_MES SEMESTRES MESES

1 01/01/2014 123 ITCV 1000 24/04/2014 01/02/2013 31/03/2014 2 13

2 01/01/2014 222 DCRPF 1500 24/04/2014 01/02/2013 31/03/2014 2 13

3 01/01/2014 333 DCJE 20000 24/04/2014 01/02/2013 31/03/2014 2 13

4 01/02/2014 123 ITCV 1800 24/04/2014 01/02/2013 31/03/2014 2 13

5 01/02/2014 222 DCRPF 1500 24/04/2014 01/02/2013 31/03/2014 2 13

6 01/02/2014 223 DCRPF 1500 24/04/2014 01/02/2013 31/03/2014 2 13

7 01/02/2014 124 ITCV 1200 24/04/2014 01/02/2013 31/03/2014 2 13

8 01/02/2014 333 DCJE 20000 24/04/2014 01/02/2013 31/03/2014 2 13

9 01/03/2014 222 DCRPF 1650 24/04/2014 01/02/2013 31/03/2014 2 13

10 01/03/2014 123 ITCV 1950 24/04/2014 01/02/2013 31/03/2014 2 13

11 01/03/2014 124 ITCV 1300 24/04/2014 01/02/2013 31/03/2014 2 13

12 01/03/2014 333 DCJE 21050 24/04/2014 01/02/2013 31/03/2014 2 13

13 01/03/2014 334 DCJE 250000 24/04/2014 01/02/2013 31/03/2014 2 13

5.27 WEEKDAY FUNCTION


A partir de um valor de data SAS, devolve um número inteiro que corresponde ao dia da semana.

Tabela de/para correspondente ao número:


1-Domingo, 2- Segunda-feira, 3-Terça-feira, 4-Quarta-feira, 5-Quinta-Feira, 6-Sexta-feira, 7-Sábado

74
Sintaxe
WEEKDAY (data)

Exemplo: Obtém o número correspondente ao dia da semana a partir de uma data


No exemplo abaixo criamos o campo DIA_DA_SEMANA_FIM_MES e passamos à data do final do mês através do
campo DATA_FIM_MES como argumento para a função WEEKDAY. Neste caso o campo DATA_FIM_MES possui
apenas uma data que é 31/03/2014, assim a função WEEKDAY retornará o número 2 que corresponde ao dia da
semana segunda-feira.

/* CRIA A TABELA */
DATA
TB_DATA_EX11;
SET
TB_DATA_EX10;

/* CRIA O CAMPO DIA_DA_SEMANA_FIM_MES E ATRIBUI O DIA DA SEMANA */


DIA_DA_SEMANA_FIM_MES = WEEKDAY(DATA_FIM_MES);

RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_DATA_EX11;
RUN;

Obs DT_REF CDPASTA AREA PROVISAO DATA_REF_TRATADA DATA_INICIO_MES DATA_FIM_MES SEMESTRES MESES DIA_DA_SEMANA_FIM_MES

1 01/01/2014 123 ITCV 1000 24/04/2014 01/02/2013 31/03/2014 2 13 2

2 01/01/2014 222 DCRPF 1500 24/04/2014 01/02/2013 31/03/2014 2 13 2

3 01/01/2014 333 DCJE 20000 24/04/2014 01/02/2013 31/03/2014 2 13 2

4 01/02/2014 123 ITCV 1800 24/04/2014 01/02/2013 31/03/2014 2 13 2

5 01/02/2014 222 DCRPF 1500 24/04/2014 01/02/2013 31/03/2014 2 13 2

6 01/02/2014 223 DCRPF 1500 24/04/2014 01/02/2013 31/03/2014 2 13 2

7 01/02/2014 124 ITCV 1200 24/04/2014 01/02/2013 31/03/2014 2 13 2

8 01/02/2014 333 DCJE 20000 24/04/2014 01/02/2013 31/03/2014 2 13 2

9 01/03/2014 222 DCRPF 1650 24/04/2014 01/02/2013 31/03/2014 2 13 2

10 01/03/2014 123 ITCV 1950 24/04/2014 01/02/2013 31/03/2014 2 13 2

11 01/03/2014 124 ITCV 1300 24/04/2014 01/02/2013 31/03/2014 2 13 2

12 01/03/2014 333 DCJE 21050 24/04/2014 01/02/2013 31/03/2014 2 13 2

13 01/03/2014 334 DCJE 250000 24/04/2014 01/02/2013 31/03/2014 2 13 2

75
5.28 COMPRESS FUNCTION
Retorna uma cadeia de caracteres com caracteres especificados removidos da string original.

Sintaxe
COMPRESS(<texto original><caracteres a serem modificados><tipo de modificação>)

Exemplo 1 : Remover espaços em branco


No exemplo abaixo criamos o campo NOME_SEM_ESPACO e passamos à variável NOME como argumento para
a função COMPRESS, sem utilizar nenhum parâmetro a função retira os espaços em branco do texto passado
pela variável NOME conforme podemos visualizar na tabela abaixo.

/* CRIA A TABELA */
DATA
TB_COMPRESS_EX1;
SET
PROVISAO_AREAS_V1;

NOME_SEM_ESPACO = COMPRESS(NOME);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_COMPRESS_EX1;
RUN;
Obs DT_REF CDPASTA NOME AREA PROVISAO NOME_SEM_ESPACO

1 01/01/2014 123 BILLY BARROS ITCV 1000 BILLYBARROS

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANAB.CHOCOLATE

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIELR.WARDSxXx

4 01/02/2014 123 BILLY BARROS ITCV 1800 BILLYBARROS

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANAB.CHOCOLATE

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 NEIDEMAÇÃ

7 01/02/2014 124 TALITA O9BJ ITCV 1200 TALITAO9BJ

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIELR.WARDSxXx

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 JULYANAB.CHOCOLATE

10 01/03/2014 123 BILLY BARROS ITCV 1950 BILLYBARROS

11 01/03/2014 124 TALITA O9BJ ITCV 1300 TALITAO9BJ

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 DANIELR.WARDSxXx

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 FABIANAPULGABATISTA

76
Exemplo 2 : Remover letras minúsculas baseado no(s) caractere(s) e modificação passada para a função
No exemplo abaixo criamos o campo NOME_REMOVE_CARACTER e passamos à variável NOME como
argumento para a função COMPRESS. Neste caso passamos os argumentos “x” (minúsculo) como caracter a ser
modificado e o tipo de modificação “L” que é utilizado para remover as letras minúsculas, desta forma todos os
caracteres “x” em minúsculo serão removidos do texto.

/* CRIA A TABELA */
DATA
TB_COMPRESS_EX2;
SET
PROVISAO_AREAS_V1;

/* REMOVE AS LETRAS MINUSCULAS */


NOME_REMOVE_CARACTER = COMPRESS(NOME,'x','L');
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_COMPRESS_EX2;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO NOME_REMOVE_CARACTER


1 01/01/2014 123 BILLY BARROS ITCV 1000 BILLY BARROS
2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANA B. CHOCOLATE
3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIEL R. WARDS X
4 01/02/2014 123 BILLY BARROS ITCV 1800 BILLY BARROS
5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANA B. CHOCOLATE
6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 NEIDE MAÇÃ
7 01/02/2014 124 TALITA O9BJ ITCV 1200 TALITA O9BJ
8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIEL R. WARDS X
9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 JULYANA B. CHOCOLATE
10 01/03/2014 123 BILLY BARROS ITCV 1950 BILLY BARROS
11 01/03/2014 124 TALITA O9BJ ITCV 1300 TALITA O9BJ
12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 DANIEL R. WARDS X
13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 FABIANA PULGA BATISTA

Exemplo 3 : Remover as letras minúsculas e maiúsculas baseado no(s) caractere(s) e modificação passada para a
função.
No exemplo abaixo criamos o campo NOME_REMOVE_CARACTER_TOTAL e passamos à variável NOME como
argumento para a função COMPRESS. Neste caso passamos os argumentos “LY” (maiúsculo) como caracteres a
seres modificados e o tipo de modificação “L” que é utilizado para remover as letras minúsculas, porém como
passamos o argumento em maiúscula todos os caracteres serão removidos do texto.

77
/* CRIA A TABELA */
DATA
TB_COMPRESS_EX3;
SET
PROVISAO_AREAS_V1;

/* REMOVE AS LETRAS MINUSCULAS */


NOME_REMOVE_CARACTER_TOTAL = COMPRESS(NOME,'LY','L');
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_COMPRESS_EX3;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO NOME_REMOVE_CARACTER_TOTAL

1 01/01/2014 123 BILLY BARROS ITCV 1000 BI BARROS

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JUANA B. CHOCOATE

3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIE R. WARDS X

4 01/02/2014 123 BILLY BARROS ITCV 1800 BI BARROS

5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JUANA B. CHOCOATE

6 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 NEIDE MAÇÃ

7 01/02/2014 124 TALITA O9BJ ITCV 1200 TAITA O9BJ

8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIE R. WARDS X

9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 JUANA B. CHOCOATE

10 01/03/2014 123 BILLY BARROS ITCV 1950 BI BARROS

11 01/03/2014 124 TALITA O9BJ ITCV 1300 TAITA O9BJ

12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 DANIE R. WARDS X

13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 FABIANA PUGA BATISTA

5.29 TRANWRD FUNCTION


Substitui todas as ocorrências de uma substring em uma cadeia de caracteres.

Sintaxe
TRANWRD(<origem>, <destino>, <substituição>)

78
Exemplo:
No exemplo abaixo utilizamos a função TRANWRD para tratar uma variável de valor que recebemos em um
arquivo como texto sem perder nenhuma das casas decimais. O valor de entrada é '1114,11144654' em texto
e temos que transforma-lo para valor. O primeiro passo é descobrir quantas casas decimais temos para
posteriormente utilizar na divisão do número. Então vamos fazer o passo a passo:

Variável DIVISOR
DIVISOR = 10**((LENGTH(VALOR_ENTRADA_TXT)-1)-LENGTH(SCAN(VALOR_ENTRADA_TXT, "1", ',')));
DIVISOR = 10**((LENGTH(1114,11144654)-1)-LENGTH(SCAN(1114,11144654, "1", ',')));
DIVISOR = 10**((13-1)-LENGTH( 1114));
DIVISOR = 10**(12-4);
Divisior = 100.000.000;

Variável VALOR_ENTRADA_NUMERICO
VALOR_ENTRADA_NUMERICO = (COMPRESS(TRANWRD(1114,11144654, "," ,""))*1)/100.000.000;
VALOR_ENTRADA_NUMERICO = (COMPRESS(1114 11144654)*1)/100.000.000;
VALOR_ENTRADA_NUMERICO = (111411144654*1)/100.000.000;
VALOR_ENTRADA_NUMERICO = 111411144654/100.000.000;
VALOR_ENTRADA_NUMERICO = 1.114,11144654 ou 1.114,11 (Valor numérico)

/* TABELA */
DATA TB_VALOR_TRATADO;
VALOR_ENTRADA_TXT = '1114,11144654';
DIVISOR =10**((LENGTH(VALOR_ENTRADA_TXT)-1)-LENGTH(SCAN(VALOR_ENTRADA_TXT, "1", ',')));
VALOR_ENTRADA_NUMERICO =(COMPRESS(TRANWRD(VALOR_ENTRADA_TXT,",",""))*1)/DIVISOR;
FORMAT VALOR_ENTRADA_NUMERICO BESTD14.12;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_VALOR_TRATADO;
RUN;

Obs VALOR_ENTRADA_TXT DIVISOR VALOR_ENTRADA_NUMERICO

1 1114,11144654 100.000.000 1114.11144654

79
5.30 TRIM FUNCTION
Retirar espaços entre as palavras.

Sintaxe
TRIM(expressão)

Exemplo:
No exemplo, criamos duas variáveis dentro do data set para identificar as diferenças quando utilizamos TRIM e
quando não utilizamos. Perceba que a variável criada NOME_E_AREA_SEM_TRIM não possui o comando TRIM e
o resultado é criado com espaços depois da variável NOME. Já a outra variável criada NOME_E_AREA, utilizando
o comando TRIM removeu os espaços entre as duas variáveis concatenadas e não removeu os demais espaços
como normalmente removemos utilizando o comando COMPRESS.

/* CRIA TABELA */
DATA
TB_CONCATENADO;
SET
PROVISAO_AREAS_V1;

NOME_E_AREA_SEM_TRIM = NOME!!"-"||AREA;
NOME_E_AREA = TRIM(NOME)!!"-"||TRIM(AREA);
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_CONCATENADO;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO NOME_E_AREA_SEM_TRIM NOME_E_AREA


1 01/01/2014 123 BILLY BARROS ITCV 1000 BILLY BARROS -ITCV BILLY BARROS-ITCV
2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANA B. CHOCOLATE -DCRPF JULYANA B. CHOCOLATE-DCRPF
3 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIEL R. WARDS xXx -DCJE DANIEL R. WARDS xXx-DCJE
4 01/02/2014 123 BILLY BARROS ITCV 1800 BILLY BARROS -ITCV BILLY BARROS-ITCV
5 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANA B. CHOCOLATE -DCRPF JULYANA B. CHOCOLATE-DCRPF
6 01/02/2014 223 NEIDE MAÇA DCRPF 1500 NEIDE MAÇA -DCRPF NEIDE MAÇA-DCRPF
7 01/02/2014 124 TALITA O9BJ ITCV 1200 TALITA O9BJ -ITCV TALITA O9BJ-ITCV
8 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIEL R. WARDS xXx -DCJE DANIEL R. WARDS xXx-DCJE
9 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 JULYANA B. CHOCOLATE -DCRPF JULYANA B. CHOCOLATE-DCRPF
10 01/03/2014 123 BILLY BARROS ITCV 1950 BILLY BARROS -ITCV BILLY BARROS-ITCV
11 01/03/2014 124 TALITA O9BJ ITCV 1300 TALITA O9BJ -ITCV TALITA O9BJ-ITCV
12 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 DANIEL R. WARDS xXx -DCJE DANIEL R. WARDS xXx-DCJE
13 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 FABIANA PULGA BATISTA -DCJE FABIANA PULGA BATISTA-DCJE

80
5.31 SUM FUNCTION
Soma os elementos.

Sintaxe
SUM( matrix1<, matrix2,..., matrix15>)

Exemplo:
Neste exemplo criamos duas variável para realizar a subtração de dois números de maneiras diferentes. A
primeira variável é MOVIMENTACAO_INCORRETA, colocamos este número pois a subtração realizada sem a
utilização da função SUM não é realizada de forma correta quando um dos campos possui “.” como conteúdo
pois o SAS não consegue realizar a operação. Utilizando a função SUM na variável MOVIMENTACAO_CORRETA a
subtração é realizada corretamente, conforme tabela abaixo na observação 2.

/* CRIA TABELA */
DATA
PROVISAO_AREAS_V1_1;
INPUT
DT_REF DATE11.
CDPASTA
AREA $
PROVISAO
PROVISAO_ANTERIOR;
FORMAT
DT_REF DDMMYY10.;
CARDS;
01JAN2014 000000000123 ITCV 1000 0
01JAN2014 000000000222 DCRPF 1500 .
01JAN2014 000000000333 DCJE 20000 15000
;
RUN;

/* CRIA TABELA */
DATA
TB_MOVIMENTACAO;
SET
PROVISAO_AREAS_V1_1;

MOVIMENTACAO_INCORRETA = PROVISAO - PROVISAO_ANTERIOR;


MOVIMENTACAO_CORRETA = SUM(PROVISAO, - PROVISAO_ANTERIOR);
RUN;

81
/* VIZUALIZA O RESULTADO */
PROC PRINT DATA=TB_MOVIMENTACAO;
RUN;

Obs DT_REF CDPASTA AREA PROVISAO PROVISAO_ANTERIOR MOVIMENTACAO_INCORRETA MOVIMENTACAO_CORRETA

1 01/01/2014 123 ITCV 1000 0 1000 1000

2 01/01/2014 222 DCRPF 1500 . . 1500

3 01/01/2014 333 DCJE 20000 15000 5000 5000

6. SQL PROCEDURE REFERENCES


O PROC SQL é muito utilizado para agrupar campos, sumarizando valores e também para fazer
cruzamentos diversos entre duas ou mais tabelas.

6.1 INNER JOIN PROCEDURE


Combina registros de duas tabelas sempre que há valores correspondentes em um campo comum.

É possível usar uma operação INNER JOIN em qualquer cláusula FROM. Esse é o tipo de associação mais comum.
Associações internas combinam registros de duas tabelas sempre que há valores correspondentes em um
campo comum para ambas as tabelas.

Tabela Uni Tabela Duni Resultado


VA VB VA VC VA VB
3E 9W 5D
5D 5Y 5D
7F 5P 8A
8A 8Q

PROC SQL;
CREATE TABLE TB_CRUZA1 AS
SELECT
A.VA,
A.VB,
B.VC
FROM
UNI AS A
INNER JOIN
DUNI AS B
ON
A.VA = B.VA;
RUN;

82
PROC PRINT DATA = TB_CRUZA;
RUN;

RESULTADO

VA VB VC
5 D Y
5 D P
8 A Q

6.2 OUTER JOIN PROCEDURE


É chamado de OUTER JOIN o processo que combina colunas de diferentes tabelas (lado a lado)
retornando em uma única tabela todas as linhas que possuam chaves iguais, mais todas as linhas que possuem
chaves diferentes de uma tabela ou de ambas.
São três os tipos de Outer Join: Left Join, Full Join e Rigth Join

6.3 LEFT JOIN PROCEDURE


Use uma operação LEFT JOIN para criar uma associação externa à esquerda (junção esquerda externa: uma
associação externa na qual todos os registros do lado esquerdo da operação LEFT JOIN da instrução SQL da
consulta são adicionados aos resultados da consulta, mesmo que não haja valores correspondentes no campo
junto com a tabela à direita.). Associações externas à esquerda incluem todos os registros da primeira
(esquerda) de duas tabelas, mesmo quando não há valores coincidentes na segunda tabela (direita).

Tabela Uni Tabela Duni Resultado


VA VB VA VC VA VB
3E 9W 3E
5D 5Y 5D
7F 5P 5D
8A 8Q 7F
8A

PROC SQL;
CREATE TABLE TB_CRUZA1 AS
SELECT
A.VA,
A.VB,
B.VC
FROM
UNI AS A
LEFT JOIN
DUNI AS B
ON
A.VA = B.VA;
RUN;

83
RESULTADO

VA VB VC
3 E
5 D Y
5 D P
7 F
8 A Q

6.4 FULL JOIN PROCEDURE


O FULL JOIN retorna todas as linhas de palavras-chave da tabela esquerda e da tabela direita.

Tabela Uni Tabela Duni Resultado


VA VB VA VC VA VB VC
3E 9W 3E
5D 5Y 5D Y
7F 5P 5D P
8A 8Q 7F
8A Q
9 W

PROC SQL;
CREATE TABLE TB_CRUZA2 AS
SELECT
A.VA,
A.VB,
B.VC
FROM
UNI AS A
FULL JOIN
DUNI AS B
ON
A.VA = B.VA;
RUN;

RESULTADO

VA VB VC
3 E
5 D Y
5 D P
7 F
8 A Q
9 W

84
6.5 RIGHT JOIN PROCEDURE
Use uma operação RIGHT JOIN para criar uma associação externa à direita (junção direita externa: uma
junção externa na qual todos os registros do lado direita da operação RIGHT JOIN da instrução SQL da consulta
são adicionados aos resultados da consulta, mesmo que não haja valores correspondentes no campo associado
da tabela à esquerda.). Associações externas à direita incluem todos os registros da segunda (direita) de duas
tabelas, mesmo quando não há valores coincidentes na primeira tabela (esquerda).

Tabela Uni Tabela Duni Resultado


VA VB VA VC VA VB VC
3E 9W 9 W
5D 5Y 5D Y
7F 5P 5D P
8A 8Q 8A Q

PROC SQL;
CREATE TABLE TB_CRUZA2 AS
SELECT
A.VA,
A.VB,
B.VC
FROM
UNI AS A
RIGHT JOIN
DUNI AS B
ON
A.VA = B.VA;
RUN;

RESULTADO

VA VB VC
9 W
5 D Y
5 D P
8 A Q

85
6.6 SELECT CASE PROCEDURE
Seleciona valores de resultados que satisfaçam as condições especificadas.

Exemplo 1: Criando novo campo e populando mediante as condições informadas no case, neste exemplo
utilizamos mais de uma variável no case

Neste exemplo criamos o campo QTDE_PAES e populamos a quantidade de acordo com a condição
especificada na ordem informada. Se o campo NOME estiver populado com 'BILLY BARROS' então a
quantidade de pães populada no campo QTDE_PAES será 5, se o campo NOME estiver populado com 'NEIDE
MAÇÃ' então a quantidade de pães populada no campo QTDE_PAES será 0, se o campo AREA estiver populado

com 'DCRPF' então a quantidade de pães populada no campo QTDE_PAES será 3, caso não seja nenhuma
destas condições a quantidade de pães populada no campo QTDE_PAES será 2.

/* CRIA TABELA*/
PROC SQL;
CREATE TABLE TB_QTDE_PAES AS
SELECT
NOME,
AREA,
CASE
WHEN NOME = 'BILLY BARROS' THEN '5'
WHEN NOME = 'NEIDE MAÇÃ' THEN '0'
WHEN AREA = 'DCRPF' THEN '3'
ELSE '2'
END AS QTDE_PAES
FROM
PROVISAO_AREAS_V1;
QUIT;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = TB_QTDE_PAES;
RUN;

Resultado do PROC PRINT:


NOME AREA QTDE_PAES

BILLY BARROS ITCV 5

JULYANA B. CHOCOLATE DCRPF 3

DANIEL R. WARDS xXx DCJE 2

BILLY BARROS ITCV 5

86
NOME AREA QTDE_PAES

JULYANA B. CHOCOLATE DCRPF 3

NEIDE MAÇÃ DCRPF 0

TALITA O9BJ ITCV 2

DANIEL R. WARDS xXx DCJE 2

JULYANA B. CHOCOLATE DCRPF 3

BILLY BARROS ITCV 5

TALITA O9BJ ITCV 2

DANIEL R. WARDS xXx DCJE 2

FABIANA PULGA BATISTA DCJE 2

Exemplo 2: Criando novo campo e populando mediante as condições informadas no case, neste exemplo
utilizamos apenas uma variável no case.
Este exemplo é muito parecido com o exemplo anterior, a única mudança é que utilizamos apenas uma variável
a invés de duas e incluímos mais uma condição, quando o campo NOME estiver populado com 'JULYANA B.
CHOCOLATE' então a quantidade de pães populada no campo QTDE_PAES será 3.

/* CRIA TABELA*/
PROC SQL;
CREATE TABLE TB_QTDE_PAES_V1 AS
SELECT
NOME,
AREA,
CASE NOME
WHEN 'BILLY BARROS' THEN '5'
WHEN 'NEIDE MAÇÃ' THEN '0'
WHEN 'JULYANA B. CHOCOLATE' THEN '3'
ELSE 2
END AS QTDE_PAES
FROM
PROVISAO_AREAS_V1;
QUIT;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = TB_QTDE_PAES_V1;
RUN;

87
Resultado do PROC PRINT:
NOME AREA QTDE_PAES

BILLY BARROS ITCV 5

JULYANA B. CHOCOLATE DCRPF 3

DANIEL R. WARDS xXx DCJE 2

BILLY BARROS ITCV 5

JULYANA B. CHOCOLATE DCRPF 3

NEIDE MAÇÃ DCRPF 0

TALITA O9BJ ITCV 2

DANIEL R. WARDS xXx DCJE 2

JULYANA B. CHOCOLATE DCRPF 3

BILLY BARROS ITCV 5

TALITA O9BJ ITCV 2

DANIEL R. WARDS xXx DCJE 2

FABIANA PULGA BATISTA DCJE 2

6.7 BETWEEN PROCEDURE


Filtrar um intervalo desejado.

Exemplo:
Neste exemplo criamos a tabela FILTRO_BASE_PROV_EX3 com base na tabela PROVISAO_AREAS_V1 mantendo
apenas os registros cujo valor de provisão estiver entre 1000 e 1500.

PROC SQL;
CREATE TABLE
FILTRO_BASE_PROV_EX3 AS
SELECT
TAB1.*
FROM
PROVISAO_AREAS_V1 AS TAB1
WHERE
PROVISAO BETWEEN 1000 AND 1500;
QUIT;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= FILTRO_BASE_PROV_EX3;
RUN;

88
Obs DT_REF CDPASTA NOME AREA PROVISAO

1 01/01/2014 123 BILLY BARROS ITCV 1000

2 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

3 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500

4 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500

5 01/02/2014 124 TALITA O9BJ ITCV 1200

6 01/03/2014 124 TALITA O9BJ ITCV 1300

7. ROUTINE
7.1 CALL SYMPUT ROUTINE
Atribui um valor produzido em uma etapa de dados a uma variável macro.

Sintaxe
CALL SYMPUT(macro variável , valor);

Exemplo:
Neste exemplo iremos criamos uma macro variável chamada “N” e populamos com o conteúdo da função
MOB(201301,201310) que é 9. O valor populado na macro variável “N” poderá ser utilizado em todo o código
SAS basta apenas chama-lá utilizando o &.

DATA _NULL_;
/* CALL SYMPUT = POPULA A VARIAVEL "N" COM O RESULTADO DO MOBDATA */
CALL SYMPUT("N",MOB(201301,201310));
RUN;

%PUT &N;
Resultado = 9

7.2 CALL SLEEP ROUTINE (CHAMADA ROTINA DE SONO)


Por um período de tempo especificado, suspende a execução de um programa que chama essa rotina CALL.

Sintaxe
CALL SLEEP(<n>, <Unidade >)
n = é uma constante numérica que especifica o número de unidades de tempo para o qual pretende suspender a
execução de um programa.

89
Unidade = especifica a unidade de tempo, tal como uma potência de 10, que é aplicado para n. Por exemplo, um
corresponde a um segundo, e 001 corresponde a um milésimo de segundo. Padrão: 0,001
Exemplo: A suspensão de execução com base em cálculo do tempo de sono

O exemplo a seguir diz ao SAS para suspender a execução do DATA até 22 de Abril de 2014, às 15:01. O SAS
calcula o comprimento da suspensão em função da data de destino com sua respectiva data e hora para
começar a executar.

DATA _NULL_;
SLEEPTIME='22APR2014:15:01'DT-DATETIME();
CALL SLEEP(SLEEPTIME,1);
RUN;

8. CRIANDO UM CONTADOR
Conta à quantidade de linhas de uma tabela.

Exemplo:
Neste exemplo criamos a tabela inicial PROVISAO_AREAS_CONT com a variável NOME_AREA criando uma nova
chave para tabela a partir de dois campos. Em seguida, utilizando o PROC CONTENTS ordenamos pela nova
chave e de forma descendente pelo valor da provisão mantendo o maior valor primeiro. Na tabela final
PROVISAO_AREAS_CONT_1 fazemos a contagem, ou seja, criamos uma variável chamada COUNT iniciando em 1
e somando +1 a cada vez que a chave NOME_AREA com conteúdo igual aparecer. Podemos utilizar para filtra os
maiores valores de um determinado tipo por exemplo.

/* CRIA TABELA INICIAL */


DATA
PROVISAO_AREAS_CONT;
SET
PROVISAO_AREAS_V1;
NOME_AREA = COMPRESS(NOME!!AREA);
RUN;

/* ORDENA */
PROC SORT DATA = PROVISAO_AREAS_CONT;
BY NOME_AREA DESCENDING PROVISAO;
QUIT;

90
/* CRIA CONTADOR POR GRUPO "NOME_AREA" */
DATA
PROVISAO_AREAS_CONT_1;
SET
PROVISAO_AREAS_CONT;
BY
NOME_AREA;
IF FIRST.NOME_AREA THEN
COUNT=0;
COUNT+1;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA = PROVISAO_AREAS_CONT_1;
RUN;

Obs DT_REF CDPASTA NOME AREA PROVISAO NOME_AREA COUNT

1 01/03/2014 123 BILLY BARROS ITCV 1950 BILLYBARROSITCV 1

2 01/02/2014 123 BILLY BARROS ITCV 1800 BILLYBARROSITCV 2

3 01/01/2014 123 BILLY BARROS ITCV 1000 BILLYBARROSITCV 3

4 01/03/2014 333 DANIEL R. WARDS xXx DCJE 21050 DANIELR.WARDSxXxDCJE 1

5 01/01/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIELR.WARDSxXxDCJE 2

6 01/02/2014 333 DANIEL R. WARDS xXx DCJE 20000 DANIELR.WARDSxXxDCJE 3

7 01/03/2014 334 FABIANA PULGA BATISTA DCJE 250000 FABIANAPULGABATISTADCJE 1

8 01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1650 JULYANAB.CHOCOLATEDCRPF 1

9 01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANAB.CHOCOLATEDCRPF 2

10 01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1500 JULYANAB.CHOCOLATEDCRPF 3

11 01/02/2014 223 NEIDE MAÇÃ DCRPF 1500 NEIDEMAÇÃDCRPF 1

12 01/03/2014 124 TALITA O9BJ ITCV 1300 TALITAO9BJITCV 1

13 01/02/2014 124 TALITA O9BJ ITCV 1200 TALITAO9BJITCV 2

9. ADD ABBREVIATION
É muito útil, podemos gravar códigos pré-prontos e utilizar a estrutura apenas digitando uma letra como atalho
e teclando enter.

91
Como fazer:
Monte a sua estrutura como por exemplo:

PROC SQL;
CREATE TABLE TABELA AS
SELECT
TAB1.*,
TAB2.*
FROM
TABELA_ORIGEM1 AS TAB1
LEFT JOIN
TABELA_ORIGEM2 AS TAB2
ON
A.VARIAVEL = B. VARIAVEL;
RUN;

Copie esta estrutura e vá em program > add abbreviation... > no campo Text to insert for abbreviation cole a
estrutura copiada. No campo abbreviation coloque por exemplo uma letra “S” e clique em “OK”.
No seu programa SAS digite “S” e tecle enter, pronto a sua estrutura inteira irá aparecer para você utilizar.

Passo a passo:

92
93
10. EXERCÍCIOS
/* CRIA TABELA */
10.1 Exercício
DATA 1
PROVISAO_AREAS_V0;
Importe as tabelas 1, 2 e 3 que estão em Excel, para o diretório do SAS WORK
INPUT
DT_REF DATE11.
CDPASTA
AREA $
PROVISAO
PROVISAO_ANTERIOR;
CARDS;
01JAN2014 000000000123 ITCV 1000 0
01JAN2014 000000000222 DCRPF 1500 .
01JAN2014 000000000333 DCJE 20000 15000
;
RUN;

Obs DT_REF CDPASTA AREA PROVISAO PROVISAO_ANTERIOR


1 19724 123 ITCV 1000 0
10.2 Exercício 2
2 19724 222 DCRPF 1500 .
Crie uma tabela chamada TAB_CONTRATOS_001,
3 19724 à partir da
333 DCJE tabela TAB_CONTRATOS,
20000 formatando
15000 o campo
DATA_OPERACAO para que ele apareça no formato dd/mm/yyyy, utilizando a estrutura apresentada:

/* SOBREPOE A TABELA FORMATANDO O CAMPO DATA */


DATA
PROVISAO_AREAS_V0; Nome da tabela origem
SET
PROVISAO_AREAS_V0;
FORMAT Nome da tabela a ser criada
DT_REF DDMMYY10.;
RUN;

/* VIZUALIZA O RESULTADO */
PROC PRINT DATA= PROVISAO_AREAS_V0;
RUN;

Obs DT_REF CDPASTA AREA PROVISAO PROVISAO_ANTERIOR


1 01/01/2014 123 ITCV 1000 0
2 01/01/2014 222 DCRPF 1500 .
3 01/01/2014 333 DCJE 20000 15000

94
10.3 Exercício 3
Através da tabela TAB_CONTRATOS_001, crie uma tabela chamada TAB_CONTRATOS_002 trazendo todos os
campos da tabela TAB_CONTRATOS_001 e o subcanal da tabela SUBCAN para cada contrato, a partir da chave
EMPRESA + DICOM

Dica

O * traz todos os campos da tabela A

95
10.4 Exercício 4
Através da tabela TAB_CONTRATOS_002, criada no exercício anterior, crie uma tabela chamada
TAB_CONTRATOS_003 trazendo todos os campos da tabela TAB_CONTRATOS_002 criando um campo chamado
TIPO_VARIAVEL, com as seguintes premissas:

Se o campo VARIAVEL for igual a 235, TIPO_VARIAVEL = SALDO_MEDIO;

Se o campo VARIAVEL for igual a 237, TIPO_VARIAVEL = SALDO_FINAL;

Se o campo VARIAVEL for igual a 564, TIPO_VARIAVEL = SALDO_MEDIO;

Se o campo VARIAVEL for igual a 565, TIPO_VARIAVEL = RESULTADO;

96
10.5 Exercício 5
Através da tabela TAB_CONTRATOS_003, criada no exercício anterior, crie uma tabela chamada
TAB_CONTRATOS_004 trazendo todos os campos da tabela TAB_CONTRATOS_002 criando um campo chamado
EMP_DICOM, concatenando os campos DICOM E EMPRESA, com a função TRIM, para que o campo fique no
formato:

EMP_DICOM = EMPRESA - DICOM

Ex.: 341 - 5

97
10.6 Exercício 6
Crie uma tabela chamada “Resultado” a partir da tabela abaixo chamada “Prov” mantendo apenas a área “DCJE”
e com data de referencia (DT_REF) menor ou igual a 01/03/2014.

DT_REF CDPASTA NOME AREA PROVISAO


01/01/2014 123 BILLY BARROS ITCV 1.000,00
01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1.500,00
01/01/2014 333 DANIEL R. WARDS xXx DCJE 20.000,00
01/02/2014 123 BILLY BARROS ITCV 1.800,00
01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1.500,00
01/02/2014 223 NEIDE MAÇA DCRPF 1.500,00
01/02/2014 124 TALITA O9BJ ITCV 1.200,00
01/02/2014 333 DANIEL R. WARDS xXx DCJE 20.000,00
01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1.650,00
01/03/2014 123 BILLY BARROS ITCV 1.950,00
01/03/2014 124 TALITA O9BJ ITCV 1.300,00
01/03/2014 333 DANIEL R. WARDS xXx DCJE 21.050,00
01/03/2014 334 FABIANA PULGA BATISTA DCJE 250.000,00

98
10.7 Exercício 7
Crie duas tabelas, um chamada RESULTADO_1 e outra RESULTADO_2 a partir da tabela PROV. A primeira
chamada RESULTADO_1 mantendo apenas a área DCJE e mantendo também apenas a data de referencia
(DT_REF) menor ou igual a 01/03/2014. A segunda chamada RESULTADO_2 mantendo apenas a área ITCV e
mantendo também apenas a data de referencia (DT_REF) menor ou igual a 01/02/2014, porém, faça isso
criando as tabelas dentro de uma macro rotina. Depois faça uma duas chamadas de macro, uma para cada
tabela a ser criada.

TABELA PROV

DT_REF CDPASTA NOME AREA PROVISAO


01/01/2014 123 BILLY BARROS ITCV 1.000,00
01/01/2014 222 JULYANA B. CHOCOLATE DCRPF 1.500,00
01/01/2014 333 DANIEL R. WARDS xXx DCJE 20.000,00
01/02/2014 123 BILLY BARROS ITCV 1.800,00
01/02/2014 222 JULYANA B. CHOCOLATE DCRPF 1.500,00
01/02/2014 223 NEIDE MAÇA DCRPF 1.500,00
01/02/2014 124 TALITA O9BJ ITCV 1.200,00
01/02/2014 333 DANIEL R. WARDS xXx DCJE 20.000,00
01/03/2014 222 JULYANA B. CHOCOLATE DCRPF 1.650,00
01/03/2014 123 BILLY BARROS ITCV 1.950,00
01/03/2014 124 TALITA O9BJ ITCV 1.300,00
01/03/2014 333 DANIEL R. WARDS xXx DCJE 21.050,00
01/03/2014 334 FABIANA PULGA BATISTA DCJE 250.000,00

11. ANOTAÇÕES
99
100
12. BIBLIOGRAFIA

http://pt.wikipedia.org/wiki/SAS_(inform%C3%A1tica)
http://www.sas.com/offices/latinamerica/brazil/institucional.html
https://onlinecourses.science.psu.edu/stat481/node/44
https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000245852.htm
https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000293668.htm
http://support.sas.com/resources/papers/proceedings09/060-2009.pdf
http://www.ats.ucla.edu/stat/sas/library/changing_shape.pdf
http://support.sas.com/kb/33/228.html
http://support.sas.com/resources/papers/proceedings09/060-2009.pdf
http://www.psych.yorku.ca/lab/sas/macro.htm
http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000208971.htm
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002058232.htm
http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a002975331.htm

101

Você também pode gostar