Variabili: generazione e gestione¶
new o create¶
Genera nuove variabili.
Argomenti:
- varname|[varlist]: il nome di una variabile o un elenco di variabili
- un hash di opzioni:
- :label => string|[]: l’etichetta della variabile o l’elenco delle etichette delle variabili
- :levels => []|{}: i livelli della variabile come array di etichette o come hash codice-etichetta
- :type => :symbol: il tipo di dato della variabile: :integer|:float|:single|:md|:mc|:string|:date|:time|:datetime|:logic|:system|:info. Accetta anche le abbreviazioni: :int|:flt|:sng|:str|:dt|:dtime|:tm|:log|:sys
- :size => n|n.d: la dimensione della variabile o dimensione.decimali
- :ndec => n: il numero di decimali
- :value => val: il valore a cui inizializzare la variabile
- :missing => []: l’elenco dei valori mancanti
- :pos => :ini|:end|{:before|:after => :varname}: (opzionale) inserisce la nuova variabile nella posizione indicata
- :before => :varname: (opzionale) inserisce la nuova variabile prima della variabile indicata
- :after => :varname: (opzionale) inserisce la nuova variabile dopo la variabile indicata
- :existing => :error|:ignore|:delete: comportamento in caso di esistenza della variabile:
- :error (default) genera un errore
- :ignore ignora l’istruzione (default in new? e create?)
- :delete cancella la variabile esistente e ridefinisce la variabile (default in new! e create!)
- alternativamente è possibile indicare nell’ordine: type, size.dec, value, options
- per le :md, :size è impostato a 1 e :ndec a 0
- nel caso di set di variabili :md, le eventuali etichette dei livelli vengono attribuite al codice 1 di ciascun item, sequenzialmente, se :levels contiene un array, oppure in base al numero che segue l’ultimo underscore nel nome della variabile, se :levels contiene un hash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # vars, options
new :xeta, :xn7, :x1, :label => ["Età", "N.7", "X.1"]
new :xetacon, :label => "Età puntuale"
new :xsesso, label: "SESSO", levels: {1 => "M", 2 => "F"}
new :xx1, levels: ["A","B","C","D"]
new :xarea, label: "AREA GEOGRAFICA", levels: ["NO", "NE", "C", "S"]
new s(:xx7_,1..10), :levels => ["Sì","No"]
new :xd2, :levels => ["X","Y","Z"]
new :xd3, :levels => {1=>"X", 2=>"Y", 3=>"Z"}
new s(:x,1..9), :value => 1, :existing => :delete
# vars, type, size.dec, value, options
new :v1, :int, 1
new :v2, :int, 1, 9
new :v3, :str, 20, :label => "Etichetta V3"
new :v4, :flt, 4.2, 1.0
new [:v5, :v6, :v7], :flt, "2.10"
# md set
new s(:q1a_,1..5), :md, value: 0, label: "Q1A", levels: ["A", "B", "C", "D", "E"]
new s(:q1b_,1..5,9), :md, value: 0, label: "Q1B", levels: {9=>"Nr", 1=>"A", 2=>"B", 3=>"C", 4=>"D", 5=>"E"}
|
Nota
Le variabili di tipo :logic, :system e :info hanno un trattamento particolare, per esempio vengono escluse dal riconoscimento dei gruppi multipli e dall’autotab.
new? o create?¶
Come new e create, ma con :existing => :ignore.
new! o create!¶
Come new e create, ma con :existing => :delete`.
create1¶
Genera nuove variabili utilizzando la sintassi della vecchia versione di pTabs(1).
int¶
Genera nuove variabili in formato intero.
Argomenti:
- il nome di una variabile o un elenco di variabili
- :value (opzionale) il valore da assegnare alla variabile o nil
- :label (opzionale) l’etichetta della variabile
- :levels (opzionale) le etichette dei livelli della variabile cone Array o come Hash
float¶
Genera nuove variabili in formato float (numero decimale).
Argomenti:
- il nome di una variabile o un elenco di variabili
- :value (opzionale) il valore da assegnare alla variabile o nil
- :size (opzionale) il formato della variabile come #.# (numero_interi.numero_decimli)
- :label (opzionale) l’etichetta della variabile
string¶
Genera nuove variabili in formato stringa.
Argomenti:
- il nome di una variabile o un elenco di variabili
- :value (opzionale) il valore da assegnare alla variabile o nil
- :size (opzionale) la dimensione della variabile
- :label (opzionale) l’etichetta della variabile
copy¶
Genera una copia di una variabile esistente. Restituisce l’elenco delle variabili create.
Argomenti:
- elenco variabili esistenti => elenco nuove variabili: le nuove variabili verranno create con i nomi specificati. Se si specifica una sola variabile di origine e più variabili di destinazione, verrà usata la stessa variabile di origine per tutte le variabili di destinazione
- elenco variabili esistenti: le nuove variabili verranno create con un nome generato automaticamente o come combinazione del nome della variabile di origine con i parametri pref o suff
- :pref => "string": (opzionale) il prefisso per generare il nome della variabile
- :suff => "string": (opzionale) il suffisso per generare il nome della variabile
- :values => true|false: (opzionale) true copia i dati (default), false non copia i dati, ma crea solo le variabili copiando tutti gli altri attributi dalle variabili di origine
- :if => espressione: (opzionale) copia i dati solo se la condizione specificata è vera
- :ifnot => espressione: (opzionale) copia i dati solo se la condizione specificata è falsa
- :pos => :ini|:end|:before|:after: (opzionale) inserisce la nuova variabile nella posizione indicata
- :force => false|true: (opzionale) se true copia la variabile anche se la variabile di destinazione esiste già (default false)
- :label => "string": (opzionale) l’etichetta della variabile
- :levels => []|{}: (opzionale) i livelli della variabile come array di etichette o come hash codice-etichetta
- :codes => []: i valori della variabile da copiare nella nuova variabile (default tutti)
1 2 3 4 5 6 7 8 9 10 11 12 | copy oldvar => newvar
copy :d1 => :d1bis, :d2 => :d2bis
copy [:d1, :d2] => [:d1bis, :d2bis]
copy :v1 => s(:x1_,1..10), :values => false
copy [:d2, :d1, :d4, s(:q1_,1..10)], :suff => "_x"
copy :d2 => :x2, :if => {:d3 => 2}
copy [:d2, :d1, :d4, s(:q1_,1..10)], :pref => "sud_", :if => {:area => 4}
|
Dato che copy restituisce i nomi delle variabili create, è possibile utilizzarlo direttamente all’interno di altre istruzioni:
1 2 3 | panel_add :sample, copy([:sesso, :eta, :titolo], :pref => "sud_", :if => {:area => 4})
panel_add :sample, copy([:sesso, :eta, :titolo], :ifnot => {:area => [1,2]})
|
rename¶
Rinomina le variabili. Restituisce l’elenco delle variabili create.
Argomenti:
- old_varlist => new_varlist: l’elenco delle variabili da rinominare e l’elenco dei corrispondenti nuovi nomi. Il numero degli elementi nei due elenchi deve corrispondere
- :label => "string": (opzionale) l’etichetta della variabile
- :levels => []|{}: (opzionale) i livelli della variabile come array di etichette o come hash codice-etichetta
1 2 3 | rename :sesso => :sex
rename [:sesso, :d1, 'd5.1'] => [:sex, :d100, :d5]
rename s(:d8_,1..7) => s(:x8_,1..7)
|
- varlist => template: l’elenco delle variabili da rinominare e una stringa contenente il carattere # che verrà sostituito con il nome della variabile originaria
1 | rename [:area, :sesso, :eta] => "#_field" # :area_field, :sesso_field, :eta_field
|
- regex => subst: un’espressione regolare e la stringa di sostituzione
1 2 3 | rename /_\d{4}__r\$_/ => '' # esempio: "jan_2014__r$_" => "jan"
rename /x(\d{1,2})_(\d{4})/ => 'y\2m\1' # esempio: "x11_2019" => "y2019m11"
rename /^(d7_)(.+)$/ => 'old_\1\2' # esempio: "d7_1", "d7_2", "d7_99" => "old_d7_1", "old_d7_2", "old_d7_99"
|
rename?¶
Come rename, ma non genera un errore se la variabile da rinominare non esiste.
rename_re¶
Rinomina le variabili secondo una o più espressioni regolari.
Argomenti:
- regex1 => sub1, regex2 => sub2, ...: le coppie di espressione regolare/espressione di sostituzione. Le espressioni regolari verranno applicate nell’ordine dato. Solo la prima che trova una corrispondenza verrà applicata. Nelle espressioni di sostituzione, fare attenzione a usare gli apici singoli ' in presenza dei capturing group (\1, ecc.)
- :keep => varlist: la lista delle variabili da rinominare (default tutte le variabili)
- :drop => varlist: eventuali variabili da escludere
- :error => :none|:warn|:stop: comportamento in caso di variabile non esistente o di conflitto di nome (default :warn)
1 2 | rename_re /^(.+?\d)r(\d+)c(\d+)$/ => '\1_\2_\3', # rinomina per es. d5r2c3 come d5_2_3
/^(.+?\d)r(\d+)$/ => '\1_\2' # rinomina per es. q17r5 come q17_5
|
drop o delete¶
Cancella le variabili elencate.
keep¶
Tiene solo le variabili elencate.
drop_empty¶
Cancella le variabili vuote. Accetta anche un elenco di variabili.
keep_empty¶
Tiene solo le variabili vuote. Accetta anche un elenco di variabili.
reorder¶
Riordina le variabili. Con un elenco parziale di variabili, sposta all’inizio le variabili indicate e a seguire le restanti variabili. Senza nessun argomento raggruppa e ordina i gruppi di variabili con la stessa radice. Inserendo come ultimo argomento un numero, inserisce le variabili in quella posizione. -1 inserisce le variabili in fondo alla lista.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | vars = %w(area sesso etaq eta name d7_9 d7_2 d7_1 d7_10 d7_5 d7_6 d7_7 d7_8 d7_3 d5 peso id_comune d7_99 d7_4 ser_no)
spss.open "demo_data20", :keep => vars
reorder
p allvars
# => ["area", "sesso", "etaq", "eta", "name", "d7_1", "d7_2", "d7_3", "d7_4", "d7_5", "d7_6", "d7_7", "d7_8", "d7_9", "d7_10", "d7_99", "d5", "peso", "id_comune", "ser_no"]
reorder :ser_no, :peso, :name
p allvars
# => ["ser_no", "peso", "name", "area", "sesso", "etaq", "eta", "d7_9", "d7_2", "d7_1", "d7_10", "d7_5", "d7_6", "d7_7", "d7_8", "d7_3", "d5", "id_comune", "d7_99", "d7_4"]
reorder :etaq, :eta, 4
p allvars
# => ["ser_no", "peso", "name", "etaq", "eta", "area", "sesso", "d7_9", "d7_2", "d7_1", "d7_10", "d7_5", "d7_6", "d7_7", "d7_8", "d7_3", "d5", "id_comune", "d7_99", "d7_4"]
|
move¶
Sposta la variabile nella posizione indicata.
1 | move :varname, :ini|:end|{:before|:after => :name}
|