String Variables
String variables, simply speaking, are variables that contain not just numbers, but also other characters (possibly mixed with numbers). Por exemplo, o inquérito Social Europeu recolhe informações sobre o país onde os inquiridos foram inquiridos na variável cntry
, que contém textos como “DE”, “ES”,” LT”, etc. Outro termo que é frequentemente usado é variáveis “alfanuméricas”, obviamente referindo-se ao” alfabeto ” e, portanto, às letras. Mas na verdade uma variável de string pode conter caracteres como ” \ ” ou ” – “ou”:”e assim por diante — qualquer coisa que um teclado possa produzir.
a primeira secção centrar-se-á no tópico da transformação da cadeia em variáveis numéricas. A segunda secção vai apresentar outras coisas que achei úteis. Mas antes de mais, vou emitir um …
Warning
As of version 14, Stata supports Unicode (UTF-8). Se você não sabe o que isso significa — é sobre como os caracteres são codificados digitalmente em seu computador. (Você ouviu que os computadores usam bits, bytes e essas coisas para representar informações. Se você digitar e salvar um “a”, você não vai encontrar um “a” em seu disco rígido, mas algum código de computador que é transformado em um “a” em sua tela ou na impressora. Unicode é muito mais universal do que codificações anteriores, como ASCII ou ANSII. Ele permite que toneladas de caracteres sejam representados, incluindo muitos das numerosas línguas que não usam os caracteres que você está vendo aqui (derivado, e na maioria das partes idênticas aos do alfabeto latino), mas sim Cirílico, tailandês, ou o que quer que.
não vou entrar em detalhes aqui, mas apenas quero alertá-lo de que as novas possibilidades de lidar com caracteres Unicode não são cobertas aqui. Note particularmente que para algumas funções de cadeia (como substr()
) existem agora funções equivalentes para lidar especialmente com caracteres Unicode. Estas funções têm nomes que são compostos de u
mais a função convencional, por exemplo, usubstr()
. Note que enquanto você se restringir aos personagens do código ASCII original (algo que eu tenho ensinado e pregado por décadas), não há necessidade de se preocupar. Mas de outra forma, esteja ciente de que algumas coisas podem funcionar de forma diferente com o Stata 14.
por exemplo, o umlaute alemão é representado de forma diferente no stata 13 e no Stata 14, e isso tem consequências além da exibição de caracteres. Como um exemplo, a palavra (alemã) für é uma cadeia de comprimento três no stata 13, mas o comprimento da corda é quatro no Stata 14. Isto também influencia os resultados de funções como strlen()
. Como strlen()
refere-se à memória usada (e não o número de caracteres como eles aparecem na tela), o resultado de strlen(für)
também será 4 no Stata 14, em contraste com 3 no Stata 13. A nova função ustrlen(für)
, em contraste, produzirá 3. Em outras palavras, funções “ustring” referem-se ao número de caracteres como eles aparecem para o olho humano, não a quantidade de memória necessária.
de string para variáveis numéricas
mesmo que o Stata possa lidar com variáveis de string, é claro em muitos aspectos que as variáveis numéricas são muito preferidas. Não menos importante, a maioria dos procedimentos estatísticos simplesmente não aceitam variáveis de cadeia de caracteres. Felizmente, Stata oferece algumas maneiras fáceis de converter string para variáveis numéricas (e vice-versa).
” String only ” variables
Sometimes, string variables represent propierties. Isto pode ser “masculino” e “feminino” (mais “gay”, “queer”, ou o que você quiser, mesmo que isso ainda seja muito raro em dados de Ciências Sociais). Ou podem ser os códigos de país mencionados na introdução, ou seja,” DE”,” ES”,” UK”, EUA ” etc. Se você precisar transformar isto em uma variável numérica, cada categoria deve ser representada por um número diferente. Mudar de texto para numérico é fácil, com encode
sendo o comando da sua escolha:
codificar a cntry, gen (cntrynum)
irá converter cntry
para uma variável numérica, com os caracteres da antiga variável string como etiquetas de valor.
se, por alguma razão, quiser converter uma variável numérica numa variável de cadeia de caracteres, poderá usar a função complementar decode
. Não surpreendentemente, o Stata requer que a variável numérica seja rotulada; estas legendas serão usadas como strings para representar os diferentes valores.
números “disfarçados” como strings
um caso especial são variáveis onde os valores numéricos são armazenados como uma variável de string, incluindo casos em que os valores numéricos são armazenados juntamente com alguns caracteres (irrelevantes). O procedimento destring
oferece formas de converter essa variável para uma variável numérica, deixando os valores originais inalterados (se consistirem apenas de números) ou removendo quaisquer caracteres não-numéricos.
A forma geral do comando é
destring varname(s), opções
com, pelo menos, uma opção a ser necessário. As opções mais importantes são::
-
generate(newvarnames)
: cria novas variáveis -
replace
: substitui o antigo variável(is) -
ignore("char1" )
: remove os caracteres “char1”, “char2”, etc. -
force
: muda todas as variáveis que contêm caracteres não mencionados emforce
para omissa
não surpreendentemente, Stata também oferece comando tostring
que funciona ao contrário.
transformações de dados para variáveis de cadeia
o que se segue é uma coleção bastante heterogênea. Em particular, existem dezenas de funções que se referem a variáveis de string, e eu vou cobrir apenas uma seleção muito pequena e arbitrária.
split
split
é um comando que trabalha numa variável de cadeia de caracteres. Muito obviamente, ele vai dividi-lo em duas partes de minério mais; ele vai fazê-lo criando novas variáveis, deixando a antiga variável inalterada. Fá-lo se houver algo na variável original que separa essas partes. Por padrão, este separador é um espaço. Assim, dividir uma variável contendo ” Joe Brady “resultará em duas novas variáveis, uma contendo” Joe “e a outra contendo”Brady”. Note que se houver uma pessoa chamada “Joe F. Brady” o resultado será três variáveis.
split name
variável ” name “will be split into variables” name1″,” name2 ” etc. desde que contenha espaços em branco, claro. O número de novas variáveis será igual ao número de espaços em branco mais 1.
split name, parse(,)
a variável “name” será dividida usando vírgulas em vez de espaços em branco como separadores. Pode indicar vários separadores; além disso, os separadores podem consistir em mais de um carácter.
split lnum, destring
partes de” lnum ” que realmente representam números serão transformadas em variáveis numéricas — mas apenas se houver números ao longo de uma dada nova variável. Por exemplo, se a variável “lnum” é “60 30” para um caso e “50 ab” para outra, a nova variável “lnum1” vai ser numérico (com valores de 60 e 50), enquanto “lnum2” continuará a ser uma variável de seqüência de caracteres (e enquanto o valor desta variável será de 30 para o primeiro caso, isso ainda será tratado como uma seqüência de caracteres)
split lnum, destring force
Todas as novas variáveis serão numérico. No entanto, sempre que aparece uma informação não-numérica, o valor estará em falta. Por exemplo, se “inum” for “60 b30”, o valor de “lnum2” estará faltando.
split lnum, destring force ignore(abcd)
todas as novas variáveis serão numéricas. Quaisquer personagens “A”, “b”, “c” ou ” d ” serão descartados. Assim, no exemplo anterior “b30” será transformado em “30” e o resultado será de fato uma variável numérica.
split lnum, generate(ln)
a variável ” lnum “será dividida em variáveis” ln1″,” ln2 ” e assim por diante.
egen with ends ()
This function will extract one “part” from a string variable (in contrast to the split command, which will create as many new variables as there are “parts”). O que é uma parte é definido por um separador. Ironicamente, por padrão ends()
irá extrair a primeira parte (ou cabeça, como é nomeado no manual de stata). Ao todo, há três possibilidades.:
egen firstname = ends(name)
isto irá extrair qualquer coisa que aparece em “nome” antes da primeira ocorrência do separador, que seja padrão é um espaço em branco. Isto é equivalente a egen firstname = ends(name), head
. Se não houver separador, toda a cadeia contida em “nome” irá aparecer de novo em “nome próprio” “
egen lastname = ends(name), last
isto irá extrair qualquer coisa que aparece em “nome” após a última ocorrência do separador. Mais uma vez, se não houver separador, todo o conteúdo de “nome” será representado em “lastname”.
egen endofname = ends(name), tail
this will extract anything that appears in “name” after the first occurence of the separator. Se não houver separador, o resultado será uma cadeia vazia.
o separador pode ser indicado por punct(,)
. Assim, egen firstname = ends(name) punct(,)
irá extrair qualquer coisa que aparece em” nome ” antes da primeira ocorrência de uma vírgula. Outros separadores são possíveis, incluindo aqueles que consistem em vários caracteres, mas você não pode indicar vários separadores.
strmatch ()
isto pode ser usado em conjunto com generate/replace
. Parece uma “palavra”, ou, mais exatamente, uma seqüência de caracteres, como em:
gen newvar = strmatch(oldvar, “somecharacters”)
a Variável “newvar” terá um valor de 1 se “oldvar” consiste na sequência de “somecharacters”. No entanto, se você está olhando apenas para “somecharacters” para aparecer em algum lugar no “oldvar”, você pode usar
gen newvar = strmatch(oldvar, “*somecharacters*”)
que vai olhar para “somecharacters” para aparecer em qualquer lugar. Escrito
gen newvar = strmatch(oldvar, “*somecharacters”)
vai fazer Stata olhar para “somecharacters” aparecer no final de “oldvar”, não importa quantos caracteres preceder “somecharacters”. É claro que "somecharacters*"
também pode ser usado.