SPSS Básico 01 – Um pouco sobre variáveis
Autor: Lucas | Publicado: 2012-09-26T13:02:00-03:00


O SPSS trabalha basicamente com dois tipos de dados: números e textos. As variáveis numéricas podem assumir diversos formatos de exibição na tabela, porém todas têm as mesmas propriedades. Variáveis que armazenam data e hora também são variáveis numéricas, mas estão “disfarçadas” pelo formato de exibição.


Para criar uma variável numérica no SPSS é aconselhável declará-la primeiro. Aconselhável, pois variáveis numéricas não precisam necessariamente ser declaradas. Podemos declarar uma variável utilizando o comando NUMERIC.

NUMERIC VAR_NUM(F8.2).



No código acima F8.2 representa o formato da variável: ela terá 8 dígitos (contando os dígitos antes e depois do separador decimal, dos quais dois deles estarão depois do separador decimal.


Variáveis do tipo texto são declaradas utilizando o comando STRING. Para criação de variáveis do tipo texto é obrigatório sua declaração. O comando abaixo mostra como proceder. A informação A15 indica que a variável pode conter textos com até 15 caracteres.

STRING VAR_TEXTO(A15).



Após declarar a variável precisamos atribuir valores a elas, para cada caso do arquivo. Para isso utilizamos o comando COMPUTE. Para deixar o exemplo mais claro, vamos supor que estamos trabalhando com os seguintes dados: 






Na tabela acima as variáveis CODIGO e IDADE são numéricas e a variável NOME é do tipo texto com tamanho A50. Vamos criar a variável ANO_NASC que informará o ano de nascimento da pessoa.

*Declaramos a variável ANO_NASC com formato numérico.
NUMERIC ANO_NASC(F4.0).

*Agora atribuímos valor a ela em todos os casos.
COMPUTE ANO_NASC = XDATE.YEAR($Time) – IDADE.
EXECUTE.


Alguns comentários sobre o código acima:


- As linhas iniciadas com um asterisco (*) indicam um comentário. Essa linha será desconsiderada pelo SPSS no momento da execução do código.


- Os comandos no SPSS terminam (com poucas exceções) com um ponto final, inclusive linhas com comentários.


- O comando COMPUTE utiliza a função XDATE.YEAR, que é uma função que retorna o ano em formato numérico de uma data. A data que utilizamos é uma constante do SPSS, $Time, que retorna a data e hora atual do sistema. Utilizamos também a variável IDADE na linha de comando. Podemos fazer isso pois IDADE é uma variável já exisente na tabela.


- O comando EXECUTE realiza o cálculo. Falaremos mais sobre ele adiante.


Vamos agora criar uma variável do tipo texto que contém apenas o primeiro nome da pessoal. Para isso, vamos buscar no texto a posição o primeiro espaço em branco e atribuir à nova variável o pedaço do nome do início até a posição do primeiro espaço em branco. Para localizar um texto dentro de outro utilizamos a função CHAR.INDEX. Para retornar um pedaço de outro texto, utilizamos a função CHAR.SUBSTR. As sintaxes da função são mostradas abaixo:

CHAR.INDEX(texto, texto_procurado, [divisor]).
CHAR.SUBSTR(texto, início, comprimento).



Na função CHAR.INDEX o terceiro parâmetro, DIVISOR, é opcional. Não trataremos dele nesse artigo. Os limitadores de texto no código do SPSS são aspas simples ou aspas duplas. 


Podemos realizar a tarefa proposta de duas maneiras: criando, primeiro, uma variável contendo a posição do primeiro espaço em branco no nome e depois criar a variável com o primeiro nome utilizando a informação dessa variável; ou criar a variável diretamente aninhando as funções CHAR.INDEX e CHAR.SUBSTR. Abaixo estão os códigos de como proceder das duas maneiras:

*Método 1: fazendo uma coisa de cada vez.

*Primeiro criamos a variável para a posição do primeiro espaço em branco. 
*Note que, como a variável  é numérica (a posição do caractere no texto) não estamos
*a declarando, uma vez que não um passo obrigatório no SPSS.
COMPUTE POSICAO = CHAR.INDEX(NOME, ‘ ‘).
EXECUTE.

*Declaramos agora a variável que vai conter o primeiro nome. 
STRING PRIMEIRO_NOME(A50).
COMPUTE PRIMEIRO_NOME = CHAR.SUBSTR(NOME, 1, POSICAO).

EXECUTE.


*Método 2: Fazendo de uma só vez.

*Declaramos a variável que vai receber o primeiro nome.
STRING PRIMEIRO_NOME(A50).

*Utilizamos o comando COMPUTE para atribuir valores a essa variável.
*Aqui aninhamos a função CHAR.INDEX dentro da função CHAR.SUBSTR.
COMPUTE PRIMEIRO_NOME = CHAR.SUBSTR(NOME, 1, CHAR.INDEX(NOME, ‘ ‘)).
EXECUTE.



Preste sempre atenção no tipo de dado que as funções retornam. A função CHAR.INDEX retorna um número inteiro e a função CHAR.SUBSTR retorna um texto. O SPSS mostrará uma mensagem de erro se as funções utilizadas no comando COMPUTE receberem parâmetros com tipos incompatíveis.


O comando EXECUTE


O comando EXECUTE lê a base de dados e realiza as transformações pendentes. Cada vez que um comando COMPUTE é executado, o SPSS o coloca na fila de comandos a serem executados, porém não o faz imediatamente. Isso é uma boa técnica para poupar tempo de execução quando mais de uma variável é criada.


Como exemplo, imagine que você está trabalhando em uma tabela com 10 milhões de registros (linhas). Ao criar uma variável, o SPSS lerá a tabela toda, do início ao fim, para atribuir valores a nova variável. Ao criar outra, novamente a tabela toda será lida. Isso pode ser evitado criando, via código, as duas variáveis pelo comando COMPUTEe utilizando o comando EXECUTE apenas uma vez. Assim as duas variáveis serão criadas simultaneamente com apenas uma passagem pela tabela. Note, porém, que as variáveis criadas não podem depender uma da outra, caso contrário é inevitável ter que utilizar dois comandos EXECUTE.


O exposto acima, aliás, é a vantagem em utilizar a sintaxe do SPSS ao invés do comando ‘Compute Variable’, no menu ‘Transform’. Sempre que um comando é realizado via point-&amp;-click (ou seja, sem utilizar código, diretamente na janela do SPSS) o comando EXECUTE é realizado automaticamente. Via código você pode controlar quando isso acontece.


Alguns comandos realizam a leitura da base de dados automaticamente, sem a necessidade do comando EXECUTE. Na dúvida, consulte a ajuda do SPSS: ela sempre informa se o comando realiza ou não essa leitura.

Abraços,
Lucas Rodrigues