Selezione delle osservazioni¶
filter¶
Seleziona un sottoinsieme di casi in modo temporaneo (può essere modificato o disattivato).
Una nuova istruzione filter sostituisce quella precedente.
- :na e :valid rappresentano, rispettivamente, i valori mancanti e i valori validi. Per una sola variabile è possibile indicare più sinteticamente !v1 e v1.
- :label definisce un’etichetta che verrà stampata in ogni tavola.
- :id definisce un identificativo del sottocampione; viene utilizzato in alcuni formati di output.
- # il cancelletto datavanti alla variabile nelle espressioni R, converte la variabile in numerica
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # con variabile / valori
filter :sesso => 1, :label => "Intervistati di sesso maschile"
filter :d1 => 1
filter :d1 => '<3'
filter :d1 => :valid, :label => "Osservazioni con valori validi sulla D1"
filter :d1, :label => "Osservazioni con valori validi sulla D1" # equivalente alla precedente
filter :d1 => :na, :label => "Osservazioni con valori mancanti sulla D1"
filter "!d1", :label => "Osservazioni con valori mancanti sulla D1" # equivalente alla precedente
# Con condizioni in OR per vettori e range
filter :d1 => [1,2], :d2 => 3..5 # ((d1=1 OR d1=2) AND (d2=3 OR d2=4 OR d2=5))
# con espressione R
filter "sex == 'Maschio'"
filter "#sex==1 & etanum>=18", :label => "Intervistati maschi maggiorenni"
filter "(#d1==1 | #d1==3) & #sex==1"
|
Suggerimento
Per le espressioni vedi anche Espressioni
filter_not¶
Il suffisso _not permette di invertire l’espressione.
1 | filter_not :sesso => 2, :label => "Intervistati di sesso maschile"
|
and_filter e or_filter¶
Sono inoltre disponibili i prefissi and_ e or_ che permettono di concatenare più filtri sia per specificare un filtro complesso, sia per modificare il filtro tra diverse tavole.
1 2 3 | filter :d1 => [1,2], :label => "D1=1 OR D1=2"
and_filter_not :sesso => 1, :label => "(D1=1 OR D1=2) AND NOT SESSO=1"
or_filter :d5 => 4, :label => "((D1=1 OR D1=2) AND NOT SESSO=1) OR D5=4"
|
and_filter e or_filter non possono essere usati se prima non è stato definito un filtro con l’istruzione filter.
Il programma tiene memoria dei filtri aggiunti con and_ e or_ e delle relative etichette, pertanto è possibile eliminare gli ultimi filtri e ristabilire i precedenti.
1 2 3 | filter -1 # elimina l'ultimo filtro aggiunto
filter 2 # elimina tutti i filtri tranne quelli di livello 1 e 2
filter 0 # elimina il filtro, come se si usasse 'all'
|
select¶
Selezione un sottoinsieme di casi in modo definitivo. I record vengono eliminati dal data frame caricato in memoria (non dal file su disco).
Utilizza la stessa sintassi di filter. [1]
select_not¶
Il suffisso _not inverte l’espressione.
1 2 3 4 5 | select :sesso => 1, :label => "Intervistati di sesso maschile"
select_not :sesso => 2, :label => "Intervistati di sesso maschile"
select :d1 => '<3'
select :d1 => [1,2], :d2 => 3..5 # ((d1=1 OR d1=2) AND (d2=3 OR d2=4 OR d2=5))
select "#sex==1 & etanum>=18", :label => "Intervistati maschi maggiorenni"
|
Non sono disponibili i prefissi and_ e or_.
filter + select¶
Se usato senza argomenti, trasforma il filtro temporaneo (filter) attivo in una selezione definitiva.
1 2 3 4 | # espressione composta: filter + select
filter :d1 => [1,2]
or_filter :d5 => 4
select
|
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.
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 due argomenti: l’etichetta e l’indice (con base 1).
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|
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 & #sesso==1",
"SUD - DONNE" => "#area == 4 & #sesso==2" }.break do |label, index|
scale s(:d6_,10)
md s(:d7_,10)
end
|
break può essere eseguito come metodo di un Array p 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
- :all: attiva tutti i casi eliminanto qualsiasi filtro precedente (default true)
- :mode: :list o :page definisce la modalità in cui visualizzare i gruppi di tabelle in pTabsWeb (default :list)
- :label: l’etichetta del controllo select di pTabsWeb
1 2 3 4 5 6 7 8 9 10 11 12 13 | 'sesso'.break(total: "Totale casi") do
cat :d1
end
{...}.break(total: "TOTALE") do ...
filter :area
:sesso.break(total: "", all: false) do |label, i|
and_filter :area => 1, :label => "Nord Ovest: #{label}"
cat :d1
end
(1..3).break(mode: :page) do ...
|
E’ possibile generare le tavole a totale in modo esplicito:
1 2 | { "TOTALE" => :area,
"NORD" => {:area => [1,2]}, ... }.break ...
|
break può essere utilizzato non soltanto per le tabelle, ma anche con altri elementi come grafici e mappe:
1 2 3 | :area.break("Totale Italia") do |lab, i|
map "Mappa", :lat => :latitudine, :lng => :longitudine, :caption => :name
end
|
Importante
break genera dei gruppi di tavole che vengono riconosciuti da pTabsWeb e trattati come un unico oggetto con un filtro selezionabile.
Consiglio
Per realizzare blocchi ripetuti di tavole e/o di altre istruzioni, vedere anche il metodo rep nella sezione Funzioni di utilità.
period e stratum¶
Nel formato per pTabsWeb sono disponibili le istruzioni period e stratum per etichettare e raggrupare le tabelle. Il comando sarà attivo fino alla successiva istruzione period/stratum. Le etichette verranno visualizzate insieme alla base come campi di ricerca in pTabsWeb.
1 2 | period "Gennaio-giugno 2015"
stratum "Acquirenti"
|
1 2 3 | # disabilita period e stratum
period
stratum
|
base_pos¶
Definisce dove deve essere inserita l’etichetta del filtro:
- :corner: l’angolo in alto a sinistra della tabella
- :title: nel titolo
- :note: nelle note della sottotabella
- :tnote: nelle note della tabella
ddup¶
Elimina i record duplicati. Restituisce il numero di record eliminati. E’ possibile indicare le variabili su cui effettuare il controllo dei record duplicati oppure utilizzare tutte le variabili.
1 2 3 4 5 6 7 8 | # elimina i record che risultano doppi rispetto a tutte le variabili
ddup
# elimina i record che risultano doppi per le variabili id_fam e id_pers
ddup :id_fam, :id_pers
# elimina i record e assegna il numero di record eliminati a num_deleted
num_deleted = ddup(:ser_no)
|
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. |