Variabili stringa
Le variabili stringa, semplicemente parlando, sono variabili che contengono non solo numeri, ma anche altri caratteri (possibilmente mescolati con numeri). Ad esempio, l’Indagine sociale europea memorizza le informazioni sul paese in cui gli intervistati sono stati intervistati nella variabile cntry
, che contiene stringhe come “DE”, “ES, “LT” ecc. Un altro termine che viene spesso utilizzato è “alfanumerico” variabili, ovviamente riferendo l ‘”alfabeto” e quindi alle lettere. Ma in realtà una variabile stringa può contenere caratteri come ” \ ” o ” – “o”:”e così via — tutto ciò che una tastiera può produrre.
La prima sezione si concentrerà sul tema della trasformazione delle stringhe in variabili numeriche. La seconda sezione presenterà alcune altre cose che ho trovato utili. Ma prima di tutto emetterò un …
Avviso
A partire dalla versione 14, Stata supporta Unicode (UTF-8). Se non sai cosa significa, si tratta di come i personaggi sono codificati digitalmente sul tuo computer. (Hai sentito che i computer usano bit, byte e simili per rappresentare le informazioni. Se si digita e si salva una “a”, non si trova una” a “sul disco rigido, ma un codice di computer che viene trasformato in una” a ” sullo schermo o sulla stampante.) Unicode è molto più universale di codifiche precedenti come ASCII o ANSII. Esso consente tonnellate di caratteri da rappresentare, tra cui molti dalle numerose lingue che non utilizzano i caratteri che si sta vedendo qui (derivato da, e in gran parte identici a quelli di, l’alfabeto latino), ma piuttosto cirillico, tailandese, o qualsiasi altra cosa.
Non entrerò nei dettagli qui, ma voglio solo avvisarti che le nuove possibilità di gestire i caratteri Unicode non sono coperte qui. Si noti in particolare che per alcune funzioni di stringa (come substr()
) ora ci sono funzioni equivalenti per gestire in particolare i caratteri Unicode. Queste funzioni hanno nomi composti di u
più la funzione convenzionale, ad esempio usubstr()
. Nota che finché ti limiti ai caratteri del codice ASCII originale (qualcosa che ho insegnato e predicato per decenni), non c’è bisogno di preoccuparsi. Ma per il resto, tieni presente che alcune cose potrebbero funzionare diversamente con Stata 14.
Ad esempio, gli umlaute tedeschi sono rappresentati in modo diverso in Stata 13 e Stata 14, e questo ha conseguenze oltre la visualizzazione dei caratteri. Ad esempio, la parola (tedesca) für è una stringa di lunghezza tre in Stata 13, ma la lunghezza della stringa è quattro in Stata 14. Ciò influenza anche i risultati di funzioni come strlen()
. Poiché strlen()
si riferisce alla memoria utilizzata (e non al numero di caratteri che appaiono sullo schermo), il risultato di strlen(für)
sarà anche 4 in Stata 14 in contrasto con 3 in Stata 13. La nuova funzione ustrlen(für)
, al contrario, produrrà 3. In altre parole, le funzioni” ustring ” si riferiscono al numero di caratteri che appaiono all’occhio umano, non alla quantità di memoria necessaria.
Da stringa a variabili numeriche
Anche se Stata può gestire variabili stringa, è chiaro sotto molti aspetti che le variabili numeriche sono molto preferite. Non da ultimo, la maggior parte delle procedure statistiche non accetta variabili di stringa. Fortunatamente, Stata offre alcuni modi semplici per convertire la stringa in variabili numeriche (e viceversa).
Variabili” solo stringa ”
A volte, le variabili stringa rappresentano proprietà. Questo potrebbe essere “maschio” e ” femmina “(più” gay”,” queer ” o qualsiasi altra cosa tu voglia, anche se questo è ancora molto raro nei dati delle scienze sociali). Oppure potrebbero essere i codici dei paesi menzionati nell’introduzione, cioè “DE”, “ES”, “UK”, US” ecc. Se è necessario trasformarlo in una variabile numerica, ogni categoria dovrebbe essere rappresentata da un numero diverso. Cambiare da stringa a numerico è facile, con encode
che è il comando di tua scelta:
encode cntry, gen(cntrynum)
convertirà cntry
in una variabile numerica, con i caratteri della precedente variabile stringa come etichette di valore.
Se per qualche motivo si desidera convertire una variabile numerica in una variabile stringa, è possibile utilizzare la funzione complementare decode
. Non sorprendentemente, Stata richiede che la variabile numerica sia etichettata; queste etichette verranno utilizzate come stringhe per rappresentare i diversi valori.
Numeri “mascherati” come stringhe
Un caso speciale sono variabili in cui i valori numerici sono memorizzati come variabile stringa, inclusi i casi in cui i valori numerici sono memorizzati insieme ad alcuni caratteri (irrilevanti). La procedura destring
offre modi per convertire tale variabile in una variabile numerica, lasciando invariati i valori originali (se consistono solo di numeri) o rimuovendo eventuali caratteri non numerici.
La forma generale del comando è
destring varname(s), options
con almeno un’opzione richiesta. Le opzioni più importanti sono:
-
generate(newvarnames)
: crea nuove variabili -
replace
: sostituisce le vecchie variabili) -
ignore("char1" )
: rimuove i caratteri “char1”, “char2” ecc. -
force
: cambia tutte le variabili che contengono caratteri non menzionati inforce
a missing
Non sorprendentemente, Stata offre anche il comando tostring
che funziona al contrario.
Trasformazioni di dati per variabili stringa
Quella che segue è una raccolta abbastanza eterogenea. In particolare, ci sono dozzine di funzioni che si riferiscono a variabili stringa, e coprirò solo una selezione molto piccola e arbitraria.
split
split
è un comando che funziona su una variabile stringa. Molto ovviamente, lo dividerà in due o più parti; lo farà creando nuove variabili lasciando invariata la vecchia variabile. Lo fa se c’è qualcosa nella variabile originale che separa quelle parti. Per impostazione predefinita, questo separatore è uno spazio. Pertanto, suddividendo una variabile contenente ” Joe Brady “si otterranno due nuove variabili, una contenente” Joe “e l’altra contenente”Brady”. Si noti che se c’è una persona di nome “Joe F. Brady” il risultato sarà di tre variabili.
split name
La variabile “nome” sarà divisa in variabili “nome1″,” nome2 ” ecc., purché contenga spazi vuoti, ovviamente. Il numero di nuove variabili sarà uguale al numero di spazi vuoti più 1.
split name, parse(,)
La variabile “nome” verrà divisa usando virgole anziché spazi vuoti come separatori. Puoi indicare diversi separatori; inoltre, i separatori possono essere costituiti da più di un carattere.
split lnum, destring
Le parti di “lnum” che rappresentano effettivamente i numeri verranno trasformate in variabili numeriche, ma solo se ci sono numeri per una data nuova variabile. Per esempio, se la variabile “lnum” è “60 30” in un caso e “50 ab” per un’altra, nuova variabile “lnum1” sarà numerico (con valori di 60 e 50), mentre “lnum2” sarà ancora una variabile stringa, e mentre il valore di questa variabile sarà pari a 30 per il primo caso, questo continua ad essere trattata come una stringa)
split lnum, destring force
Tutte le nuove variabili saranno numerico. Tuttavia, ogni volta che viene visualizzata un’informazione non numerica, il valore verrà mancante. Ad esempio, se “lnum” è “60 b30”, il valore di “lnum2” sarà mancante.
split lnum, destring force ignore(abcd)
Tutte le nuove variabili saranno numeriche. Qualsiasi carattere “a”, “b”, “c” o ” d ” verrà eliminato. Pertanto, nell’esempio precedente “b30” verrà trasformato in “30” e il risultato sarà effettivamente una variabile numerica.
split lnum, generate(ln)
La variabile “lnum” verrà suddivisa in variabili “ln1”, “ln2” e così via.
egen with ends ()
Questa funzione estrarrà una “parte” da una variabile stringa (in contrasto con il comando split, che creerà tante nuove variabili quante sono le “parti”). Ciò che è una parte è definito da un separatore. Ironia della sorte ,per impostazione predefinita ends()
estrarrà la prima parte (o head, come viene chiamato nel manuale di Stata). Tutto sommato, ci sono tre possibilità:
egen firstname = ends(name)
Questo estrarrà tutto ciò che appare in “nome” prima della prima occorrenza del separatore, che è predefinito è uno spazio vuoto. Questo è equivalente a egen firstname = ends(name), head
. Se non c’è un separatore, l’intera stringa contenuta in “nome” riapparirà in “nome”
egen lastname = ends(name), last
Questo estrarrà tutto ciò che appare in “nome” dopo l’ultima occorrenza del separatore. Di nuovo, se non c’è separatore, l’intero contenuto di “nome” sarà rappresentato in “cognome”.
egen endofname = ends(name), tail
Questo estrarrà tutto ciò che appare in “nome” dopo la prima occorrenza del separatore. Se non c’è separatore, il risultato sarà una stringa vuota.
Il separatore può essere indicato con punct(,)
. Pertanto, egen firstname = ends(name) punct(,)
estrarrà tutto ciò che appare in “nome” prima del primo verificarsi di una virgola. Sono possibili altri separatori, inclusi quelli composti da più caratteri, ma non è possibile indicare più separatori.
strmatch ()
Questo può essere usato insieme a generate/replace
. Cerca una “parola”, o più esattamente, una sequenza di caratteri, come in:
gen newvar = strmatch(oldvar,”somecharacters”)
La variabile” newvar “avrà un valore di 1 se” oldvar “consiste nella sequenza”somecharacters”. Tuttavia, se stai solo cercando “somecharacters” per apparire da qualche parte in “oldvar”, puoi usare
gen newvar = strmatch(oldvar, “*somecharacters*”)
che cercherà “somecharacters” per apparire ovunque. Scrivere
gen newvar = strmatch(oldvar, “*somecharacters”)
farà in modo che “somecharacters” appaia alla fine di “oldvar”, indipendentemente dal numero di caratteri che precedono “somecharacters”. Naturalmente, "somecharacters*"
può essere utilizzato pure.