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
_images/ptabsweb-period-stratum-base.png

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

n

Seleziona le prime n osservazioni.

1
 n 100

sample

Estrae un sample delle osservazioni.

1
 sample 100

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.