***************************************************************** Autor: Jan Švancara Datum vytvoření: 7.7.2015 Verze SPSS: 22.0.0.0 Popis: Vzorový syntax sloužící pro uvedení do problematiky úpravy dat v prostředí SPSS, Používá automaticky generovaná data Autor revize: Datum revize: Popis revize: ***************************************************************** DEFINE cesta () "C:\Users\svancara\Desktop\data_priklad1.sav" !ENDDEFINE. ***vygenerování ukázkových dat (6 případů a 3 proměnné) DATA LIST FREE / jmeno (A20) vek (F4.1) pohlavi (A2). BEGIN DATA Anna 38.7 F Bohumil 52.6 M Cyril 33.3 M Dita 25.8 F Evžen 46.5 M Františka 78.7 F END DATA. ***Každý datový soubor má své značení (není to název souboru!), které je důležité pro práci s více datovými soubory současně DATASET NAME Data1. ****přidání textových popisků k proměnným VARIABLE LABELS jmeno "Křestní jméno pacienta/ky" vek "Věk pacienta/ky v době určení diagnózy" pohlavi "Pohlaví pacienta/ky". ****přidání textových popisků k hodnotám VALUE LABELS pohlavi "F" "Žena" "M" "Muž". ****překodování proměnné, nepoužijeme-li poslední část syntaxu "INTO vek_kat" pak se přepíše primární proměnná!!! RECODE vek (LO THRU 18=1)(LO THRU 30=2)( LO THRU 50=3)(LO THRU HI=4)(ELSE=SYSMIS) INTO vek_kat. VARIABLE LABELS vek_kat "Kategorie věku". VALUE LABELS vek_kat 1 do 18 let 2 18 až 30 let 3 30 až 50 let 4 více než 50 let. ***Při rekódování stringové proměnné je třeba všechny hodnoty obalit do uvozovek. Proměnnou do níž se má rekódovat musíme nejdříve vytvořit samostatným příkazem STRING. STRING gender (A20). RECODE pohlavi("F"="1")("M"="2") into gender. EXECUTE. ALTER TYPE gender (F2.0). VALUE LABELS gender 1 Female 2 Male. *****druhý ukázkový datový soubor, který demonstruje opakované údaje k jednomu subjektu DATA LIST FREE / jmeno (A20) datum (DATE11) zmena (F2) o_kolik (F8). BEGIN DATA Dita 20-May-2015 1 68 Anna 26-Oct-2014 0 0 Anna 02-Apr-2015 1 25 Cyril 07-Feb-2015 0 0 Dita 14-Nov-2014 1 45 Evžen 08-Mar-2015 0 0 Cyril 07-Feb-2015 0 0 Františka 10-Jul-2015 1 9000 END DATA. DATASET NAME Data2. ***Tímto příkazem použijeme v nově vytvořeném souboru stejné popisky jako v souboru prvním (spárují se proměnné se stejným názvem a typem) APPLY DICTIONARY /FROM Data1. VARIABLE LABELS zmena "Došlo ke změně?" o_kolik "Jaká je absolutní hodnota změny?". ****pro každého člověka spočítám celkovou sumu změny AGGREGATE /BREAK=jmeno /o_kolik_sum=SUM(o_kolik). VARIABLE LABELS o_kolik_sum "Celková změna". SORT CASES BY datum (A). ***Přestrukturování případů na proměnné, vytvoří pro každého pacienta jeden řádek s opakující se sekvencí proměnných SORT CASES BY jmeno. CASESTOVARS /ID=jmeno /FIXED o_kolik_sum. ***Příklad spojení dvou datových souborů dle unikátního identifikátoru. Soubory musí být seřazeny vzestupně dle identifikační proměnné (nebo více proměnných). ***Identifikátor musí mít v obou souborech stejný formát a minimálně v jednom datovém souboru musí být pouze unikátní záznamy. DATASET ACTIVATE Data1. SORT CASES BY jmeno. MATCH FILES /FILE=* /TABLE Data2 BY jmeno. EXECUTE. ***Příklad uložení souboru ve formátu sav, jeho zavření a znovuotevření. Parametr "cesta" je definován pomocí makra na začátku skriptu. SAVE OUTFILE=cesta. DATASET CLOSE Data1. DATASET ACTIVATE Data2. GET FILE=cesta. DATASET NAME Data1. DATASET ACTIVATE Data2. **Výpočet nové proměnné provádíme pomocí funkce COMPUTE ***Tato funkce může fingovat jako prostý kalkulátor. COMPUTE cislo1=(25+7)/8+ SUM(3,2,3,2,4,1)+ MEAN(5,4,5,4). EXECUTE. ***Nebo k početním operacím mezi existujícími numerickými proměnnými. COMPUTE co_kolik_sum2=SUMA(o_kolik.1 TO o_kolik.2). EXECUTE. ***Proměnnou můžeme vytvořit také použitím podmínky. COMPUTE zmena_bin=0. IF zmena.1=1 OR zmena.2=1 zmena_bin=1. EXECUTE. ***Rozdíl dvou datumů získáme pomocí funkce DATEDIFF, do uvozovek se uvádí jednotky v nichž má být rozdíl vyjádřen Příkaz zaokrouhluje rozdíl na celé jednotky (tedy např na celé měsíce etc.) COMPUTE rozdil_datum=DATEDIFF(datum.2, datum.1, "days"). ***Pro použití datumu v podmínkách je třeba definovat formát datumu IF datum.1>DATE.DMY(31,03,2015) od_dubna=1. EXECUTE. ***Na chybějící hodnotu numerické proměnné se lze odkazovat příkazem MISSING IF MISSING(od_dubna) od_dubna=0. EXECUTE. ***Chybějící hodnotu numerické proměnné dostaneme použitím IF datum.1<=DATE.DMY(31,03,2015) od_dubna=$SYSMIS. EXECUTE. ****Příkaz MATCH FILES lze využít k vymazání některých proměnných MATCH FILES FILE=* /DROP cislo1 co_kolik_sum2. *** alternativou parametru DROP je inverzní příkaz KEEP MATCH FILES FILE=* /KEEP jmeno o_kolik_sum datum.1 datum.2 zmena.1 zmena.2 o_kolik.1 o_kolik.2. ****Příklad přestrukturování proměnných zpět na případy VARSTOCASES /MAKE datum FROM datum.1 datum.2 /MAKE zmena FROM zmena.1 zmena.2 /MAKE o_kolik FROM o_kolik.1 o_kolik.2 /KEEP=jmeno o_kolik_sum. *****třetí ukázkový datový soubor, pro demonstraci spojování souborů přidáváním nových případů (řádků) DATA LIST FREE / jmeno (A20) datum (DATE11) zmena (F2) o_kolik (F8). BEGIN DATA Bohumil 11-Nov-2014 1 72 END DATA. DATASET NAME Data3. ***Nové případy připojíme pomocí příkazu ADD FILES. DATASET ACTIVATE Data2. ADD FILES /FILE=* /FILE=Data3. EXECUTE. DATASET ACTIVATE Data1. ***Příklad zkracování syntaxu, 1. možnost je generovaná z grafického rozhraní pomocí tlačítka "Paste", 2. napsaná ručně, 3. zkratka, všechny tři možnosti dávají stejný výsledek, pro vytváření sdíleného syntaxu je preferovaná 2. možnost *1. FREQUENCIES VARIABLES=pohlavi /ORDER=ANALYSIS. *2. FREQUENCIES pohlavi. *3. fre pohlavi. ***Jednoducho popisnou statistiku pro jednu proměnnou dostaneme pomocí příkazu FREQUENCIES, chceme-li prokřížit dvě kategoriální proměnné, pak je možné použít příkaz CROSSTAB, kde je třeba příkazem /CELLS definovat co má být obsahem buněk, např COUNT=počet, ROW=řádková procenta, COLUMN=sloupcová procenta etc. CROSSTABS vek_kat BY pohlavi /CELLS=COUNT ROW COLUMN. ***Popisnou statistiku jedné nebo více spojitých proměnných dostaneme snadno pomocí příkazu SUMMARIZE, opět příkazem /CELLS definujeme jaká popisná statistika se bude počítat SUMMARIZE vek o_kolik_sum /CELLS=COUNT MEAN MEDIAN. ****Pomocí klíčového slova BY můžeme přidat třídicí (kategoriální) proměnnou SUMMARIZE vek o_kolik_sum BY pohlavi /CELLS=COUNT MEAN MEDIAN.