SPSS – Multiple variable set cleaning

WILL BE TRANSLATED

Task:

  • Máme v SPSS sadu proměnných odpovídající jedné otázce. Např. “Znalost značky” nebo “Co se líbí na reklamě”.
  • Při kódování takových otázek, které mohou být otevřené nebo polootevřené, vzniká několik typů chyb, které je potřeba pročistit.

Types of cleaned errors:

  • respondent na příslušnou otázku neodpověděl (v žádné proměnné není žádný kód) => do první proměnné vložíme kód příslušný odpovědi typu “DK/NA” (“Nevím, bez odpovědi”)
  • respondent na otázku neměl odpovídat, ale při kódování nebo špatným filtrem se zde odpovědi dostaly (bývalo spíše dříve u papírových dotazníků) => všechny zakódované hodnoty se smažou
  • je uveden vícekrát stejný kód (chybou kodéra nebo respondent 2x uvedl to samé) => kód tam zůstane pouze jednou a ten dříve uvedený
  • je N kódů, ale ty nejsou naskládané v prvních N proměnných => seskládají se do prvních N proměnných s tím, že pořadí kódů zůstane zachováno
  • jsou uvedeny korektní kódy, ale současně je uveden kód pro odpověď “DK/NA” (např. u odpovědi “značka1, značka2 a víc už nevím” kodér nesmyslně zakóduje kód pro “DK/NA”) => kód pro “DK/NA” se smaže
  • Makro vždy zachová původní pořadí odpovědí a první proměnná v sadě tak lze použít pro výstup typu “první uvedená odpověď”.

Everything is easy with this SPSS macro:

  • Makro funkční pro SPSS verze 11 nebo vyšší je zde ke stažení. Nebo si níže zkopírujte zdrojový kód.

EXAMPLE and information for correct macro usage:

  • !mac_clean_multi vars [var_1 to var_N] dkna [-1] filter [var=1].
  • vars [var_1 to var_N] – zadání sady multiple proměnných, které se mají pročistit
    • musí být zadáno formou “první_proměnná to poslední_proměnná” a to i v případě, že jsou v sadě jen 2 proměnné
    • pokud by proměnné byly zadány výčtem, tak čištění neproběhne správně
  • DKNA [-1] – zadání hodnoty, která odpovídá odpovědi typu “DK/NA” (“Nevím, bez odpovědi”)
    • musí být zadána hodnota, která byla použita již při kódování
    • pokud by byla zadána jiná hodnota, než při kódování, pak se tento typ odpovědí nepročistí správně
  • filter [var=1] – zadání podmínky, která definuje řádky k pročištění
    • zadává se hlavně v případě, že na otázku odpovídala jen část respondentů (pod nějakým filtrem)
    • pokud na otázku odpovídali všichni a není potřeba filtr, zadá se jednoduše filter [1]
    • lze zadat jakoukoliv složitou podmínku, kterou SPSS zpracuje v příkazu IF, např. filter [var_A=1 and (any(var_B,3,4,5) or sum(var_c,var_d)=0)]
  • Try, test and write me comments if everything works right or if you have some tips to improovement.
DEFINE !mac_clean_multi (vars = !ENCLOSE('[',']') / dkna = !ENCLOSE('[',']') / filter = !ENCLOSE('[',']')  )

  do if (~(!filter)).
    recode !vars (else=sys).
  end if.

  vector vec = !vars.
  do if (!filter).
    loop #i = 1 to (nvalid(!vars) + nmissing(!vars)).
      if (sys(vec(#i)) or vec(#i)=!dkna) vec(#i) = -1.
    end loop.
    loop #i = (nvalid(!vars) + nmissing(!vars)) to 2 by -1.
      loop #j = (#i-1) to 1 by -1.
        if (vec(#i) = vec(#j)) vec(#i) = -1.
      end loop.
    end loop.
    loop #i = (nvalid(!vars) + nmissing(!vars) - 1) to 1 by -1.
      do if (vec(#i) = -1).
        loop #j = #i to (nvalid(!vars) + nmissing(!vars) - 1) BY 1.
          compute vec(#j) = vec(#j+1).
        end loop.
        compute vec(nvalid(!vars) + nmissing(!vars)) = -1.
      end if.
    end loop.
    if (vec(1)=-1) vec(1) = !dkna.
    loop #i = 2 to (nvalid(!vars) + nmissing(!vars)).
      if (vec(#i) = -1) vec(#i) = $sysmis.
    end loop.
  end if.
  execute.

!ENDDEFINE.

Leave a Comment