Baixe o app para aproveitar ainda mais
Prévia do material em texto
Copyright © SAS Inst itute Inc. A l l r ights reserved. SAS & Itaú Boas práticas Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno INTRODUÇÃO ▪ Nome: Victor Cruz ▪ Posição: Pré e Pós Vendas ▪ Idade: 25 anos ▪ Formação: Estatístico ▪ Histórico de trabalho: SAS (desde 2015) ▪ Certificação: SAS Programming Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno ▪ Nome: Fernanda Knopki ▪ Posição: Pré Vendas ▪ Idade: ? ▪ Formação: ? ▪ Histórico de trabalho: Coca-Cola (7 anos) HSBC (1 ano) Volvo (6 anos) SAS (desde 2018) ▪ Certificação: SAS Programming INTRODUÇÃO Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno Workshop Boas Práticas AGENDA ➢ Organização ➢ Performance ➢ Merge de tabelas ➢ Procedures e funções úteis ➢ Onde aprimorar o conhecimento Copyright © SAS Inst itute Inc. A l l r ights reserved. DICAS DE ORGANIZAÇÃO Boas Práticas Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno DICAS DE ORGANIZAÇÃO Cabeçalho do programa e comentários Vantagens: • Facilita o entendimento do código • Rastreabilidade do Owner e do último modificador • Facilita a manutenção futura Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno DICAS DE ORGANIZAÇÃO Nome das Variáveis ➢ O tamanho máximo é 32 caracteres. ➢ Não pode ser iniciada por número ou underscore. E nem conter espaços. ➢ Utilizar o mesmo padrão de nomenclatura das variáveis em todas as tabelas. ➢ Um bom padrão é colocar nos 3 primeiros caracteres uma característica básica da variável. ➢ Utilizar abreviações somente quando o restante dos caracteres não for suficiente para descrever a variável. Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno DICAS DE ORGANIZAÇÃO PALAVRA CHAVE PREFIXO CODIGO COD DATA DAT DATA HORA (Timestamp) DTH DESCRICAO DES FLAG FLG HORA HOR INDICADOR IND IDENTIFICADOR IDT NOME NOM NUMERO NUM PERCENTUAL PRC PRAZO PRZ QUANTIDADE QTD SIGLA SGL STATUS STA SURROGATE KEY SRK TIPO TIP VALOR VLR Padrões de Prefixo Exemplos: NUM_CEP_RESIDENCIAL IND_CLIENTE_ATIVO COD_ESTADO_CIVIL Copyright © SAS Inst itute Inc. A l l r ights reserved. DICAS DE PERFORMANCE Boas Práticas Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno data CLIENTE; set DATABASE.CLIENTE(KEEP=COD_CLIENTE CREDITSCORE IDADE); if CREDITSCORE>0.7; RUN; DICAS DE PERFORMANCE UTILIZAÇÃO DE KEEP E DROP É uma ótima prática a utilização de comando keep e drop no momento da leitura (SET) de uma tabela de forma que ela somente traga para a memória as variáveis que foram selecionadas no momento da leitura. data CLIENTE; set DATABASE.CLIENTE; if CREDITSCORE>0.7; RUN; Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno DICAS DE PERFORMANCE UTILIZAÇÃO DE WHERE E IF Tanto o comando Where quanto o comando IF podem ser utilizados para realizar filtros dentro de um data step. Porém, o where tem suas vantagens no quesito performance. data CLIENTE; set DATABASE.CLIENTE (KEEP=COD_CLIENTE CREDITSCORE IDADE); IF CREDITSCORE>0.7; RUN; NOTE: There were 5197870 observations read from the data set DATABASE.CLIENTE. NOTE: The data set WORK.CLIENTE has 261790 observations and 3 variables. Utilizando IF: Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno DICAS DE PERFORMANCE UTILIZAÇÃO DE WHERE E IF Tanto o comando Where quanto o comando IF podem ser utilizados para realizar filtros dentro de um data step. Porém, o where tem suas vantagens no quesito performance. data CLIENTE; set DATABASE.CLIENTE(KEEP=COD_CLIENTE CREDITSCORE IDADE); WHERE CREDITSCORE>0.7; RUN; NOTE: There were 261790 observations read from the data set DATABASE.CLIENTE. WHERE CREDITSCORE>0.7; NOTE: The data set WORK.CLIENTE has 261790 observations and 3 variables. Utilizando WHERE: Performance 22% melhor Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno DICAS DE PERFORMANCE REVISÃO DO PROGRAMA Sempre após finalizar um programa, invista algumas horas na melhoria do mesmo. Provavelmente você irá reutilizar o código e se ele estiver estruturado e otimizado, o retorno sobre seu tempo investido é garantido! #ficaadica: ✓ Coloque cabeçalho no programa ✓ Coloque comentários explicando o que está fazendo ✓ Retire comandos sem utilidade ✓ Retire as variáveis que não estão sendo utilizadas (keep e drop) ✓ Somente grave em uma library permanente o que realmente for disponibilizar para alguém ou reutilizar no futuro ✓ Tente concentrar o máximo de ações dentro de um único data step ou proc sql REVISÃO DO PROGRAMA Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno CRIAÇÃO DE ÍNDICE NAS BASES Se você possuir tabelas muito utilizadas, normalmente a utilização de índice irá acelerar a performance de suas consultas e joins. Crie o índice no(s) campo(s) que são mais utilizados para cruzar as bases ou efetuar consultas. Exemplo de como criar um índice: proc sql; create index cpf_cliente on database.cliente(cpf_cliente); quit; OU proc datasets library=database; modify cliente; index create cpf_cliente; run; DICAS DE PERFORMANCE Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno QUAIS BENEFÍCIOS COM A CRIAÇÃO DE ÍNDICE NAS BASES ➢ Para processamento WHERE, um índice pode fornecer acesso mais rápido e eficiente a um subconjunto de dados. Observe que, para processar uma expressão WHERE, o SAS decide, por padrão, se deve usar um índice ou ler o arquivo de dados sequencialmente. ➢ Para processamento BY, um índice retorna observações na ordem de índice, que está em ordem de valor ascendente, sem usar o procedimento SORT, mesmo quando o arquivo de dados não está armazenado nessa ordem. Nota: Se você usar o procedimento SORT, o índice não será usado. ➢ Para as instruções SET e MODIFY, a opção KEY= permite que você especifique um índice em uma etapa DATA para recuperar observações específicas em um arquivo de dados. DICAS DE PERFORMANCE Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno CRIAÇÃO DE ÍNDICE NAS BASES DICAS DE PERFORMANCE Tamanho do Subconjunto Ação de Indexação 1% - 15% Um índice definitivamente melhorará o desempenho do programa 16% - 20% Um índice provavelmente melhorará o desempenho do programa 21% - 33% Um índice pode melhorar ou pode piorar o desempenho do programa 34% - 100% Um índice não melhorará o desempenho do programa Indexar ou não indexar? http://www2.sas.com/proceedings/sugi30/247-30.pdf http://www2.sas.com/proceedings/sugi30/247-30.pdf Copyright © SAS Inst itute Inc. A l l r ights reserved. MERGE DE TABELAS Boas Práticas Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno MERGE DE TABELAS Qual a melhor maneira de fundir tabelas? SAS Data Step ou SAS Proc SQL???Através do código, podemos realizar o merge de tabelas através das seguintes maneiras: ❖ SAS DATA STEP proc sort data=tmp00002.telco_cadastro out=telco_cadastro; by nu_cpf; run; proc sort data=tmp00002.fpd_full_cpf out=fpd_full_cpf; by cpf; run; data tst; merge telco_cadastro (in=a rename=(nu_cpf=cpf)) fpd_full_cpf (in=b); by cpf; if a and b; run; Através do código, podemos realizar o merge de tabelas através das seguintes maneiras: ❖ SAS PROC SQL proc sql; create table tst as select a.* from telco_cadastro as a inner join fpd_full_cpf as b on (a.nu_cpf=b.cpf); quit; Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno MERGE DE TABELAS Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno MERGE DE TABELAS Como ser mais performático no momento do merge? %CREFMT( SRCLIB = work, SRCTAB = fpd_full_cpf, FMTLIB = work, FMTSTART = cpf, FMTLABEL = sit_fatura, FMTLBLTP = C, FMTLBLEN = 20,FMTNAME = $status ) data tst; set telco_cadastro; situacao_fatura=put(nu_cpf,$status.); run; http://www2.sas.com/proceedings/sugi30/054-30.pdf http://www2.sas.com/proceedings/sugi30/054-30.pdf Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno MERGE DE TABELAS Copyright © SAS Inst itute Inc. A l l r ights reserved. OTIMIZAÇÃO DE ESPAÇO Boas Práticas Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno OTIMIZAÇÃO DE ESPAÇO COMPRESS Qual a vantagem de utilizar o COMPRESS em conjunto de dados SAS? • Usando a opção de sistema ou de data set COMPRESS=, qualquer conjunto de dados SAS criado em disco será compactado. A compactação do conjunto de dados SAS pode reduzir bastante o tamanho dos conjuntos de dados. Para usar a opção COMPRESS=, defina a opção como "YES" ou "BINARY". “CHAR” pode ser usado como uma alternativa para “YES” com o mesmo resultado. 39GB2GB Tamanho em bytes Tamanho em gigas Tabela sem compress 42.024.566.784 39 Simulação: tabela com 4.168.061 registros e 40 variáveis. Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno OTIMIZAÇÃO DE ESPAÇO proc sql; create table WORK.TRANSACT_FULL_NO_COMP as select t1.* from WORK.transact_full t1; quit; NOTE: Table WORK.TRANSACT_FULL_NO_COMP created, with 4168061 rows and 40 columns. NOTE: PROCEDURE SQL used (Total process time): real time 5:36.93 COMPRESS proc sql; create table WORK.TRANSACT_FULL_COMP2(compress=yes) as select t1.* from WORK.TRANSACT_FULL_COMP t1; quit; NOTE: Compressing data set WORK.QUERY_FOR_TRANSACT_FULL_COMP decreased size by 95.91 percent. Compressed is 13123 pages; un-compressed would require 320621 pages. NOTE: Table WORK.QUERY_FOR_TRANSACT_FULL_COMP created, with 4168061 rows and 40 columns. NOTE: PROCEDURE SQL used (Total process time): real time 1:15.70 Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno OTIMIZAÇÃO DE ESPAÇO COMPRESS Como identificar se a tabela está com o compress habilitado ou não? Exemplo: Resultado: proc contents data=work.transact_full varnum; run; proc contents data=work.transact_full_comp varnum; run; Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno OTIMIZAÇÃO DE ESPAÇO COMPRESS Compress Reduction Registros Tamanho Char Num YES BINARY Arquivo1 120.641 11MB 15 5 31,91% 23,72% Arquivo2 183.476 28MB 19 10 52,10% 49,22% Arquivo3 1.542.257 100MB 15 5 31,38% 21,02% Arquivo4 6.976.838 1.1GB 19 10 48,81% 46,61% Arquivo5 8.743.231 1.35GB 9 17 43,37% 56,87% http://www2.sas.com/proceedings/sugi27/p023-27.pdf http://www2.sas.com/proceedings/sugi27/p023-27.pdf Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno #ATENÇÃO! data cars (compress=yes); set sashelp.cars; run; NOTE: There were 428 observations read from the data set SASHELP.CARS. NOTE: The data set WORK.CARS has 428 observations and 15 variables. NOTE: Compressing data set WORK.CARS decreased size by 0.00 percent. Compressed is 2 pages; un-compressed would require 2 pages. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.00 seconds data air (compress=yes); set sashelp.air; run; NOTE: There were 144 observations read from the data set SASHELP.AIR. NOTE: The data set WORK.AIR has 144 observations and 2 variables. NOTE: Compressing data set WORK.AIR increased size by 100.00 percent. Compressed is 2 pages; un-compressed would require 1 pages. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.00 seconds Então, sempre vou otimizar espaço comprimindo a minha tabela SAS? Copyright © SAS Inst itute Inc. A l l r ights reserved. PROCs E FUNÇÕES ÚTEIS Boas Práticas Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno PROCS E FUNÇÕES ÚTEIS Na etapa de desenvolvimento da lógica da programação é interessante reduzir o universo do cliente com o objetivo de reduzir o tempo de processamento. Se torna muito interessante utilizar a proc surveyselect para realizar uma amostra aleatória (estratificada ou não) na base de dados. Exemplo: PROC SURVEYSELECT Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno SCAN é uma função muito útil para parsing de dados. Através dela é possível separar um campo em vários baseando-se em um caractere que delimite o dado. Exemplo: Resultado: PROCS E FUNÇÕES ÚTEIS SCAN Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno TRANWRD é uma função muito útil para correção de dados. Através dela é possível substituir um caractere ou um conjunto de caractere por outro. Exemplo: Resultado: PROCS E FUNÇÕES ÚTEIS TRANWRD Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno São funções utilizadas no tratamento do dado com o objetivo de padronização da informação. UPCASE – Transforma todas as letras em maiúsculas. LOWCASE – Transforma todas as letras em minúsculas. PROPCASE – Coloca a primeira letra em maiúscula. Exemplo: Resultado: PROCS E FUNÇÕES ÚTEIS UPCASE, LOWCASE e PROPCASE Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno São funções utilizadas no tratamento do dado relacionado a hora. HOUR – Retorna a hora a partir de uma informação de hora. MINUTE – Retorna a minuto a partir de uma informação de hora. SECOND – Retorna o segundo a partir de uma informação de hora. Exemplo: Resultado: PROCS E FUNÇÕES ÚTEIS HOUR, MINUTE e SECOND Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno São funções utilizadas no tratamento do dado relacionado a data. DAY – Retorna o dia a partir de uma informação de data. MONTH – Retorna o mês a partir de uma informação de data. YEAR – Retorna o ano a partir de uma informação de data. Exemplo: Resultado: PROCS E FUNÇÕES ÚTEIS DAY, MONTH e YEAR Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno PROCS E FUNÇÕES ÚTEIS São funções que realizam cálculos com valores de data, valores de data e hora e intervalos de tempo. • A função INTNX retorna uma data SAS que é um número especificado de unidades de tempo distante de uma data especificada. • A função INTCK retorna o número de unidades de tempo entre duas datas. Para a unidade de tempo, você pode escolher anos, meses, semanas, dias e mais. INTNX e INTCK Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno São funções utilizadas para coletar a informação de hora e data quando a mesma se encontra no mesmo campo. TIMEPART – Coleta a informação do horário contido em um campo de data e hora. DATEPART – Coleta a informação de data contido em um campo de data e hora. Exemplo: Resultado: PROCS E FUNÇÕES ÚTEIS TIMEPART e DATEPART Copyright © SAS Inst itute Inc. A l l r ights reserved. ONDE APRIMORAR O CONHECIMENTO Boas Práticas Click to Edit Title Copyright © SAS Inst itute Inc. A l l r ights reserved. Onde aprimorar o conhecimento SAS Programming e-learning (free) https://support.sas.com/edu/schedules.html?ctry=us&crs=PROG1 SAS Blogs http://blogs.sas.com/content/topic/programming-tips/ SAS support https://support.sas.com/en/support-home.html SAS Community https://communities.sas.com/ ? CONTEÚDO SAS https://support.sas.com/edu/schedules.html?ctry=us&crs=PROG1 http://blogs.sas.com/content/topic/programming-tips/ https://support.sas.com/en/support-home.html https://communities.sas.com/ Copyright © SAS Inst itute Inc. A l l r ights reserved.Corporativo | Interno T h e S A S P l a t f o r m Não deixe de experimentar! https://www.linkedin.com/in/victorscatolin/ Victor.Cruz@sas.com (61) 99633.1975 / (11) 97231.1050 Victor Cruz Pre/Post Sales “This is my favorite part about analytics: Taking boring flat data and bringing it to LIFE through visualization.”
Compartilhar