Selezione delle osservazioni¶
filter¶
Seleziona un sottoinsieme di casi in modo temporaneo (può essere modificato o disattivato).
Una nuova istruzione filter sostituisce quella precedente.
Parametri:
- l’espressione filtro
- :label definisce un’etichetta che verrà stampata in ogni tavola.
- :id definisce un identificativo del filtro.
1 2 3 4 5 6 7 8 9 10 11 12 | # con variabile / valori
filter :sesso => 1, :label => "Intervistati di sesso maschile"
filter :d1 => 1
filter :not, :d1 => 1
filter "d1<3"
filter :d1, :label => "Osservazioni con valori validi sulla D1"
filter "!d1", :label => "Osservazioni con valori mancanti sulla D1"
filter :d1 => [1,2], :d2 => 3..5
filter "sex=1"
filter "sex=1 AND etanum>=18", :label => "Intervistati maschi maggiorenni"
filter "(d1=1 OR d1=3) AND sex=1"
filter "VALID(reg_uk) AND reg_uk < 99", :label => "Base: UK"
|
filter nil equivale a all:
1 2 3 | filter nil
filter nil, :label => "Totale campione"
filter nil, "Totale campione"
|
Attraverso l’oggetto filter e possibile accedere ai seguenti attributi:
- filter.caption: l’etichetta
- filter.expression: l’espressione filtro
save_filter!¶
Il parametro di configurazione save_filter permette di attivare la generazione automatica di una variabile logica per ciascun filtro impostato. La variabile avrà come nome il parametro :id oppure un nome generato automaticamente, come etichetta l’etichetta impostata in :label e come valori 0 e 1, dove 1 indica i casi che soddisfano la condizione del filtro.
filter?¶
filter? stampa le informazioni relative al filtro.
filtered?¶
filtered? restituisce true se è impostato un filtro e false se non è impostato.
Attenzione
I filtri vengono calcolati una sola volta quando vengono definiti. Pertanto modificando il valore di una variabile utilizzata nel filtro, non si avrà nessuna modifica dei record selezionati.
Attenzione
Quando viene definito un filtro pTabs memorizza i numeri d’indice dei record filtrati e li utilizza per filtrare le tavole successive. Pertanto quando un filtro è attivo non devono essere usate istruzioni che modificano la struttura del dataset, aggiungendo, togliento o modificando di posizione i record.
Suggerimento
Per le espressioni vedi anche Espressioni
select¶
Selezione un sottoinsieme di casi in modo definitivo. I record vengono eliminati dal dataset caricato in memoria (non dal file su disco).
Utilizza la stessa sintassi di filter. [1]
reject¶
Elimina i casi dal dataset in base ai valori indicati di una variabile o al numero di riga.
Parametri:
- :varname, valuelist: il nome della variabile seguito dall’elenco dei valori
- oppure, :rownumbers: l’elenco dei numeri di riga
1 2 3 4 5 | reject :ser_no, 10..50, 56
reject :id, '001056', '023109', '075129'
reject 24, 25, 30
|
all¶
Se è stato selezionato un sottoinsieme di casi con il comando filter [2], all elimina il filtro riattivando tutti i record. E’ possibile utilizzare i parametri :id e :label come in filter. L’etichetta può anche essere specifata come primo argomento senza la chiave :label. E’ possibile anche utilizzare filter nil.
1 2 3 | all
all "Base: totale intervistati", :id => "tutti"
all :label => "Base: totale intervistati", :id => "tutti"
|
cases¶
cases modifica i parametri :id e/o :label della selezione corrente (anche per il totale casi), senza modificare la selezione dei casi. L’etichetta può anche essere specifata come primo argomento senza la chiave :label. Può essere utilizzato anche se non è stato utilizzato nessuno dei comandi filter, select e all.
1 2 3 | cases "BASE: totale casi"
cases :label => "BASE: totale casi"
cases :id => :male, :label => "BASE: maschi"
|
Suggerimento
Se si vuole semplicemente modificare l’etichetta stampata nelle tavole, utilizzare cases non all.
break¶
break esegue il codice contenuto nel blocco impostando un nuovo filtro a ogni ripetizione. Eventuali filtri attivi vengono eliminati.
break passa nel blocco tre argomenti: l’etichetta, l’indice (con base 1) e l’espressione filtro generata.
break può essere eseguito come metodo di una variabile (indicata come stringa o come simbolo), ciclando così per ciascun livello della variabile:
1 2 3 4 | :area.break do |lab, i, exp|
cat :d1
ord :d5
end
|
break può essere eseguito come metodo di un Hash in cui viene indicato esplicitamente l’etichetta del filtro (le chiavi dell’hash) e l’espressione filtro (i valori dell’hash):
1 2 3 4 5 6 7 | { "NORD" => {:area => [1,2]},
"CENTRO" => {:area => 3},
"SUD - MASCHI" => "area=4 AND sesso=1",
"SUD - DONNE" => "area=4 AND sesso=2" }.break do |label, index, exp|
scale s(:d6_,10)
md s(:d7_,10)
end
|
break può essere eseguito come metodo di un Array o di un Range, in tal caso si limita a iterare senza attivare nessun filtro.
break accetta i seguenti argomenti:
- :total: esegue il blocco di istruzioni anche senza filtro (“a totale”) usando come etichetta la stringa indicata
1 2 3 4 5 6 7 8 9 10 | 'sesso'.break(total: "Totale casi") do
cat :d1
end
{...}.break(total: "TOTALE") do ...
:sesso.break(total: "") do |label, i, exp|
filter "area=1 AND #{exp}", :label => "Nord Ovest: #{label}"
cat :d1
end
|
E’ possibile generare le tavole a totale in modo esplicito:
1 2 | { "TOTALE" => :area,
"NORD" => {:area => [1,2]}, ... }.break ...
|
Consiglio
Per realizzare blocchi ripetuti di tavole e/o di altre istruzioni, vedere anche il metodo rep nella sezione Funzioni di utilità.
Note
[1] | Quando la selezione dei casi riguarda tutto il report (o tutta la parte restante), benché il risultato sia identico, select è da preferire a filter in quanto, eliminando le osservazioni, riduce i tempi di elaborazione. I dati non vengono eliminati dal file di dati, ma solo dal data frame in memoria. |
[2] | all non ha efficacia se è stato precedentemente utilizzato select. |