Qualche giorno fa, ho mostrato a un cliente come poteva usare le tabelle di ricerca in JMP e ho pensato che sarebbe stata una buona idea condividerla con tutti.
Quelli di voi che hanno già usato le tabelle di ricerca sanno già quanto possono essere a portata di mano. Per coloro che non ne hanno mai usato uno, esaminiamo prima un semplice esempio: assegnazione di un voto di lettera basato su un voto numerico.
Supponiamo di avere la seguente corrispondenza tra gradi numerici e letterali:
E: x <60
60 <= x <70
C: 70 <= x <80
B: 80 <= x <90
A: 90 <= x
Vorremmo assegnare automaticamente i voti delle lettere ai gradi numerici sottostanti - ma come?

Il modo più comune è utilizzare una colonna formula con una clausola IF. Le dichiarazioni vengono valutate nell'ordine rilevato e, una volta che una dichiarazione viene valutata come "Vero", l'esecuzione si interrompe, pertanto la clausola deve essere costruita tenendo presente quanto segue:


Questa tecnica funziona perfettamente, ma sfortunatamente può diventare ingombrante in certi casi:
- Cosa succede se dobbiamo considerare una lista di molti valori, non solo alcuni? Scrivere una lunga clausola IF è noioso e soggetto a errori.
- Cosa fare se l'elenco dei valori non è noto in anticipo ma è determinato durante l'esecuzione? Possiamo gestirlo utilizzando JSL per scrivere codice in modo dinamico, ma la maggior parte delle persone preferisce evitarlo se possibile.
Fortunatamente, possiamo affrontare casi come questi con l'aiuto di una potente funzione matrix: Loc Sorted ().
Come funziona Loc Sorted ()?
- Loc Sorted ( X , y ) prende come input una matrice X , ordinato dal basso verso l'alto, e y , che può essere di tipo matrix o scalare.
- Loc Sorted () restituisce l'indice (o gli indici, se y è una matrice) dell'ultimo valore in X che è minore o uguale a y .
Ad esempio, l'esecuzione di questo codice fornisce un risultato di [3], poiché 14 è maggiore o uguale al numero memorizzato nel file 3 posizione del X matrice, ma inferiore al numero memorizzato nel 4 la posizione del X matrice:
x = [0, 5,10,15,20,25];
y = 14;
mostra (loc ordinato (x, y));

Allo stesso modo, l'esecuzione di questo codice dà un risultato di [4,6,6,1]:
x = [0, 5,10,15,20,25];
y = [17, 25, 50, 3];
mostra (loc ordinato (x, y));

Si noti che il minimo del X la matrice dovrebbe essere il valore più basso di y ti aspetti di incontrare, perché 1 viene restituito per qualsiasi y valore che è meno di tutti i X valori:

Nell'esempio del grado della lettera, possiamo usare loc sorted () per selezionare il voto dalla lista {"E", "D", "C", "B", "A"}:

Questo è grandioso se abbiamo solo alcune categorie da considerare. Ma cosa succede quando abbiamo un intero tavolo pieno di opzioni, o non dobbiamo semplicemente cercare un singolo valore, ma cercare diversi valori e usarli insieme?
Fortunatamente, questo è facile da fare. Tutto ciò di cui abbiamo bisogno è una tabella aggiuntiva per contenere le informazioni. L'imposta di calcolo da una tabella delle imposte è un classico (e tempestivo) esempio di tale caso.
*** Avvertenza: non sono un professionista fiscale. Non ne suono uno in TV. Si prega di ottenere le tabelle delle imposte 2013 da il loro .
Nell'esempio di oggi, che è solo a scopo illustrativo, non dovrebbe essere interpretato come consulenza fiscale, e non è da un professionista fiscale , utilizzeremo la tabella seguente, che ho ricavato dalle informazioni I trovato online .

Il nostro obiettivo è calcolare l'imposta dovuta, data la tabella sopra e l'ammontare delle entrate tassate.
Innanzitutto, dobbiamo inserire queste informazioni in una tabella di dati (notate che abbasseremo il contenuto della prima colonna di $ 1, a causa del modo in cui Loc Sorted () funziona.) Per seguire insieme all'esempio, usate i seguenti nomi per la tabella e le colonne, o scarica l'esempio da JMP File Exchange (il download richiede il login SAS gratuito).
Nome della tabella: MarriedFilingJointlyTable
Nomi delle colonne:
- tagli (limite di reddito per ciascuna delle categorie di imposte)
- al lordo delle imposte (somma delle imposte dovute sul reddito in tutte le parentesi)
- Margrate (aliquota fiscale sull'ultimo "blocco" di reddito)

Vogliamo utilizzare la tabella sopra per determinare la tassa per i redditi imponibili nella seguente tabella, denominata MarriedFilingJointlyTable :

Armato con Loc Sorted () e le due tabelle sopra, siamo pronti per iniziare.
Nella tabella delle entrate, aggiungiamo una colonna selezionando Cols> Nuova colonna ...

Inseriamo "Imposta" come Nome colonna e seleziona "Valuta" come Formato.
Selezioniamo quindi "Formula" dal menu a discesa Proprietà colonna, a questo punto viene visualizzato l'editor di formule.
Sapevi che possiamo effettivamente inserire un programma in una formula di colonna? Questo è ciò che faremo qui - e anche se il nostro script è composto da sole tre righe, il modo più semplice e meno soggetto a errori consiste nel copiare e incollare da una finestra di script.
Quindi, apri una finestra di script ( File> Nuovo> Nuovo script ) e digitare quanto segue:

Linea 1 punta la variabile dt alla tabella delle tasse:
- Ogni volta che vogliamo utilizzare una colonna della tabella delle imposte - piuttosto che la tabella delle entrate, in cui risiede effettivamente la formula - abbiamo bisogno di prefigurare quel nome di colonna con dt .
Linea 3 determina quale riga della tabella delle tasse verrà utilizzata per un dato importo di reddito:
- Chiamiamo Loc Sorted () utilizzando tutti i valori della colonna Tagli nella tabella delle tasse come X e il valore nella riga corrente della tabella dei redditi imponibili come y .
- Memorizziamo il risultato di questa chiamata come supporto , che useremo per trovare la riga di cui abbiamo bisogno nella tabella delle tasse.
- Ad esempio, per il primo valore di reddito, poiché $ 41.196,47 è compreso tra i limiti contenuti nelle righe 2 e 3 della tabella delle imposte, Bracket è uguale a 2, quindi per calcolare la tassa utilizzeremo la riga 2 della tabella delle imposte.
Linea 5 calcola la tassa. Usando il primo valore del reddito di $ 41.196,47 come esempio:
- dt: ante imposte [bracketing] è il valore memorizzato nella riga appropriata della colonna PreTax della tabella delle imposte. Per il primo valore di reddito elencato, questa è la somma di tutte le imposte sul reddito al di sotto del limite più vicino, ma non superiore a $ 41.196,47. (In questo caso, è $ 1,785.)
A questa quantità, dobbiamo aggiungere il prodotto di:
- dt: Margrate [bracketing] , l'aliquota marginale nella fascia più alta a cui sono tassati $ 41.196,47 (in questo caso, è 0,150), e
- : Reddito imponibile - dt: cuts [Bracket] , che è l'importo del reddito tassato a questo tasso (In questo caso, è $ 41.196,47 - $ 17,850.)
Una volta inserito lo script nella finestra dello script, selezioniamo tutto, lo copia e lo incolliamo nella casella rossa nell'editor di formule (che fino ad ora non conteneva nulla):

Dopo aver premuto "OK" per chiudere l'editor di formule e "OK" per chiudere l'editor delle proprietà della colonna, troviamo che la tassa è stata calcolata per ogni riga nella tabella delle entrate e vedere dall'icona "+" che la tassa è la formula -basato; la tabella di ricerca deve essere aperta ogni volta che si desidera rivalutare la formula. (Se preferisci rimuovere la formula a questo punto, fai semplicemente clic sull'icona "+", seleziona "Cancella" quando si apre l'editor delle formule, quindi fai clic su "OK".)

Per quelli di voi che preferiscono lo scripting, la soluzione è simile. Nello script seguente, ho scritto i valori direttamente nella tabella senza una formula, ma l'uso dell'opzione formula () nel messaggio << Nuova colonna () funzionerebbe altrettanto bene.

E il gioco è fatto. È tutto ciò che serve per utilizzare le tabelle di ricerca in JMP! Se sei come molti dei nostri clienti, vedrai molte opportunità per il loro utilizzo: divertiti.