Questa è la sesta parte di Introduzione a Stata. Se sei nuovo a Stata ti consigliamo vivamente di partire dall’inizio.
Vai al contenuto che segue questo video
Questo articolo ti insegnerà le basi per creare nuove variabili, modificare variabili esistenti e creare etichette.
Genera e sostituisci
I comandi principali per la creazione e la modifica delle variabili sono generate (di solito abbreviato gen) e replace (che, come altri comandi che possono distruggere le informazioni, non ha abbreviazioni). gen crea nuove variabili; replace modifica i valori delle variabili esistenti. La loro sintassi principale è identica:
gen variable = expression
or
replace variable = expression
dove variable è il nome della variabile che si desidera creare o modificare, e expression è l’espressione matematica di cui si desidera inserire il risultato. Le espressioni possono essere semplici come un singolo numero o coinvolgere tutti i tipi di funzioni complicate. È possibile esplorare quali funzioni sono disponibili digitando le funzioni di aiuto. Se l’espressione dipende da un valore mancante in qualsiasi punto, il risultato è mancante. Di solito questo è esattamente quello che ti aspetteresti e vuoi.
È particolarmente importante utilizzare i file do quando si modificano i dati, quindi iniziare creando un file do che carica il set di dati automatici:
capture log close
log usando vars.log, replace
cancella tutto
sysuse auto
I prezzi nel set di dati auto sono in dollari 1978, quindi potrebbe essere utile convertirli in dollari 2020. Per fare ciò è necessario moltiplicare i prezzi per un fattore di conversione che è l’indice dei prezzi al consumo nel 2020 diviso per l’indice dei prezzi al consumo nel 1978, o circa 4. Il codice sarà:
gen price2020 = price * 4
Aggiungi questa riga al tuo file do, eseguilo ed esamina i risultati con:
sfoglia make price price2020
I prezzi sono ancora generalmente inferiori a quelli che vedresti in una concessionaria di auto, ma probabilmente è perché le auto di oggi sono molto più belle delle auto del 1978. Questo è un buon esempio di come controllare il tuo lavoro: confronta quello che hai a quello che ti aspettavi, e se non corrispondono assicurati di sapere perché!
Internamente, Stata ha eseguito un ciclo: è calcolato il prezzo*4 per la prima osservazione e memorizzato il risultato in price2020 per la prima osservazione, quindi, calcolato il prezzo*4 per la seconda osservazione e memorizzato il risultato in price2020 per la seconda osservazione, e così via per tutte le osservazioni del set di dati. Imparerai come allungare questo paradigma one-observation-at-a-time in Data Wrangling in Stata, ma le attività che lo interrompono (come i mezzi di calcolo) richiedono un approccio diverso di cui parleremo presto.
Supponiamo di voler essere un po ‘ più precisi e utilizzare 4.14 come fattore di conversione. Potresti essere tentato di provare ad aggiungere codice che “corregge” la variabile price2020 (ad esempio, moltiplicandola per 4.14/4). Ma è più semplice e più pulito correggere il codice che lo ha creato in primo luogo. Cambiare:
gen price2020 = prezzo*4
a:
gen price2020 = prezzo*4.14
ed eseguire nuovamente il file do. Poiché il tuo file do carica i dati originali dal disco ogni volta che viene eseguito, può semplicemente creare la variabile price2020 come dovrebbe essere.
Avere sia price che price2020 ti ha permesso di confrontare i loro valori e controllare il tuo lavoro. Ma se vuoi lavorare solo con 2020 dollari e sei sicuro di avere la formula giusta, puoi usare il comando sostituisci per modificare la variabile di prezzo esistente invece di crearne una nuova:
sostituisci price = price*4.14
Esegui questa versione e riceverai il messaggio (74 modifiche reali apportate). Dato che il set di dati ha 74 osservazioni, questo ti dice che tutte sono state modificate, come ti aspetteresti. Una volta che inizi a includere se le condizioni, quante osservazioni sono state effettivamente modificate possono essere informazioni molto utili.
Esercizio: Al di fuori degli Stati Uniti, l’efficienza del carburante viene spesso misurata in litri per chilometro (si noti che poiché il carburante utilizzato è nel numeratore, un numero basso è buono). Per convertire miglia per gallone in litri per chilometro, moltiplicare il reciproco di mpg (1 / mpg) per 2,35. Crea una variabile che memorizza l’efficienza del carburante di ogni auto in litri per chilometro.
Creazione di variabili con condizioni If
Vai al contenuto dopo questo video
Se un comando gen ha una condizione if, la variabile risultante sarà (e deve) ancora esistere per tutte le osservazioni. Tuttavia verrà assegnato un valore mancante per le osservazioni in cui la condizione if non è vera. Se un comando replace ha una condizione if, le osservazioni in cui la condizione if non è vera rimarranno invariate. Ciò consente di impostare variabili su valori diversi per diverse osservazioni.
Supponiamo di voler comprimere la scala a cinque punti della variabile rep78 in una scala a tre punti. Aggiungi il seguente codice al tuo file do per farlo:
gen rep3 = 1 se rep78<3
sostituire rep3 = 2 se rep78==3
sostituire rep3 = 3 se rep78>& rep78<.
La prima riga crea la nuova variabile rep3, ma la imposta solo su uno per i casi in cui rep78 è inferiore a tre. Gli altri spariscono. La seconda riga cambia alcune di queste mancanze a due, e la terza ne cambia altre a tre. Eseguire il file do, annotare il numero di osservazioni modificate da ogni riga e confrontarlo con il numero totale di osservazioni nel set di dati.
Quale sarà il valore di rep3 per le osservazioni in cui manca rep78? Mancante, come dovrebbe essere, perché non è mai stato impostato su nient’altro. Le cinque osservazioni in cui manca rep78 sono state implicitamente o esplicitamente escluse da tutti e tre i comandi, quindi hanno iniziato con un valore mancante per rep3 e non sono mai state modificate. (Se hai dimenticato di escludere i valori mancanti dall’ultimo comando, rep3 sarebbe tre per le auto in cui manca rep78, un errore fin troppo comune. Ricordate, manca è essenzialmente infinito.)
Esercizio: Combinare quelli e due ha senso perché ce ne sono così pochi, ma non c’era particolare bisogno di combinare i quattro e i cinque. Creare una variabile rep4 che combina quelli e due e rinumera le altre categorie di conseguenza (cioè rep4 dovrebbe passare da uno a quattro).
Recode
Vai al contenuto seguente a questo video
Il comando recode ti dà un modo alternativo di creare rep3. È progettato esclusivamente per le attività di ricodifica ed è molto meno flessibile di gen e replace. Ma è molto facile da usare. La sintassi è:
recode var (regola 1) (regola 2) (più regole se necessario…), gen (newvar)
L’opzione gen alla fine non è richiesta—se non è lì, la variabile originale verrà modificata piuttosto che creare una nuova variabile con i nuovi valori. Puoi anche far funzionare la ricodifica su un elenco di variabili, ricodificandole tutte allo stesso modo.
Il nucleo del comando recode è un elenco di regole, ciascuna tra parentesi, che indicano come una variabile deve essere ricodificata. Prendono la forma (inputValue = outputValue). Il valore input può essere un singolo numero, un elenco di numeri separati da spazi o un intervallo di numeri specificati con inizio/fine. L’outputValue sarà sempre un singolo numero. Tutto ciò che non è coperto da una regola viene lasciato invariato, quindi puoi usare recode per modificare solo alcuni valori di una variabile o ridefinirla completamente come facciamo qui. Ecco una versione di ricodifica della conversione di rep78 in una scala a tre punti:
recode rep78 (1 2 = 1) (3 = 2) (4 5 = 3), gen (rep3b)
Valori mancanti richiesti nessuna gestione speciale: poiché missing non è stato elencato nei valori di input di alcuna regola, le osservazioni con valori mancanti non vengono modificate.
Esercizio: crea rep4b, combinando solo quelli e due come sopra, usando recode.
Variabili indicatrici
Vai al contenuto seguente a questo video
Nella creazione di variabili indicatrici puoi sfruttare il fatto che Stata considera true come uno e false come zero impostando la nuova variabile uguale a una condizione. Considera:
gen lowMPG = (mpg<20)
(Le parentesi sono facoltative, ma rendono più facile la lettura.) Questo crea una variabile indicatore chiamata lowMPG che è uno (vero) per le auto in cui mpg è inferiore a venti e zero (falso) dove mpg è maggiore o uguale a venti. Per vedere i risultati eseguire il file do e quindi digitare browse make mpg se lowMPG.
Nessuna macchina ha un valore mancante per mpg, ma se lo facesse, il codice sopra gli assegnerebbe uno zero per lowMPG come se fosse noto per avere un buon chilometraggio del gas. La variabile lowMPG dovrebbe mancare per questi casi, che puoi fare con:
gen lowMPG = (mpg<20) se mpg<.
Esercizio: Creare una variabile indicatore che identifica le auto con buoni record di riparazione (definito come rep78 maggiore di 3). Come cambierebbe il tuo codice se la variabile dell’indicatore fosse necessaria per identificare le auto che sono note per avere buoni record di riparazione?
Variabili stringa
Vai al contenuto di questo video
I comandi gen e replace funzionano anche con variabili stringa. Le espressioni sul lato destro del segno di uguale non sono matematiche, ma seguono regole simili. I valori delle stringhe vanno sempre tra virgolette, quindi se si desidera memorizzare la lettera x in una variabile chiamata x si direbbe gen x = “x”. Stata non troverebbe questo confuso (anche se potresti) perché x tra virgolette (“x”) significa la lettera x e x senza virgolette significa la variabile x.
L’aggiunta per le stringhe è definita come mettere una stringa dopo l’altra, quindi” abc ” + ” def ” = “abcdef”. Ma la maggior parte del lavoro con le stringhe viene eseguita da funzioni speciali che prendono le stringhe come input (valori di stringa o variabili contenenti stringhe) e restituiscono le stringhe come output.
La variabile make registra in realtà due informazioni: il nome della società che ha prodotto l’auto e il nome del modello di auto. Puoi facilmente estrarre il nome dell’azienda usando la funzione word ():
gen company = word (make,1)
Per vedere i risultati, esegui il file do e digita sfoglia make company. Il primo input, o argomento, per la funzione word() è la stringa su cui agire (in questo caso una variabile contenente stringhe). Il secondo è un numero che dice quale parola vuoi. La funzione interrompe la stringa di input in parole in base agli spazi che contiene e restituisce quello richiesto, in questo caso il primo.
Diremo molto di più sulle funzioni stringa nei dati di testo (prossimi), ma se sei desideroso di iniziare puoi fare molto con le seguenti funzioni:
parola() | Estratti di una parola da una stringa |
strpos() | Indica se una stringa contiene un’altra stringa, e se è così la sua posizione |
substr() | estrazione di parti di una stringa |
subinstr() | Sostituisce una parte di una stringa con qualcos’altro |
length() | ti Dice quanto è lunga la stringa (quanti caratteri contiene) |
Tipo di aiuto, il nome di una funzione in finestra Stata principale per imparare come funziona.
Esercizio: crea una variabile modello contenente il nome del modello di auto (cioè il resto di make). Il codice deve essere in grado di gestire i nomi dei modelli lunghi una o due parole.
Conversione di variabili stringa in variabili numeriche
Vai al contenuto seguente a questo video
A volte una variabile che dovrebbe essere numerica viene inserita in Stata come stringa. È possibile risolvere il problema con il comando destring, che converte una variabile stringa che contiene numeri in una variabile numerica. La sintassi è solo destring variabile, replace, dove variabile deve essere sostituito dal nome della variabile (o variabili) da destringed. Se la variabile string contiene altro che numeri, puoi aggiungere l’opzione force per dire a Stata di convertirla comunque, ma le osservazioni con caratteri non numerici otterranno un valore mancante. Si noti che i “caratteri non numerici” includono i segni del dollaro e le virgole!
In generale, se devi usare l’opzione force è perché Stata non è sicura che quello che stai facendo sia una buona idea, e dovresti riflettere attentamente prima di farlo. In questo caso dovresti esaminare i caratteri non numerici per vedere se avrebbe senso rimuoverli prima (come quei segni e virgole del dollaro) o se la variabile non è in realtà solo numeri dopo tutto.
Questo set di dati non ha variabili che devono essere destringed, quindi facciamone una:
gen x = “5”
Nota come le virgolette intorno a “5” significano che x è una variabile stringa contenente il carattere 5, non una variabile numerica contenente il valore 5. Solo per rendere le cose complicate, cambiamo alcuni dei valori di x in testo reale:
replace x = “missing” se foreign
Ora prova a destring x:
destring x, replace
Stata rifiuterà, perché alcuni dei valori di x non possono essere convertiti in numeri. Ma i valori che non possono essere convertiti sono “mancanti”, quindi è del tutto appropriato convertirli in valori mancanti. Quindi riprova con l’opzione force:
destring x, sostituisci force
Ora Stata convertirà x in una variabile numerica, con alcuni valori mancanti.
Egen
Vai al contenuto seguente a questo video
Il comando egen, abbreviazione di “extended generate” consente di accedere ad un’altra libreria di funzioni. È un po ‘ un hodge-podge, ma le funzioni egen utilizzeranno le statistiche di riepilogo più calcolate:
Name | Description |
---|---|
min() | Minimum value |
max() | Maximum value |
mean() | Mean |
median() | Median |
sd() | Standard Deviation |
total() | Total |
These are examples of aggregate functions: they take multiple numbers as input and return a single number as output. Funzionano anche attraverso le osservazioni, e quindi non possono essere facilmente eseguiti usando gen poiché funziona un’osservazione alla volta. La sintassi sembra quasi identica a gen:
egen variable = function ()
La grande differenza con egen è che non stai scrivendo la tua espressione matematica; stai solo usando una funzione dalla libreria. Ad esempio, se dovevi impostare una variabile su una media divisa per due, non potevi dire egen y = mean(x)/2. Dovresti invece prima eseguire egen y = mean (x) e quindi sostituire y = y/2.
Un’altra importante differenza è come vengono gestiti i valori mancanti. Ricorda che con gen, se mancava una parte dell’input, l’output sarebbe mancante. Tuttavia, egen ignora semplicemente i valori mancanti e calcola il risultato utilizzando i dati disponibili. Di solito questo è ciò che vuoi, ma devi essere consapevole di ciò che egen sta facendo ed essere sicuro che abbia senso per il tuo particolare compito.
Le funzioni egen per il calcolo delle statistiche di riepilogo sono molto comunemente combinate con by per calcolare le statistiche di riepilogo per i gruppi. Calcola il prezzo medio dell’auto per ogni azienda e quindi visualizza i risultati con:
bysort company: egen meanPrice = mean(price)
tab company, sum (meanPrice)
Ricorda che bysort company: prima ordina i dati per azienda e quindi esegue il seguente comando egen separatamente per ogni azienda.
Gli zeri per la deviazione standard riflettono il fatto che ogni auto prodotta dalla stessa azienda ha lo stesso valore del prezzo medio. Questo perché meanPrice descrive l’azienda, non l’auto. In realtà questa è la definizione di una variabile che descrive un gruppo: ogni unità all’interno dello stesso gruppo deve avere lo stesso valore della variabile.
Se avessimo voluto solo vedere il valore medio del prezzo per ogni azienda, avremmo potuto semplicemente eseguire:
tab company, sum(price)
Ma dopo aver eseguito egen ora abbiamo la media in una variabile, disponibile per l’uso.
Esercizio: creare una variabile contenente il valore medio di rep78 per ogni azienda. Quindi esaminare le frequenze di rep78 all’interno di ogni azienda creando una tabella bidirezionale con scheda. Assicurati di includere valori mancanti. Lincoln e Olds hanno la stessa media; quanto bene pensi che questo riassume la distribuzione di rep78 per le due società? Quindi considera i valori mancanti: supponiamo che sia stato rivelato il valore effettivo di rep78 per le auto con vales mancanti. Cosa dovrebbero essere affinché questi mezzi non cambino? Quanto è plausibile?
Etichette
Vai al contenuto che segue questo video
Le buone etichette rendono i tuoi dati molto più facili da capire e lavorare. Mentre Stata ha molti tipi di etichette, ci concentreremo sulle più comuni e più utili: etichette variabili e etichette di valore.
Etichette variabili
Le etichette variabili trasmettono informazioni su una variabile e possono sostituire nomi di variabili lunghi. Questo set di dati ha già un buon set di etichette variabili, come puoi vedere nella finestra Variabili. L’unico che confonde è l’etichetta su foreign, quindi cambiala usando il comando label variable. La sintassi per impostare un’etichetta variabile è:
etichetta variabile variableName “label”
Quindi digita:
etichetta variabile esterna “Car Origin”
Guarda di nuovo la finestra delle variabili per vedere i risultati.
Etichette di valore
Le etichette di valore vengono utilizzate con variabili categoriali per indicare il significato delle categorie. Ne abbiamo visto uno in azione con la variabile straniera: sono state le etichette di valore a dirci che uno 0 significa ” Domestico “e un 1 significa” Straniero.”
Esploriamo le etichette dei valori etichettando i valori di rep3, la nuova variabile che abbiamo ricodificato per comprimere rep78 da una scala a cinque punti a una scala a tre punti. Le etichette di valore sono una mappatura da un insieme di numeri interi a un insieme di descrizioni di testo, quindi il primo passo è definire la mappa. Per fare ciò, utilizzare il comando label define:
label define mapName value1 “label1” value2 “label2″…
Così:
label define replabel 1 “Bad” 2 “Average” 3 “Good”
Questo crea una mappatura chiamata replabel ma non la applica a nulla. Prima di fare qualcosa di utile, devi dire a Stata di etichettare i valori della variabile rep usando la mappatura replabel appena definita. La sintassi è:
label values variable map
E quindi:
label values rep3 replabel
Per vedere i risultati, esegui:
list make rep3
Una volta definita una mappa puoi applicarla a qualsiasi numero di variabili: basta sostituire la singola variabile nel comando label values sopra con una lista di variabili. Supponiamo che tu stia lavorando con i dati del sondaggio e che le tue variabili includano il sesso del rispondente, il sesso del coniuge del rispondente e i generi di tutti i figli del rispondente. È possibile definire solo una mappa chiamata genere e quindi utilizzarla per etichettare i valori di tutte le variabili di genere.
Tre comandi per la gestione delle etichette di valore: label dir ti fornisce un elenco di tutte le etichette definite e label list ti dice cosa significano. Il comando describe indica il nome delle etichette di valore associate a ciascuna variabile (tra molte altre cose utili).
Esercizio: Creare etichette di valore per rep4 e applicarle. Sentitevi liberi di decidere come descrivere i livelli.
Etichette tramite Recode
Quando si utilizza recode per creare una nuova variabile, Stata creerà automaticamente un’etichetta variabile per esso (“RECODE of …”). È inoltre possibile definire etichette di valore per esso inserendo l’etichetta desiderata per ogni valore alla fine della regola che lo definisce. Crea un’altra versione di rep3, questa volta con etichette fin dalla sua creazione, con:
recode rep78 (1 2 = 1 “Cattivo”) (3 = 2 “Medio”) (4 5 = 3 “Buono”), gen(rep3c)
Esercizio: Creare un rep4c utilizzando recode, impostando etichette di valore per esso.
Questo file cambia il set di dati che utilizza, quindi dovrebbe salvare la nuova versione. Ricorda, non salvare mai l’output sul tuo input, quindi non salvare i nuovi dati come auto. Se lo facessi, non potresti eseguire di nuovo questo file do: si bloccherebbe quando tentava di creare price2020 perché quella variabile esisterebbe già nel set di dati modificato. Invece, salvare i dati come autoV2, come in ” versione 2 del set di dati dell’automobile.”
salva autoV2, sostituisci
Infine, chiudi il registro:
log close
Questo ci porta alla fine dell’introduzione a Stata. Speriamo che sia stato utile a voi. Per saperne di più, considerare la lettura di Dati Wrangling in Stata, o gli altri contenuti della Base di conoscenza di calcolo statistico della SSCC.
Ultima revisione: 27/5/2020