BookmarkSubscribeRSS Feed
Dica da Semana: Truques do PROC SQL - SAS 9
brassi
SAS Employee

PROC SQL não é apenas uma das muitas PROC do SAS é também um subsistema distinto com todos recursos comuns do SQL (Structured Query Language).

O PROC SQL oferece maneiras alternativas de gerenciar dados diferentes dos procedimentos DATA Step e SAS tradicionais. Além disso, as funções do SAS integradas são ferramentas complementares para aumentar o poder do PROC SQL.

 

Aqui vamos elencar algumas funcionalidades do PROC SQL.

 

1.  Função MONOTONIC: A função MONOTONIC é bastante semelhante à variável interna _N_ em DATA Step. Podemos usá-lo para selecionar os registros de acordo com seu número de linha.

 

Exemplo:

 

PROC SQL;
     Select * from SASHELP.CARS where monotonic() > 10;
     /* Este select irá apresentar as linhas da table CARS acima a partir da linha 11 */
Quit;  

 

 

2.  Método de JOIN escolhido pelo PROC SQL

Se você deseja melhorar o desempenho de JOINs no PROC SQL para unir tabelas, você precisa saber como otimizador de consulta escolhe os métodos de junção no PROC SQL. Há uma opção _METHOD na instrução PROC SQL que irá exibir a hierarquia dos métodos de processamento que serão escolhidos pelo PROC SQL. Você precisa definir a opção do sistema SAS MSGLEVEL= I para ver o form interno do plano de consulta no SAS LOG. Uma opção _TREE mostrará a árvore hierárquica como planejado no LOG do SAS.

 

Os métodos de execução PROC SQL incluem:

 

sqxcrta

Criar tabela com o Select

sqxslct

Select

sqxjsl

Step Loop Join (Cartesiano)

sqxjm

Merge Join

sqxjndx

Index Join

sqxjhsh

Hash Join

sqxsort

Ordenação

sqxsrc

Linhas de origem da tabela

sqxfil

Linhas de Filtro

sqxsumg

Estatísticas de resumo (com GROUP BY)

sqxsumn

Estatísticas resumidas (não agrupadas)

sqxuniq

Linhas distintas apenas

 

Exemplo:

 

options  msglevel=i;
proc sql _method _tree;
select * from sashelp.cars;
quit;

 

O código acima irá apresentar a seguinte plano de execução no SAS LOG:

 

 

 

28         options  msglevel=i;
29         proc sql _method _tree;
30         select * from sashelp.cars;

NOTE: SQL execution methods chosen are:

      sqxslct
          sqxsrc( SASHELP.CARS )

Tree as planned.
                               /-SYM-V-(cars.Make:1 flag=00000001)
                     /-OBJ----|
                    |         |--SYM-V-(cars.Model:2 flag=00000001)
                    |         |--SYM-V-(cars.Type:3 flag=00000001)
                    |         |--SYM-V-(cars.Origin:4 flag=00000001)
                    |         |--SYM-V-(cars.DriveTrain:5 flag=00000001)
                    |         |--SYM-V-(cars.MSRP:6 flag=00000001)
                    |         |--SYM-V-(cars.Invoice:7 flag=00000001)
                    |         |--SYM-V-(cars.EngineSize:8 flag=00000001)
                    |         |--SYM-V-(cars.Cylinders:9 flag=00000001)
                    |         |--SYM-V-(cars.Horsepower:10 flag=00000001)
                    |         |--SYM-V-(cars.MPG_City:11 flag=00000001)
                    |         |--SYM-V-(cars.MPG_Highway:12 flag=00000001)
                    |         |--SYM-V-(cars.Weight:13 flag=00000001)
                    |         |--SYM-V-(cars.Wheelbase:14 flag=00000001)
                    |          \-SYM-V-(cars.Length:15 flag=00000001)
           /-SRC----|
          |          \-TABL[SASHELP].cars opt=''
 --SSEL---|


31         quit;
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.61 seconds
      cpu time            0.51 seconds

 

 

Experimente executar seus códigos com joins de múltiplas tabelas.

 

3.  Processamento com Threads no PROC SQL

A opção THREADS|NOTHREADS habilita ou desabilita o processamento paralelo em PROC SQL. O processamento paralelo pode atingir um grau de paralelismo em uma operação de processamento. Esse paralelismo destina-se a reduzir o tempo real de conclusão de uma operação de processamento e, portanto, limitar o custo de recursos adicionais da CPU. Para obter mais informações, consulte  SAS Help Center: Support for Parallel Processing e também sua área de TI para verificar se seu ambiente SAS permite tal funcionalidade.

 

Exemplo de código:

options threads;
proc sql;
select * from sashelp.cars;
quit;

 

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
Article Labels
Article Tags
Contributors