O SPSS nao possuia (pelo menos ate a versao 22) um comando para realizar o produto cartesiano entre duas tabelas. Na versao 23 apareceu no menu a janela "Cartesian Product of Two Sets of Variables", que auxilia neste trabalho. Vamos discutir nesta postagem como fazer a operacao nas versoes anteriores, utilizando um "truque" com os comandos LOOP e XSAVE.Em nosso exemplo temos duas bases de dados: uma contendo uma lista de clientes e outra contendo uma lista de lojas. Queremos descobrir quais os clientes estao localizados a uma distancia de ate 1km de cada uma das lojas. Como estamos querendo calcular distancias ambas as bases precisam estar georeferenciadas, isto e, tanto a lista de clientes como a de lojas devem conter informacoes das coordenagas geograficas (latitude e longitude). A ideia e simples: se temos 10 clientes e 5 lojas vamos comparar as distancias de cada loja com as dos 10 clientes e filtrar apenas aquelas que possuem ate 1km. Para isso vamos realizar o produto cartesiano entre as tabelas e obter uma tabela final com 50 registros contendo as informacoes de clientes e lojas de modo que cada cliente apareca uma vez na tabela para cada loja e cada loja apareca uma vez para cada cliente.No scrpit abaixo os comentarios explicamo o que cada parte do codigo faz. Execute passo a passo o codigo para entender o que esta acontecendo.* 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 DATA05 Augusto -45,860356 -22,56869807 Lucas -45,387821 -22,70924712 Mariana -45,844268 -22,30049613 Douglas -45,653701 -22,55436117 Luiza -45,947584 -22,89679825 Solange -45,858844 -22,95706233 Jose -45,378294 -22,84640845 Michel -45,284786 -22,07169952 Luis -45,421867 -22,73814356 Miguel -45,275170 -22,962908END 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 DATA10 LOJA AMARELA -45,899434 -22,26735525 LOJA AZUL -45,774589 -22,77857974 LOJA VERDE -45,389912 -22,04603376 LOJA ROXA -45,763099 -22,66148235 LOJA LARANJA -45,947189 -22,261653END DATA.DATASET NAME TAB_LOJA.DATASET ACTIVATE TAB_LOJA.FORMATS LAT_LOJA(F8.6) LONG_LOJA(F8.6).* Criamos o codigo unico sequencial para a tabela de lojas.DATASET ACTIVATE TAB_LOJA.COMPUTE CODIGO = $casenum.EXECUTE.* Criamos na tabela de clientes o campo informando o total de lojas.* Neste exemplo inserimos o total manualmente no codigo. Poderiamos fazer isso* utilizando o comando AGGREGATE e um MATCH FILES.DATASET ACTIVATE TAB_CLI.COMPUTE TOTAL = 5.EXECUTE.* Fazemos o produto cartesiano. O resultado sera salvo no arquivo TEMP.SAV.DATASET ACTIVATE TAB_CLI.LOOP VAR = 1 TO TOTAL. XSAVE OUTFILE = "F:\OUT\TEMP.SAV".END LOOP.EXECUTE.* Abrimos o arquivo TEMP.SAV criado.* Note que agora o arquivo repete, para cada valor da variavel VAR, todos os clientes.* Altere o caminho do arquivo para uma pasta que exista em seu computador (ou rede).GET FILE = "F:\OUT\TEMP.SAV".DATASET NAME TAB_FINAL.* Fazemos o cruzamento para trazer para essa tabela os dados da loja.* Utilizamos a variavel VAR, que representa o codigo sequencial criado para as lojas.* Renomeamos a variavel para poder fazer o cruzamento dos arquivos.DATASET ACTIVATE TAB_FINAL.RENAME VARIABLES (VAR = CODIGO).SORT CASES BY CODIGO(A).MATCH FILES /FILE = * /TABLE TAB_LOJA /BY CODIGO.EXECUTE.Na tabela final temos entao as informacoes de todos os clientes e todas a lojas cruzadas. Para selecionar quais os clientes