Match merging data files / SPSS Learning Modules
Úvod
pokud máte dva datové soubory, můžete je kombinovat sloučením vedle sebe a porovnáním pozorování na základě identifikátoru. Například níže máme soubor obsahující tatínky a máme soubor obsahující faminc. Chtěli bychom spojit sloučení souborů dohromady, abychom měli pozorování otců na stejném řádku s pozorováním faminc založeným na klíčové proměnné 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
po sloučení Dads a faminc by data vypadala takto.
famid name inc faminc96 faminc97 faminc98 1 Bill 30000 40000 40500 41000 2 Art 22000 45000 45400 45800 3 Paul 25000 75000 76000 77000
one-to-one merge
začněme vytvořením souborů, které budeme slučovat. Níže vytvoříme soubory tatínky.sav a 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".
výstup těchto příkazů je uveden níže, což potvrzuje, že jsme data správně přečetli.
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
existují tři kroky, aby odpovídaly sloučení tatínky.sav s famincem.sav. (Všimněte si, že se jedná o sloučení jedna ku jedné, protože existuje jedna ku jedné korespondence mezi tatínky a faminc records.) Tyto tři kroky jsou znázorněny níže.
- použijte třídit případy třídit tatínky na famid a uložit tento soubor (budeme říkat dads2.sav)
- použijte třídění případů třídit faminc na famid a uložit tento soubor (budeme nazývat faminc2.sav)
- použijte soubory shody ke sloučení dads2.sav a faminc2.sav soubory založené na famid
níže uvádíme příkazy pro provedení sloučení.
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.
níže uvedený výstup ukazuje, že sloučení zápasů fungovalo správně.
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
one-to-many merge
následující příklad zvažuje sloučení one to many, kde jedno pozorování v jednom souboru může mít více odpovídajících záznamů v jiném souboru. Představte si, že jsme měli soubor s tatínky, jak jsme viděli v předchozím příkladu, a měli jsme soubor s dětmi, kde otec mohl mít více než jedno dítě. Vidíte, proč se to nazývá jeden k mnoha sloučit, protože jste odpovídající jeden táta pozorování na jeden nebo více (Mnoho) děti pozorování. Nezapomeňte, že soubor dads je soubor s jedním pozorováním a soubor kids je soubor s mnoha pozorováními. Níže vytvoříme datový soubor pro táty a pro děti.
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".
jak vidíte níže, kroky pro provedení sloučení one to many jsou podobné sloučení one to one, které jsme viděli výše.
- použijte třídit případy podle třídit tatínky na famid a uložit tento soubor (budeme říkat dads2)
- použijte třídit případy podle třídit děti na famid a uložit tento soubor (budeme říkat kids2)
- použijte zápas soubory sloučit dads2 a kids2 soubory. Vzhledem k tomu, že soubor dads je soubor s jedním pozorováním, použijte /TABLE=“dads2.sav“, not / FILE=“dads2.sav “ pro zadání souboru tatínků.
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.
níže uvedený výstup ukazuje, že toto sloučení fungovalo tak, jak jsme doufali.
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
klíčový rozdíl mezi sloučení jedna ku jedné a sloučení jedna k mnoha je, že musíte použít /TABLE= “ dads2.sav “ namísto /FILE=“dads2.sav“. Pokud jde o vaše data, když provedete sloučení jednoho až mnoha, zeptejte se sami sebe, který soubor hraje roli jednoho (v jednom až mnoha). Pro tento soubor použijte /TABLE = místo /FILE=.
úmyslně uděláme chybu a použijeme /FILE=“dads2.sav “ a uvidíme, co SPSS dělá.
MATCH FILES /FILE="kids2.sav" /FILE="dads2.sav" /BY famid.LIST.
první věc, kterou si všimneme, je, že SPSS nám dává varování uvedené níže. To nám říká, že pro daného otce existuje více dětí.
Warning # 5132Duplicate key in a file. The BY variables do not uniquely identify eachcase on the indicated file. Please check the results carefully.
jak doporučuje SPSS, výsledky pečlivě zkontrolujeme. Ve skutečnosti vidíme, že výsledky nejsou to, co jsme si přáli. Když tam bylo více dětí na tátu, to jen sloučil táta s prvním dítětem, a pak následující děti se stejnými tatínky byly přiřazeny chybějící hodnoty pro tatínky informací (jméno A inc). Když jsme v předchozím příkladu použili dílčí příkaz /TABLE=, SPSS přenesl informace o tatíncích na všechny děti.
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 .
řazení proměnných v novém souboru
můžete použít podkapitolu / MAP s příkazem přidat soubory, abyste viděli pořadí proměnných v novém souboru, jak je znázorněno níže. Pokud chcete uspořádat pořadí proměnných v novém souboru, můžete také přidat podkapitol / KEEP do příkazu Přidat soubory. Proměnné budou v novém souboru seřazeny v pořadí, v jakém je uvedete v dílčím příkazu / KEEP. Pokud neuvedete všechny proměnné v dílčím příkazu /KEEP, proměnné, které nejsou uvedeny, nebudou v novém souboru přítomny. Všimněte si také, že můžete uvést několik prvních proměnných, pokud jsou jedinými proměnnými, které je třeba přeskupit, a poté pomocí klíčového slova vše, aby byly zbývající proměnné zahrnuty do nového souboru. Proměnné, které nejsou specifikovány v dílčím příkazu /KEEP, zůstanou v pořadí, v jakém jsou v původních souborech.
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 NAMEFAMID FAMID FAMIDINC INC INC
jak vidíte, proměnné v novém souboru jsou nyní v názvu objednávky, famid inc.
5.1 neshodné záznamy v jednom sloučení
dva datové soubory mohou mít záznamy, které se neshodují. Níže to ilustrujeme zahrnutím dalšího otce (Karl in famid 4), který nemá odpovídající rodinu, a v rodinném souboru jsou dvě další rodiny (5 a 6), které nemají odpovídajícího otce.
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.
jak vidíte výše, používáme /in = fromdad k vytvoření proměnné 0/1, která indikuje, zda výsledný soubor obsahuje záznam s daty ze souboru dads. Stejně tak používáme /in = fromfam k označení, zda má výsledný soubor záznam ze souboru faminc. Seznam a křížové tabulky nám pak ukazují neshodující se záznamy.
výstup z příkazu LIST nám ukazuje, že když došlo k nesouladu záznamů. Pro famid 4, hodnota fromdad je 1 a fromfam je 0, jak bychom očekávali, protože existovaly údaje od tatínků pro famid 4, ale žádná data od faminc. Také, jak očekáváme, tento záznam má platná data pro proměnné ze souboru dads (name and inc) a chybějící data pro proměnné z faminc (faminc96 faminc97 a faminc98). Vidíme opačný vzor pro famid 5 a 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
Podíváme-li se na proměnné fromdad a fromfam, můžeme vidět, že existují tři záznamy, které mají odpovídající data, ten, který má data pouze od tatínků, a dva záznamy, které mají data pouze ze souboru faminc. Křížová tabulka níže nám ukazuje stejné výsledky, a je to jednodušší způsob, jak sečíst shodu, než ručně sečíst shodu.
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
při porovnávání souborů doporučujeme použít tuto strategii ke kontrole shody obou souborů. Pokud existují neočekávané neodpovídající záznamy, měli byste to prozkoumat, abyste pochopili příčinu neshodných záznamů.
můžete použít možnost vybrat, zda odstranit některé neodpovídající záznamy. Například, pokud jste chtěli uchovávat pouze záznamy, kde se otcové shodovali s rodinnými informacemi, můžete napsat
SELECT IF fromdad AND fromfam.LIST.
výsledky jsou uvedeny níže, včetně pouze tří odpovídajících záznamů.
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 Neshodující záznamy v one-to-many merge
SPSS zpracovává zahrnutí neshodných záznamů v one to-many merge jinak než sloučení one-to-one. Nezapomeňte, že v sloučení one-to-many existuje soubor, který má jedno pozorování, které odpovídá mnoha pozorováním v jiném souboru; označme je jako jeden soubor a mnoho souborů. Pokud jsou v jednom souboru pozorování, která se neshodují s mnoha soubory, pak se tato pozorování ve sloučeném souboru vůbec neobjeví. Pokud jsou v mnoha souborech pozorování, která neodpovídají jednomu souboru, objeví se tyto záznamy ve sloučeném souboru. Pokud si to přejete, můžete sloučit soubory, jak je znázorněno v části 3, a použít /In=, jak je znázorněno v předchozí části pro sledování shody. Pokud však chcete, aby se ve sloučeném souboru objevily neshodné záznamy z jednoho a mnoha souborů, můžete použít níže uvedenou strategii shody.
níže používáme náš příklad ke sloučení tatínků s dětmi a v tomto příkladu máme v obou souborech neodpovídající záznamy. Níže porovnáme soubory tak, aby zahrnovaly všechny neodpovídající záznamy ve sloučeném souboru. Různé části jsou označeny červeně.
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.
sekce v červené barvě přidává další krok k párování. Účelem tohoto kroku je přidat všechny hodnoty famid, které jsou pouze v souboru tatínky do souboru děti. To dělá tím, že dělá one-to-one sloučení mezi dadid a děti a uloží tento soubor jako temp. Vzhledem k tomu, dadid jen famid všech tatínků, toto sloučení v podstatě přidává pozorování pro všechny famid, který je v souboru tatínky, ale ne v souboru děti, a uloží to jako temp. Pak můžeme sloučit temp s dads2 a temp bude mít famid pro každé pozorování v souboru dads2. Tím je zajištěno, že výsledný soubor bude obsahovat všechna pozorování ze souboru dads, i když nemají odpovídající záznam v souboru kids. Výsledek je uveden níže. Spis totiž obsahuje postřeh otce Karla, který nemá žádné děti. Pokud bychom v tomto kroku vynechali další kód, tento záznam by nebyl zahrnut do tohoto souboru.
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 proměnné se stejným názvem, ale různé informace
níže máme soubory s informacemi o tatíncích a rodině, ale podrobněji se podíváme na názvy proměnných. V souboru dads je proměnná nazvaná inc98 a v rodinném souboru jsou proměnné inc96, inc97 a inc98. Pojďme do toho a sloučit tyto soubory a uvidíme, co SPSS dělá.
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.
výsledky jsou uvedeny níže. Jak vidíte, proměnná inc98 obsahuje data ze souboru dads, souboru, který se objevil jako první v příkazu MATCH FILES. Když porovnáte soubory, které mají stejnou proměnnou, SPSS použije hodnoty ze souboru, který se zobrazí nejdříve v příkazu 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
existuje několik způsobů, jak tento problém vyřešit.
řešení #1. Nejviditelnějším řešením je vybrat názvy proměnných v původních souborech, které nebudou ve vzájemném konfliktu. Můžete však obdržet soubory, kde již byly vybrány názvy.
řešení #2. Proměnné můžete přejmenovat v příkazu MATCH FILES (který přejmenuje proměnné před provedením shody). To vám umožní vybrat názvy proměnných, které nejsou v rozporu s sebou, jak je znázorněno níže.
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.
jak vidíte níže, proměnné byly přejmenovány, jak jsme určili.
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 stejné proměnné s různými informacemi o slovníku
tento problém je podobný problému popsanému výše. V tomto příkladu máme dvě proměnné se stejným názvem a stejnými informacemi, ale s různými informacemi slovníku, které jsou s nimi spojeny. Tyto informace ve slovníku mohou zahrnovat štítky s hodnotami a / nebo štítky s proměnnými. Stejně jako u výše uvedeného příkladu, SPSS vezme informace ze souboru uvedeného jako první v příkazu MATCH FILES. Nebude vydána žádná chybová nebo varovná zpráva, která by vás informovala, že informace z proměnné v pozdějším souboru byly ztraceny. Řešením tohoto problému je nejprve v příkazu MATCH FILES uvést soubor s informacemi slovníku, které chcete ve výsledném souboru.
5.5 spustili jste příkaz Přidat soubory a nic se nestalo
pokud spustíte pouze příkaz Přidat soubory, jak je uvedeno níže, SPSS nic neudělá. V pravém dolním rohu editoru dat se však zobrazí poznámka „transformace čeká“.
ADD FILES FILE="dads.sav" /FILE="moms.sav"
řešení: řešením je přidat příkaz execute nebo příkaz procedure, který vynutí provedení transformace, například příkaz list nebo příkaz crosstab.
ADD FILES FILE="dads.sav" /FILE="moms.sav"execute.