Produto cartesiano utilizando STATS CARTPROD
Autor: Lucas | Publicado: 2015-09-28T07:24:00-03:00

Na última postagem exibimos um código para fazer 

o produto cartesiano entre tabelas no SPSS em versões anteriores à 23. Na versão 23 foi introduzido a 

funcionalidade "Cartesian Product of Two Sets of Variables" que facilita esse trabalho. Vamos mostrar 

aqui como executar então o produto cartesiano entre as duas tabelas utilizando esse novo 

recurso.

Como exemplo utilizaremos as mesmas tabelas do 

post anterior: a tabela de clientes (contendo 10 clientes) e a tabela de lojas (com 5 lojas). 

Cada tabela possui as coordenadas geográficas (latitude e longitude) e queremos calcular a distância 

entre os clientes e as lojas para uma campanha de CRM. As tabelas serão criadas via 

código.

O comando que faz o que queremos é o STATS 

CARTPROD. O comando possui a seguinte estrutura:

<pre style="background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; 

font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; 

text-align: left; width: 99%;">STATS CARTPROD
    VAR1 = variavel1
    INPUT2 = nome_dataset
    VAR2 = variável2
    /SAVE OUTFILE = arquivo



Onde:


O parâmetro VAR1 recebe o nome da variável (ou lista de variáveis, separada por 

espaços) do dataset ativo que queremos utilizar para o produto cartesiano.
O parâmetro INPUT2 recebe o nome do dataset onde estão o outro conjunto de variáveis 

que serão utilizadas para o produto cartesiano. Se esse comando estiver ausente o SPSS assume que 

todas as variáveis estão no mesmo dataset.
VAR2 recebe o nome da segunda variável (ou lista de variáveis) para o produto 

cartesiano. Se INPUT2 estiver presente o SPSS assume que as variáveis estão no dataset indicado.
Finalmente o comando SAVE OUTFILE indica o nome do arquivo SAV que será gerado com o resultado do 

produto cartesiano. O arquivo gerado é aberto automaticamente pelo comando.



Notei que ao utilizar esse comando utilizando um 

segundo dataset (ou seja, utilizando o parâmetro INPUT2 do comando) o nome das variáveis 

utilizadas no produto cartesiano devem estar em letras minúsculas ou senão o comando não consegue 

encontrar a variável. Acredito que, como o comando STATS CARTPROD é uma extensão Python 

para o SPSS e a linguagem Python é case-sensitive há algum problema no código fonte do comando 

que gera esse problema. Por esse motivo troquei o nome das variáveis dos arquivos para letras 

minúsculas. Outras funcionalidades da janela de diálogo do comando parecem não funcionar também (como alterar o nome do dataset gerado).

Segue abaixo o código comentado executando o 

produto cartesiano entre as tabelas.


<pre style="background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; 

font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; 

text-align: left; width: 99%;">
* Criamos a tabela exemplo de clientes.
DATA LIST 
    /cod_cliente 1-2(F) nome_cliente 4-10(A) lat_cliente 12-21 long_cliente 23-32.
BEGIN DATA
05 Augusto -45,860356 -22,568698
07 Lucas   -45,387821 -22,709247
12 Mariana -45,844268 -22,300496
13 Douglas -45,653701 -22,554361
17 Luiza   -45,947584 -22,896798
25 Solange -45,858844 -22,957062
33 Jose    -45,378294 -22,846408
45 Michel  -45,284786 -22,071699
52 Luis    -45,421867 -22,738143
56 Miguel  -45,275170 -22,962908
END DATA.
DATASET NAME TAB_CLI.

DATASET ACTIVATE TAB_CLI.
FORMATS
    lat_cliente(F8.6)
    long_cliente(F8.6).


* Criamos a tabela exemplo de lojas.
DATA LIST 
    /cod_loja 1-2(F) nome_loja 4-15(A) lat_loja 17-26 long_loja 28-37.
BEGIN DATA
10 LOJA AMARELA -45,899434 -22,267355
25 LOJA AZUL    -45,774589 -22,778579
74 LOJA VERDE   -45,389912 -22,046033
76 LOJA ROXA    -45,763099 -22,661482
35 LOJA LARANJA -45,947189 -22,261653
END DATA.
DATASET NAME TAB_LOJA.


DATASET ACTIVATE TAB_LOJA.
FORMATS
    lat_loja(F8.6)
    long_loja(F8.6).


* Fazemos o produto cartesiano entre os códigos das tabelas utilizando o STATS CARTPROD.
* O comando gera uma tabela com o produto cartesiano entre os códigos de lojas e códigos de clientes.
* Aproveitamos e inserimos para cada conjunto de variáveis todas as variáveis que queremos utilizar.
* Note que também nomeamos o novo arquivo (utilizando o comando DATASET NAME).
DATASET ACTIVATE TAB_LOJA.
STATS CARTPROD 
    VAR1=cod_loja nome_loja lat_loja long_loja
    INPUT2=TAB_CLI
    VAR2=cod_cliente nome_cliente lat_cliente long_cliente
    /SAVE OUTFILE="F:\OUT\TAB_TEMP".
DATASET NAME TAB_RESULTADO.



Abraços,Lucas 

Rodrigues