Variabili: trasformazioni (1)¶
Nota
Per le espressioni vedi anche Espressioni
Argomenti comuni previsti dalle seguenti funzioni:
- varlist: la lista delle variabili su cui applicare la funzione
- valuelist: la lista dei valori necessari per applicare la funzione
- :[in]to => varlist: se specificato, le trasformazioni vengono applicate alle variabili specificate e non a quelle originarie
- :if => expression: la condizione per selezionare i casi a cui applicare la funzione
- :else => value|:copy: quando specificato :if il valore da attribuire per gli altri casi; :copy copia i valori esistenti
- :seed => number: permette alle funzioni aleatorie di riprodurre, a parità di condizioni, gli stessi risultati
- :size => #: la dimensione della variabile finale
- :ndec => #: il numero di decimali della variabile finale
- :type => #: il tipo della variabile finale
Le funzioni restituiscono l’elenco delle variabili trasformate, quindi è possibile concatenare le funzioni tra loro:
1 2 3 4 5 6 7 8 9 10 | p strip(:str1, :into => :str2) # => [:str2]
upcase strip :str1 # 2 funzioni
upcase(strip(:str1)) # 2 funzioni con tutte le parentesi anche se non sono necessarie
upcase strip(:str1) # 2 funzioni con le parentesi solo per la funzione interna
resize upcase(strip(:str1)), 10 # 3 funzioni; le parentesi permettono di attribuire correttamente il parametro 10 a resize
upcase strip(:str1, :into => :str2) # :str1 non viene modificata
upcase strip(:str1), :into => :str2 # :str2 risulta come nell'esempio precedente, ma snche :str1 viene modificata
|
Suggerimento
Per realizzare espressioni di trasformazione più complesse, vedere le istruzioni compute, recode, ecc..
Funzioni generiche¶
val¶
Assegna alle variabili un valore. Accetta un solo valore per tutte le variabili. Se le variabili non esistono, verranno create.
1 2 3 4 | val :v1, 1
val :v1, :v2, :v3, 99
val :v2, 1, :if => :mcr => 4
|
last¶
Restituisce l’ultimo valore valido.
1 2 | last :v1, :v2, :v3, :into => :x1
last :d5, 0, :to => :x5
|
Funzioni di conversione¶
to_i¶
Converte la variabile e il suo contenuto in variabile integer.
Argomenti aggiuntivi:
- size: (opzionale) la dimensione della variabile finale (non applicata ai dati)
1 | to_i :s1, :into => :v1
|
to_flt¶
Converte la variabile e il suo contenuto in variabile float.
Argomenti aggiuntivi:
- size: (opzionale) la dimensione della variabile finale (non applicata ai dati)
- ndec: (opzionale) il numero di decimali della variabile finale (non applicato ai dati)
- size.ndec: (opzionale) la dimensione e il numero di decimali della variabile finale (non applicati ai dati)
1 2 3 | to_flt :price, 4.2
to_flt :peso, 4, 2
to_flt :s1, :into => :v1
|
to_str¶
Converte la variabile e il suo contenuto in variabile string.
Argomenti aggiuntivi:
- size: (opzionale) la dimensione della variabile finale
1 | to_str :d1, :into => :s1
|
to_lev¶
Converte la variabile e il suo contenuto in una variabile string sostituendo ai dati l’etichetta del livello.
Argomenti aggiuntivi:
- size: (opzionale) la dimensione della variabile finale
1 | to_lev :d1, :into => :s1
|
to_codelev¶
Converte la variabile e il suo contenuto in una variabile string sostituendo ai dati il codice e l’etichetta del livello.
Argomenti aggiuntivi:
- size: (opzionale) la dimensione della variabile finale
- sep: (default -) il carattere per separare il codice dall’etichetta
1 | to_codelev :d1, 25, '/', :into => :s1
|
to_d¶
Converte la variabile string o integer e il suo contenuto in variabile date.
Argomenti aggiuntivi:
- size: (opzionale) la dimensione della variabile finale (default 10)
1 2 | to_d :strday, :into => :date1
to_d :ymd, :into => :date2
|
to_dt¶
Converte la variabile string o integer e il suo contenuto in variabile datetime.
Argomenti aggiuntivi:
- size: (opzionale) la dimensione della variabile finale (default 25)
1 2 | to_dt :strdaytime, :into => :datetime1
to_dt :ymdhms, :into => :datetime2
|
Valori mancanti¶
fillval¶
Sostituisce i valori mancanti con il valore specificato.
1 2 | fillval :v1, 1.0 # sostituisce i valori mancanti di :v1 con 1.0
fillval :v1, :v2, 9 # sostituisce i valori mancanti di :v1 e di :v2 con 9
|
filldown¶
Sostituisce i valori mancanti con il valore del record precedente.
1 2 3 | filldown :v1 # [1, nil, nil, 2, 1, 2, 2, nil, 1] => [1, 1, 1, 2, 1, 2, 2, 2, 1]
filldown :v1, :v1_2, :v1_2b, :into => s(:x1_,3)
|
fillup¶
Sostituisce i valori mancanti con il valore del record seguente.
1 2 3 | fillup :v1 # [1, nil, nil, 2, 1, 2, 2, nil, 1] => [1, 2, 2, 2, 1, 2, 2, 1, 1]
fillup s(:v7_,10), :into => s(:v77_,10)
|
fillrnd¶
Sostituisce i valori mancanti con dei valori casuali.
Argomenti aggiuntivi:
- I valori da generare:
- valuelist: un elenco di valori
- num1..num2: un range di valori
- se non indicato, utilizza i codici dei livelli della variabile oppure, in mancanza di livelli definiti, i valori presenti nei dati
- :ndec => n: il numero di decimali
1 2 3 4 5 6 7 | fillrnd :v1, 2, 5, 9
fillrnd :v2, 3..7
fillrnd :v3, -1.0..1.0, :ndec => 2
fillrnd :v1
|
fillprop¶
Sostituisce i valori mancanti con dei valori secondo le proporzioni indicate. Se l’argomento :prop non è indicato, vengono utilizzate le distribuzioni di frequenze della variabile. Se è attivo un peso, vengono utilizzate le distribuzioni pesate.
Argomenti aggiuntivi:
- I valori da generare:
- :prop => {val1=>prop1, val2=>prop2, ...}: un hash con le coppie valore-proporzione. I valori vengono comunque riproporzionati sulla loro somma
- se non indicato, utilizza le distribuzioni di frequenze pesate della variabile
1 2 3 4 5 | fillprop :v1, :prop => {1=>0.05, 2=>0.25, 3=>0.30, 4=>0.40} # \
fillprop :v1, :prop => {1=>5, 2=>25, 3=>30, 4=>40} # > sono equivalenti
fillprop :v1, :prop => {1=>15, 2=>75, 3=>90, 4=>120} # /
fillprop :v2
|
randna¶
Inserisce dei valori mancanti nella variabile.
Argomenti aggiuntivi:
- n|n1..n2: il numero di valori mancanti da inserire. Se indicato un range, verrà estratto casualmente un numero del range.
1 2 3 | randna :v1, 10
randna :v2, :v3, 10..15
|
Funzioni numeriche¶
round¶
Arrotonda il valore della variabile.
1 2 3 | round :peso, 3
round :peso, 2, :into => :peso2, :if => {:sesso => 1}, :else => :copy
round :ipf1, :ipf2, 5, :into => [:newpeso1, :newpeso2], :else => 0
|
trunc¶
Tronca la variabile al valore intero senza arrotondamento.
1 2 | trunc :peso, :into => :p1
trunc mult(:peso, 100), :into => :p2
|
sum¶
Somma variabili e costanti nella variabile specificata nel parametro :into. I casi con valore mancante su tutte le variabili producono valore mancante, mentre per quelli con almeno un valore valido su una delle variabili, i valori mancanti sono considerati uguali a zero.
1 2 3 4 5 | sum :peso, :peso2, :peso3, :into => :sommapesi # somma :peso+:peso1+:peso2 in :sommapesi
sum :v1, :v2, 100, :into => :x1 # somma :v1+:v2+100 in :x1
sum :peso :peso2, :peso3, :into => :peso # :peso conterrà la somma :peso+:peso1+:peso2
|
mean¶
Calcola la madia dei valori nella variabile specificata nel parametro :into. I casi con valore mancante su tutte le variabili producono valore mancante, mentre per quelli con almeno un valore valido su una delle variabili, i valori mancanti sono esclusi dal calcolo.
1 | mean :peso, :peso2, :peso3, :into => :meanpesi
|
subt¶
Esegue la sottrazione tra la prima variabile elencata e altre variabili o costanti. I casi con valore mancante sulla prima variabile producono valore mancante, mentre eventuali altri valori mancanti sono considerati uguali a zero.
1 2 | subt :tot, :p1, :p2, :into => :diff1
subt :tot, 100, :into => :diff1
|
mult¶
Moltiplica variabili e costanti. I casi con valore mancante sulla prima variabile producono valore mancante, mentre eventuali altri valori mancanti vengono ignorati.
1 2 | mult :peso1, :peso2, :peso3, :into => :peso
mult :prop, 100, :into => :perc
|
div¶
Divide due variabili o una variabile e una costante tra loro.
1 2 | div :price, 10, :into => :p1
div :v1, :tot, :into => :p2
|
divi¶
Esegue una divisione intera tra due variabili o tra una variabile e una costante.
1 | divi :price, 2, :into => :p2
|
mod¶
Calcola il resto della divisione intera tra due variabili o tra una variabile e una costante.
1 | mod :price, 2, :into => :p2
|
obscount¶
Conta il numero di osservazioni.
1 2 3 | obscount :totcases
obscount :tot_male, :if => "sex=1"
|
countval¶
Conta il numero di occorrenze di uno o più valori.
1 2 3 | countval s(:d7_,10), 1, :into => :count7a
countval s(:d7_,10), nil, :into => :count7b
countval s(:d7_,10), [nil,0], :into => :count7c
|
Funzioni stringa¶
downcase¶
Converte in minuscolo la stringa.
1 | downcase :str2 # "dante aligHIERI" => "dante alighieri"
|
capitalize¶
Converte la stringa in minuscolo con la prima lettera in maiuscolo.
1 | capitalize :str2, :into => :str12 # "dante aligHIERI" => "Dante alighieri"
|
cap¶
Converte la prima lettera in maiuscolo lasciando invariato il resto della stringa.
1 | capitalize :str2, :into => :str12 # "dante aligHIERI" => "Dante aligHIERI"
|
titleize¶
Converte la stringa in minuscolo con la prima lettera di ciascuna parola in maiuscolo.
1 | titleize :str1, :into => :str11 # "dante aligHIERI" => "Dante AligHIERI"
|
titl¶
Converte la prima lettera di ciascuna parola in maiuscolo lasciando invariato il resto della stringa.
1 | titleize :str1, :into => :str11 # "dante aligHIERI" => "Dante AligHIERI"
|
resize¶
Ridimensiona il contenuto della variabile stringa. Non modifica la dimensione della variabile.
1 | resize :str2, 6 # "Dante Alighieri" => "Dante "
|
strip¶
Elimina gli spazi iniziali e finali e gli spazi doppi dalla stringa.
1 | strip :str1 # " Dante Alighieri " => "Dante Alighieri"
|
strfill¶
Sostituisce tutti i caratteri della stringa.
Argomenti aggiuntivi:
- char: il carattere di riempimento: default asterisco (*)
- size: la lunghezza della stringa di riempimento: default la lunghezza della stringa esistente
1 2 | strfill :str1 # "Dante Alighieri" => "***************"
strfill :str1, 'X', 5 # "Dante Alighieri" => "XXXXX"
|
lpad¶
Aggiunge caratteri all’inizio della stringa.
Argomenti aggiuntivi:
- char: il carattere di riempimento: default zero (0)
- size: la lunghezza complessiva della stringa finale: default la dimensione definita (size) della variabile
1 2 | lpad :id # "123" => "000123"
lpad :id, '0', 8 # "123" => "00000123"
|
rpad¶
Aggiunge caratteri alla fine della stringa.
Argomenti aggiuntivi:
- char: il carattere di riempimento: default zero (0)
- size: la lunghezza complessiva della stringa finale: default la dimensione definita (size) della variabile
1 2 | rpad :id # "123" => "123000"
rpad :id, '0', 8 # "123" => "12300000"
|
substr¶
Sostituisce le occorrenze di un testo con un altro testo. E’ possibile usare espressioni regolari.
1 2 3 4 | substr :str1, "Mese", "Month" # "Mese 12, 2019" => "Month 12, 2019"
substr :str1, /^.*(\d{2}).*(\d{4}).*$/, '\2-\1' # "Mese 12, 2019" => "2019-12"
substr :str1, /^.*(\d{2}).*(\d{4}).*$/, "\\2-\\1" # se si usano gli apici doppi bisogna fare l'escaping del backslash
|
Nota
Un espressione regolare è racchiusa tra due caratteri /.
Il carattere i dopo il secondo / indica che il confronto è case-insensitive.
Nella stringa di sostituzione è possibile utilizzare \1, \2, ecc. per identificare i gruppi catturati dalle parentesi tonde () nell’espressione di ricerca. E’ necessario però racchiudere la stringa tra apici singoli ' o raddoppiare i backslash \\.
concat¶
Concatena due o più variabili e costanti in una variabile stringa.
1 | concat :d1, '-', :d5, '_', :str1, :into => :s1
|
strjoin¶
Unisce più variabili separandole con la stringa indicata.
1 | strjoin :d1, :d5, :str1, '.', :into => :s2
|
separate¶
Suddivide una variabile stringa in più parti e le inserisce in nuove variabili.
Argomenti aggiuntivi:
- char: il carattere di separazione: default caratteri diversi da numeri e lettere
- :conv: il simbolo di un metodo per per convertire il risultato: :to_i, :to_f, :to_s, ...
1 2 | separate :str1, '/', :into => [:day, :month, :year] # :str1="03/11/2019" => :day="03", :month="11", :year="2019"
separate :str1, :to_i, :into => [:day, :month, :year] # :str1="04-12-2019" => :day=4, :month=12, :year=2019
|