Loops (foreach e forvalues)

Ocasionalmente, um passo no seu trabalho (uma peça de transformação de dados, algumas análises) tem de ser realizado repetidamente, com alguma ligeira variação. Imagine que você deseja fazer várias análises de regressão com um determinado conjunto de variáveis independentes, por exemplo, a fim de investigar o efeito dessas variáveis em uma série de resultados. (Note que para uma análise totalmente simultânea de vários resultados, talvez o procedimento sureg possa ser usado; vamos supor que isto não é o que queremos fazer aqui). Claro, você pode escrever o primeiro comando, copiar a linha de comando, trocar o nome da variável dependente, e assim por diante. Mas os loops às vezes facilitam as coisas.

Há duas formas de definir loops: foreach refere-se a uma lista de elementos a serem enumerados, enquanto forvalues refere-se a um intervalo de números com o efeito de que o que se segue é executado em cada um desses números. Os exemplos a seguir esperamos esclarecer.

Loops com foreach

Vamos utilizar o exemplo com o qual comecei esta entrada. Suponha que você deseja investigar os efeitos da renda, status familiar e gênero em uma gama de variáveis dependentes (é claro que este exemplo é muito simplificado). Usando foreach, isto pode ser alcançado assim:

para cada x em excl depr satisf satisf satisf satisfacer a atividade feliz {
regressar `x’ renda i.famstat gênero
}

Isto irá executar análises de regressão das variáveis “excl”, “depr” e assim por diante sobre o conjunto de variáveis independentes. Os nomes das variáveis na lista que segue “foreach x” irão sucessivamente substituir o x na linha que começa com regression. Ao invés de x, qualquer outro caractere ou string de caracteres pode ser usado.

Certifique-se de anotar duas coisas: Primeiro, o aparelho e a sua colocação. A lista de elementos da lista é seguida por uma cinta de abertura (na mesma linha!). O(s) comando(s) a ser(em) executado(s) segue(m) na(s) próxima(s) linha(s) – na verdade, vários comandos podem seguir, todos eles serão repetidos enquanto a Stata estiver trabalhando na lista de elementos da lista. A cinta de fechamento segue em uma linha extra no final.

Segundo, dentro das cinta, x (ou o que quer que você possa usar em seu lugar) é cercado por um acento grave, ou gravis, à esquerda, e um apóstrofo à direita. (Acabei de saber que os programadores chamam-lhe backquote, backtick ou backgrave – para não ser confundido com backstop ). Note que o manual Stata (e outras fontes Stata) se refere ao acento grave pelo nome de “single left quote”, mas pelo menos no teclado alemão QUWERTZ (e para usuários alemães que usam vírgulas para aspas simples à esquerda) eu acho mais correto falar sobre o acento grave (ou gravis, em francês: accent grave). Seja como for, veja o glifo no comando acima – o que você vê aqui é correto, enquanto o manual Stata muitas vezes parece enganador (para usuários alemães!).

A lista de itens que segue foreach in não precisa ser uma lista de variáveis; pode ser qualquer lista de elementos. Veja o próximo exemplo, que é um caso especial de estes elementos serem uma série de números. Se este não for o caso, fique na frente, mas proceda da mesma forma.

Loops com forvalues

Algumas vezes você tem uma situação em que algo, por exemplo, uma lista de variáveis, está relacionado a uma lista de números consecutivos. Aqui está um exemplo real do meu trabalho recente (alguns nomes de variáveis bastante embaraçosos foram simplificados aqui). Nos dados do inquérito, é frequente encontrar informação sobre os membros do agregado familiar em que o inquirido está a viver. Neste caso, a informação sobre o estado actual dos membros foi armazenada nas variáveis “hhms_2” a “hhms_10” (o primeiro membro do agregado familiar é o próprio inquirido!). Desejei criar, para cada membro do agregado familiar, uma variável fictícia indicando se estavam empregados ou não (com vários tipos de emprego codificados como 1 a 4). Uma das várias formas de o fazer foi:

forvalues i= 2/10 {
gen emp’i’ = inrange(hhms_`i’,1,4)
}

Os números 2 a 10 são referidos pelo índice “i” neste exemplo, mas em vez de “i” pode usar qualquer caracter ou string de caracteres (como, por exemplo, “número”), ou mesmo números. Dentro do laço, o índice é rodeado pelo acento grave (ou gravis) à esquerda e o apóstrofo à direita. Atenção: O primeiro acento grave, ou seja, o que segue “emp”, parece um apóstrofo aqui devido a alguns problemas técnicos que encontrei, mas na vida real deve ser sempre um acento grave.

O resultado é um número de novas variáveis, chamadas “emp2” a “emp10”, com valores de 1 se o respectivo membro do agregado familiar for empregado e 0 caso contrário.

Deixe uma resposta

O seu endereço de email não será publicado.