SPSS – extrahování value labels

Úloha:

  • Potřebujeme upravit value labely hodnot proměnných v datovém souboru. Obvykle nám stačí úprava aktuálních textů a nepotřebujeme tvořit úplně novou value label syntaxi.
  • Abychom nemuseli celou syntaxi psát od začátku, zde je syntaxe, která v rozumně strukturované podobě vyextrahuje aktuální labely hodnot z SPSS dat a pak už jen stačí tento výstup převést do value label syntaxe a tu upravit podle potřeby.

Jak to funguje:

  • V syntaxi musíte jednak na začátku syntaxe upravit cestu ke zdrojovému SPSS souboru a také na konci syntaxe upravit cestu k výstupnímu XLS souboru.
  • Tato syntaxe nejprve vyřadí všechny textové proměnné. Následně vyřadí proměnné, které nemají value label (např. otázky uvádějící počet).
  • Následně shlukne všechny proměnné se stejným value labelem k sobě.
  • A pak toto vyexportuje ve strukturované podobě do formátu XLS.
  • Z exportovaného XLS souboru si už každý může pomocí vzorců připravit SPSS syntaxi. Nebo může tento export přímo vložit do naší aplikace “Data Manager” pro zpracování dat a v ní jen upravit texty a vše ostatní je zpracováno automaticky.

Potřebovali byste něco udělat jinak?

  • Pokud používáte specifické nástroje pro zpracování dat a hodilo by se Vám, aby export byl strukturován jinak, neváhejte nám napsat v sekci ”napište nám” a za rozumnou cenu Vám formát exportu upravíme do požadované podoby.

Zde je syntaxe pro extahování value labels z SPSS dat

  dataset close all.
  get file = "...path...\NAME_data_00.sav".
  dataset name data.

  numeric @var_start @var_end (f1).
  match files
    /file = *
    /keep = @var_start all.
  execute.
  sort variables by type.
  execute.
  match files
    /file = *
    /keep = @var_start to @var_end.
  execute.
  delete variables @var_start @var_end.
  add value labels all -937951463476 "@@value_label@@delete@@".

  output new name = labels.
  output activate labels.

  dataset declare data_labels.
  oms /select all /exceptif subtypes = ['Notes' 'Titl*' 'Warn*']
    /destination format = sav outfile = data_labels.
  codebook all /varinfo valuelabels /statistics none.
  omsend.

  output close labels.
  dataset activate data_labels.

  select if (Value <> "@@value_label@@delete@@").
  execute.

  rename variables (Label_ = var)(Value = lab).
  numeric val id (f12).
  string vars labels var_val (a10000).
  alter type Var2 (f12).
  rename variables (Var2 = val).  
  compute id = $casenum.
  execute.
  delete variables Command_ Subtype_ Var1.

  do if (id=1 or var<>lag(var)).
    compute labels = concat(ltrim(rtrim(string(val,f12))),"-",ltrim(rtrim(lab))).
  else.
    compute labels = concat(ltrim(rtrim(lag(labels))),"|",ltrim(rtrim(string(val,f12))),"-",ltrim(rtrim(lab))).
  end if.
  execute.

  aggregate /outfile = * mode=addvariables overwritevars=yes /break = var /labels=last(labels).

  do if (char.rindex(var,"_")>0).
    compute vars = char.substr(var,1,char.rindex(var,"_")-1).
  else.
    compute vars = ltrim(rtrim(var)).
  end if.
  execute.

  sort cases by vars (a).
  if (vars=lag(vars)) id = lag(id).
  execute.
  sort cases by id (a).

  do if ($casenum=1).
    compute id = 1.
  else if (labels<>lag(labels)).
    compute id = lag(id) + 1.
  else.
    compute id = lag(id).
  end if.
  execute.

  dataset activate data_labels.
  dataset copy data_labels.
  dataset name data_labels_vars.
  dataset activate data_labels.

  sort cases id val (a).
  compute id_pom=0.
  do if ($casenum=1 or val<>lag(val) or id<>lag(id)).
    compute id_pom = 1.
  end if.
  select if (id_pom=1).
  compute var_val = ltrim(rtrim(string(val,f12))).
  execute.

  delete variables var val vars labels id_pom.

  dataset activate data_labels_vars.
  sort cases id (a).
  compute id_pom=0.
  do if ($casenum=1 or var<>lag(var) or id<>lag(id)).
    compute id_pom = 1.
  end if.
  select if (id_pom=1).
  execute.

  do if ($casenum=1 or vars<>lag(vars) or labels<>lag(labels)).
    compute var_val = ltrim(rtrim(var)).
  else.
    compute var_val = concat(ltrim(rtrim(lag(var_val)))," ",ltrim(rtrim(var))).
  end if.
  execute.

  aggregate /outfile = * mode=addvariables overwritevars=yes /break = vars labels /var_val=last(var_val).

  compute id_pom=0.
  do if ($casenum=1 or var_val<>lag(var_val)).
    compute id_pom = 1.
  end if.
  select if (id_pom=1).
  execute.

  delete variables var val lab vars labels id_pom.

  add files
   /file = data_labels_vars
   /file = data_labels
  .
  execute.
  dataset name data_labels_final.
  dataset activate data_labels_final.

  sort cases id (a).

  save translate outfile = "...path...\NAME_data_00_value_labels.xlsx"
   /type = xls /version = 12 /replace
   /keep = var_val lab.

  dataset activate data.
  dataset close data_labels.
  dataset close data_labels_vars.
  dataset close data_labels_final.