Abbina la fusione di file di dati | Moduli di apprendimento SPSS

Introduzione

Quando hai due file di dati, puoi combinarli unendoli fianco a fianco, abbinando le osservazioni in base a un identificatore. Ad esempio, di seguito abbiamo un file contenente papà e abbiamo un file contenente faminc. Vorremmo abbinare unire i file insieme in modo da avere l’osservazione papà sulla stessa linea con l’osservazione faminc basato sulla variabile chiave famid.

dads famid name inc 2 Art 22000 1 Bill 30000 3 Paul 25000 faminc famid faminc96 faminc97 faminc98 3 75000 76000 77000 1 40000 40500 41000 2 45000 45400 45800 

Dopo partita fondendo i papà e faminc, i dati sarebbe simile a questo.

famid name inc faminc96 faminc97 faminc98 1 Bill 30000 40000 40500 41000 2 Art 22000 45000 45400 45800 3 Paul 25000 75000 76000 77000 

Unisci uno a uno

Iniziamo creando i file che fonderemo. Qui di seguito creiamo i file papà.sav e faminc.sav.

DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.2 Art 220001 Bill 300003 Paul 25000END DATA.LIST.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid faminc96 faminc97 faminc98.BEGIN DATA.3 75000 76000 770001 40000 40500 410002 45000 45400 45800END DATA.LIST.SAVE OUTFILE = "faminc.sav". 

L’output di queste affermazioni è mostrato di seguito, confermando che abbiamo letto correttamente i dati.

FAMID NAME INC 2.00 Art 22000.00 1.00 Bill 30000.00 3.00 Paul 25000.00FAMID FAMINC96 FAMINC97 FAMINC98 3.00 75000.00 76000.00 77000.00 1.00 40000.00 40500.00 41000.00 2.00 45000.00 45400.00 45800.00

Ci sono tre passaggi per abbinare unire papà.sav con faminc.sav. (Si noti che questa è una fusione uno a uno perché c’è una corrispondenza uno a uno tra i record di papà e faminc.) Questi tre passaggi sono illustrati di seguito.

  1. Usa i CASI di ORDINAMENTO per ordinare i papà su famid e salvare quel file (lo chiameremo dads2.sav)
  2. Usa SORT CASES per ordinare faminc su famid e salvare quel file (lo chiameremo faminc2.sav)
  3. Utilizzare i FILE DI CORRISPONDENZA per unire il dads2.sav e faminc2.file sav basati su famid

Di seguito mostriamo i comandi per eseguire l’unione.

GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".GET FILE="faminc.sav".SORT CASES BY famid.SAVE OUTFILE="faminc2.sav".MATCH FILES FILE="dads2.sav" /FILE="faminc2.sav" /BY famid.LIST.

L’output seguente mostra che l’unione di corrispondenza ha funzionato correttamente.

FAMID NAME INC FAMINC96 FAMINC97 FAMINC98 1.00 Bill 30000.00 40000.00 40500.00 41000.00 2.00 Art 22000.00 45000.00 45400.00 45800.00 3.00 Paul 25000.00 75000.00 76000.00 77000.00

Unisci uno a molti

Il prossimo esempio considera un unisci uno a molti in cui un’osservazione in un file può avere più record corrispondenti in un altro file. Immagina di avere un file con i papà come abbiamo visto nell’esempio precedente, e abbiamo avuto un file con i bambini in cui un papà potrebbe avere più di un figlio. Vedete perché questo è chiamato un uno a molti unire dal momento che si sono corrispondenti un’osservazione papà a uno o più (molti) bambini osservazioni. Ricorda che il file dads è il file con un’osservazione e il file kids è quello con molte osservazioni. Di seguito, creiamo il file di dati per i papà e per i bambini.

DATA LIST LIST / famid * name (A4) inc .BEGIN DATA.2 Art 220001 Bill 300003 Paul 25000END DATA.LIST.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid * kidname (A4) birth age wt * sex (A1).BEGIN DATA.1 Beth 1 9 60 f1 Bob 2 6 40 m1 Barb 3 3 20 f2 Andy 1 8 80 m2 Al 2 6 50 m2 Ann 3 2 20 f3 Pete 1 6 60 m3 Pam 2 4 40 f3 Phil 3 2 20 mEND DATA.LIST.SAVE OUTFILE="kids.sav".

Come vedi sotto, i passaggi per eseguire un’unione da uno a molti sono simili all’unione da uno a uno che abbiamo visto sopra.

  1. Usa SORT CASES BY per ordinare i papà su famid e salvare quel file(lo chiameremo dads2)
  2. Usa SORT CASES BY per ordinare i bambini su famid e salvare quel file (lo chiameremo kids2)
  3. Usa MATCH FILES per unire i file dads2 e kids2. Tuttavia, poiché il file dads è il file con un’osservazione, usa / TABLE= ” dads2.sav”, non / FILE= ” dads2.sav ” per specificare il file dads.
GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".GET FILE="kids.sav".SORT CASES BY famid.SAVE OUTFILE="kids2.sav".MATCH FILES FILE="kids2.sav" /TABLE="dads2.sav" /BY famid.LIST.

L’output seguente mostra che questa fusione ha funzionato come speravamo.

FAMID KIDNAME BIRTH AGE WT SEX NAME INC 1.00 Beth 1.00 9.00 60.00 f Bill 30000.00 1.00 Bob 2.00 6.00 40.00 m Bill 30000.00 1.00 Barb 3.00 3.00 20.00 f Bill 30000.00 2.00 Andy 1.00 8.00 80.00 m Art 22000.00 2.00 Al 2.00 6.00 50.00 m Art 22000.00 2.00 Ann 3.00 2.00 20.00 f Art 22000.00 3.00 Pete 1.00 6.00 60.00 m Paul 25000.00 3.00 Pam 2.00 4.00 40.00 f Paul 25000.00 3.00 Phil 3.00 2.00 20.00 m Paul 25000.00

La differenza chiave tra un’unione uno a uno e un’unione uno a molti è che è necessario utilizzare /TABLE=”dads2.sav “invece di / FILE =” dads2.sav”. Per i tuoi dati, quando fai una fusione uno a molti, chiediti quale file svolge il ruolo di uno (in uno a molti). Per quel file, usa / TABLE = invece di / FILE=.

Facciamo intenzionalmente un errore e usiamo / FILE= ” dads2.sav ” e vedere cosa fa SPSS.

MATCH FILES /FILE="kids2.sav" /FILE="dads2.sav" /BY famid.LIST.

La prima cosa che notiamo è che SPSS ci dà l’avviso mostrato di seguito. Questo ci sta dicendo che ci sono più bambini per un dato papà.

Warning # 5132Duplicate key in a file. The BY variables do not uniquely identify eachcase on the indicated file. Please check the results carefully.

Come consiglia SPSS, controlleremo attentamente i risultati. In effetti, vediamo che i risultati non sono quelli che desideravamo. Quando c’erano più bambini per papà, univa solo il papà con il primo bambino, e quindi ai seguenti bambini con gli stessi papà venivano assegnati valori mancanti per le informazioni sui papà (nome e inc). Quando abbiamo usato il sottocomando / TABLE= nell’esempio precedente, SPSS portava le informazioni dei papà su tutti i bambini.

FAMID KIDNAME BIRTH AGE WT SEX NAME INC 1.00 Beth 1.00 9.00 60.00 f Bill 30000.00 1.00 Bob 2.00 6.00 40.00 m . 1.00 Barb 3.00 3.00 20.00 f . 2.00 Andy 1.00 8.00 80.00 m Art 22000.00 2.00 Al 2.00 6.00 50.00 m . 2.00 Ann 3.00 2.00 20.00 f . 3.00 Pete 1.00 6.00 60.00 m Paul 25000.00 3.00 Pam 2.00 4.00 40.00 f . 3.00 Phil 3.00 2.00 20.00 m .

Ordinare le variabili nel nuovo file

È possibile utilizzare il sottocomando /MAP con il comando AGGIUNGI FILE per vedere l’ordine delle variabili nel nuovo file, come illustrato di seguito. Se si desidera riorganizzare l’ordine delle variabili nel nuovo file, è anche possibile aggiungere il sottocomando /KEEP al comando AGGIUNGI FILE. Le variabili saranno ordinate nel nuovo file nell’ordine in cui sono elencate nel sottocomando /KEEP. Se non si elencano tutte le variabili nel sottocomando / KEEP, le variabili non elencate non saranno presenti nel nuovo file. Si noti inoltre che è possibile elencare le prime variabili se sono le uniche che devono essere riordinate e quindi utilizzare la parola chiave ALL per includere il resto delle variabili nel nuovo file. Le variabili non specificate nel sottocomando / KEEP rimarranno nell’ordine in cui si trovano nei file originali.

DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.2 Art 220001 Bill 300003 Paul 25000END DATA.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.1 Bess 150003 Pat 500002 Amy 18000END DATA.SAVE OUTFILE = "moms.sav".
ADD FILES FILE="dads.sav" /FILE="moms.sav" /KEEP = name ALL /MAP.EXECUTE.
Map of the result fileResult Input1 Input2
------ ------ ------
NAME NAME NAME
FAMID FAMID FAMID
INC INC INC

Come puoi vedere, le variabili nel nuovo file sono ora nel nome dell’ordine, famid inc.

5.1 Mismatching record in one-to-one merge

I due file di dati possono avere record che non corrispondono. Qui di seguito illustriamo questo includendo un papà in più (Karl in famid 4) che non ha una famiglia corrispondente, e ci sono due famiglie in più (5 e 6) nel file di famiglia che non hanno un papà corrispondente.

DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.2 Art 220001 Bill 300003 Paul 250004 Karl 95000END DATA.SORT CASES BY famid.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid faminc96 faminc97 faminc98.BEGIN DATA.3 75000 76000 770001 40000 40500 410002 45000 45400 458005 55000 65000 700006 22000 24000 28000END DATA.SORT CASES BY famid.SAVE OUTFILE = "faminc.sav".MATCH FILES FILE="dads.sav" /IN=fromdad /FILE="faminc.sav" /IN=fromfam /BY famid.LIST.CROSSTABS /TABLES= fromdad BY fromfam.

Come vedi sopra, usiamo / IN=fromdad per creare una variabile 0/1 che indica se il file risultante contiene un record con i dati del file dads. Allo stesso modo, usiamo /IN=fromfam per indicare se il file risultante ha un record dal file faminc. L’ELENCO e le tabelle incrociate ci mostrano quindi i record non corrispondenti.

L’output dal comando LIST ci mostra che quando c’erano record non corrispondenti. Per famid 4, il valore di fromdad è 1 e fromfam è 0, come ci aspetteremmo dal momento che c’erano dati da papà per famid 4, ma nessun dato da faminc. Inoltre, come ci aspettiamo, questo record ha dati validi per le variabili dal file dads (name e inc) e dati mancanti per le variabili da faminc (faminc96 faminc97 e faminc98). Vediamo il modello inverso per famid 5 e 6.

FAMID NAME INC FAMINC96 FAMINC97 FAMINC98 FROMDAD FROMFAM 1.00 Bill 30000.00 40000.00 40500.00 41000.00 1 1 2.00 Art 22000.00 45000.00 45400.00 45800.00 1 1 3.00 Paul 25000.00 75000.00 76000.00 77000.00 1 1 4.00 Karl 95000.00 . . . 1 0 5.00 . 55000.00 65000.00 70000.00 0 1 6.00 . 22000.00 24000.00 28000.00 0 1

Se guardiamo le variabili fromdad e fromfam, possiamo vedere che ci sono tre record che hanno dati corrispondenti, uno che ha solo dati dai papà e due record che hanno solo dati dal file faminc. La tabella incrociata qui sotto ci mostra gli stessi risultati ed è un modo più semplice per calcolare la corrispondenza rispetto al conteggio manuale della corrispondenza.

FROMDAD by FROMFAM FROMFAM Page 1 of 1 Count | | | Row | 0| 1| TotalFROMDAD --------+------+------+ 0 | | 2| 2 | | | 33.3 +------+------+ 1 | 1| 3| 4 | | | 66.7 +------+------+ Column 1 5 6 Total 16.7 83.3 100.0

Quando si associano i file, si consiglia di utilizzare questa strategia per verificare la corrispondenza dei due file. Se ci sono record non corrispondenti inaspettati, è necessario indagare per comprendere la causa dei record non corrispondenti.

È possibile utilizzare SELECT IF per eliminare alcuni dei record non corrispondenti. Ad esempio, se si voleva mantenere solo i record in cui i papà abbinati con le informazioni di famiglia, è possibile digitare

SELECT IF fromdad AND fromfam.LIST.

I risultati sono mostrati di seguito, compresi solo i tre record corrispondenti.

FAMID NAME INC FAMINC96 FAMINC97 FAMINC98 FROMDAD FROMFAM 1.00 Bill 30000.00 40000.00 40500.00 41000.00 1 1 2.00 Art 22000.00 45000.00 45400.00 45800.00 1 1 3.00 Paul 25000.00 75000.00 76000.00 77000.00 1 1

5.2 Mismatching record in one-to-many merge

SPSS gestisce l’inclusione di record non corrispondenti in un one to-many merge in modo diverso rispetto a un one-to-one merge. Ricorda che in una fusione uno-a-molti, c’è un file che ha un’osservazione che corrisponde a molte osservazioni nell’altro file; facciamo riferimento a questi come un file e il file molti. Se ci sono osservazioni in un file che non corrispondono al file molti, queste osservazioni non appariranno affatto nel file unito. Se nel file molti sono presenti osservazioni che non corrispondono a un file, tali record verranno visualizzati nel file unito. Se questo è ciò che desideri, puoi unire i file come illustrato nella Sezione 3 e utilizzare /IN= come illustrato nella sezione precedente per tracciare la corrispondenza. Tuttavia, se si desidera che i record non corrispondenti dal file uno e molti vengano visualizzati entrambi nel file unito, è possibile utilizzare la strategia di corrispondenza descritta di seguito.

Di seguito usiamo il nostro esempio per unire i papà con i bambini, e in questo esempio abbiamo record non corrispondenti in entrambi i file. Di seguito abbiniamo i file per includere tutti i record non corrispondenti nel file unito. Le parti che sono diverse sono indicate in rosso.

DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.2 Art 220001 Bill 300003 Paul 250004 Karl 95000END DATA.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid * kidname (A4) birth age wt * sex (A1).BEGIN DATA.1 Beth 1 9 60 f1 Bob 2 6 40 m1 Barb 3 3 20 f2 Andy 1 8 80 m2 Al 2 6 50 m2 Ann 3 2 20 f3 Pete 1 6 60 m3 Pam 2 4 40 f3 Phil 3 2 20 m5 Ted 1 4 35 m5 Tess 2 2 18 fEND DATA.SAVE OUTFILE="kids.sav".GET FILE="kids.sav".SORT CASES BY famid.SAVE OUTFILE="kids2.sav".GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".SAVE OUTFILE="dadid.sav" /KEEP=famid.MATCH FILES FILE="kids2.sav" /IN=inkid /FILE="dadid.sav" /BY famid .LIST.SAVE OUTFILE="temp.sav".MATCH FILES FILE="temp.sav" /TABLE="dads2.sav" /IN=dads /BY famid.LIST.

La sezione in rosso aggiunge un ulteriore passaggio alla corrispondenza. Lo scopo di questo passaggio è quello di aggiungere tutti i valori di famid che sono solo nel file dads al file kids. Lo fa facendo una fusione uno-a-uno tra dadid e i bambini e salva quel file come temp. Poiché dadid è solo il famid di tutti i papà, questa unione aggiunge fondamentalmente osservazioni per qualsiasi famid che si trova nel file dads ma non nel file kids, e lo salva come temp. Quindi, possiamo quindi unire temp con dads2 e temp avrà un famid per ogni osservazione nel file dads2. Ciò assicura che il file risultante includerà tutte le osservazioni dal file dads, anche se non hanno un record corrispondente nel file kids. Il risultato è mostrato di seguito. In effetti, il file contiene l’osservazione per il papà Karl che non ha figli corrispondenti. Se abbiamo omesso il codice aggiuntivo in questo passaggio, quel record non sarebbe stato incluso in questo file.

FAMID KIDNAME BIRTH AGE WT SEX INKID NAME INC DADS 1.00 Beth 1.00 9.00 60.00 f 1 Bill 30000.00 1 1.00 Bob 2.00 6.00 40.00 m 1 Bill 30000.00 1 1.00 Barb 3.00 3.00 20.00 f 1 Bill 30000.00 1 2.00 Andy 1.00 8.00 80.00 m 1 Art 22000.00 1 2.00 Al 2.00 6.00 50.00 m 1 Art 22000.00 1 2.00 Ann 3.00 2.00 20.00 f 1 Art 22000.00 1 3.00 Pete 1.00 6.00 60.00 m 1 Paul 25000.00 1 3.00 Pam 2.00 4.00 40.00 f 1 Paul 25000.00 1 3.00 Phil 3.00 2.00 20.00 m 1 Paul 25000.00 1 4.00 . . . 0 Karl 95000.00 1 5.00 Ted 1.00 4.00 35.00 m 1 . 0 5.00 Tess 2.00 2.00 18.00 f 1 . 0

5.3 Variabili con lo stesso nome, ma informazioni diverse

Di seguito abbiamo i file con le informazioni sui papà e sulla famiglia, ma guardiamo più da vicino i nomi delle variabili. Nel file dads, c’è una variabile chiamata inc98, e nel file di famiglia ci sono variabili inc96, inc97 e inc98. Andiamo avanti e uniamo questi file e vediamo cosa fa SPSS.

DATA LIST LIST / famid * name (A4) inc98.BEGIN DATA.2 Art 220001 Bill 300003 Paul 25000END DATA.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid inc96 inc97 inc98.BEGIN DATA.3 75000 76000 770001 40000 40500 410002 45000 45400 45800END DATA.SAVE OUTFILE = "faminc.sav".GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".GET FILE="faminc.sav".SORT CASES BY famid.SAVE OUTFILE="faminc2.sav".MATCH FILES FILE="dads2.sav" /FILE="faminc2.sav" /BY famid.LIST.

I risultati sono mostrati di seguito. Come vedi, la variabile inc98 ha i dati dal file dads, il file che è apparso per primo nel comando MATCH FILES. Quando si corrispondono file che hanno la stessa variabile, SPSS utilizzerà i valori del file che appare prima nel comando MATCH FILES.

FAMID NAME INC98 INC96 INC97 1.00 Bill 30000.00 40000.00 40500.00 2.00 Art 22000.00 45000.00 45400.00 3.00 Paul 25000.00 75000.00 76000.00

Ci sono un paio di modi per risolvere questo problema.

Soluzione #1. La soluzione più ovvia è scegliere nomi di variabili nei file originali che non entrino in conflitto tra loro. Tuttavia, è possibile ricevere file in cui i nomi sono già stati scelti.

Soluzione #2. È possibile rinominare le variabili nel comando MATCH FILES (che rinomina le variabili prima di eseguire la corrispondenza). Ciò consente di selezionare nomi di variabili che non sono in conflitto tra loro, come illustrato di seguito.

GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".GET FILE="faminc.sav".SORT CASES BY famid.SAVE OUTFILE="faminc2.sav".MATCH FILES FILE="dads2.sav" /RENAME=(inc98 = dadinc98) /FILE="faminc2.sav" /RENAME=(inc96 inc97 inc98 = faminc96 faminc97 faminc98) /BY famid.LIST.

Come potete vedere qui sotto, le variabili sono state rinominate come abbiamo specificato.

FAMID NAME DADINC98 FAMINC96 FAMINC97 FAMINC98 1.00 Bill 30000.00 40000.00 40500.00 41000.00 2.00 Art 22000.00 45000.00 45400.00 45800.00 3.00 Paul 25000.00 75000.00 76000.00 77000.00

5.4 Le stesse variabili con diverse informazioni sul dizionario

Questo problema è simile a quello descritto sopra. In questo esempio, abbiamo due variabili con lo stesso nome e le stesse informazioni, ma con diverse informazioni del dizionario ad esse associate. Queste informazioni del dizionario potrebbero includere etichette di valore e / o etichette di variabili. Come nell’esempio precedente, SPSS prenderà le informazioni dal file elencato per primo nel comando MATCH FILES. Nessun messaggio di errore o avviso verrà emesso per farvi sapere che le informazioni dalla variabile nel file successivo è stato perso. La soluzione a questo problema consiste nell’elencare per primo nel comando MATCH FILES il file con le informazioni del dizionario che si desidera nel file risultante.

5.5 Hai eseguito il comando AGGIUNGI FILE e non è successo nulla

Se esegui solo il comando AGGIUNGI FILE, come mostrato di seguito, SPSS non farà nulla. Tuttavia, vedrai una nota nell’angolo in basso a destra dell’editor di dati che dice “trasformazione in sospeso”.

ADD FILES FILE="dads.sav" /FILE="moms.sav"

Soluzione: la soluzione consiste nell’aggiungere il comando execute o un comando di procedura che forzerà l’esecuzione della trasformazione, ad esempio il comando list o il comando crosstab.

ADD FILES FILE="dads.sav" /FILE="moms.sav"execute.

Leave a Reply

Il tuo indirizzo email non sarà pubblicato.