那些在其他地方使用過查找表的人已經知道他們有多麼方便了。對於那些從未使用過的人,讓我們先看一個簡單的例子:根據數字等級分配一個字母等級。
假設我們在數字和字母等級之間有以下對應關係:
E:x <60
D:60 <= x <70
C:70 <= x <80
B:80 <= x <90
答:90 <= x
我們想自動為下面的數字等級分配字母等級 - 但是如何?

最常見的方法是使用帶有IF子句的公式列。語句按所遇到的順序進行評估,一旦語句求值為“True”,執行就會停止 - 因此必須在構造時考慮到這一點:


這項技術非常有效,但不幸的是,在某些情況下它會變得很麻煩:
- 如果我們需要考慮許多值的列表,而不僅僅是少數幾個,會發生什麼?編寫一個長IF子句是單調乏味且容易出錯的。
- 如果值列表未提前知道但在運行時確定,該怎麼辦?我們可以通過使用JSL動態編寫代碼來處理這個問題,但大多數人更願意避免這種情況。
幸運的是,我們可以藉助強大的矩陣函數來處理這類案例:Loc Sorted()。
Loc Sorted()如何工作?
- Loc Sorted( X , ÿ )將矩陣作為輸入 X ,從低到高排序,和 ÿ ,可以是矩陣或標量類型。
- Loc Sorted()返回索引(或索引,如果 ÿ 是最後一個值的矩陣 X 小於或等於 ÿ 。
例如,運行此代碼會得到[3]的結果,因為14大於或等於存儲在中的數字 3 的位置 X 矩陣,但小於存儲的數字 4 的位置 X 矩陣:
x = [0,5,10,15,20,25];
y = 14;
show(loc sorted(x,y));

同樣,運行此代碼會得到[4,6,6,1]的結果:
x = [0,5,10,15,20,25];
y = [17,25,50,3];
show(loc sorted(x,y));

注意最小的 X 矩陣應該是最低值 ÿ 你期望遇到,因為任何人都會返回1 ÿ 價值小於全部 X 值:

在字母等級示例中,我們可以使用loc sorted()從列表{“E”,“D”,“C”,“B”,“A”}中選擇等級:

如果我們只考慮幾個類別,那就太棒了。但是當我們有一個完整的表格,或者不僅需要查找單個值,而是查找幾個不同的值並將它們一起使用時會發生什麼?
幸運的是,這很容易做到。我們所需要的只是一個額外的表來保存信息。從稅表計算稅收是這種情況的經典(及時)示例。
***警告:我不是稅務專業人士。我不在電視上播放一個。請從中獲取2013年稅表美國國稅局 。
在今天的例子中,僅供說明之用,不應被視為稅務建議,並非來自稅務專業人士 ,我們將使用下面的表格,這是我從信息I中得到的在網上找到 。

我們的目標是根據上表和徵稅收入計算欠稅。
首先,我們需要將此信息放入數據表中(請注意,由於Loc Sorted()的工作方式,我們將第一列的內容降低$ 1。)要跟隨示例,請使用以下名稱:表和列,或從JMP文件交換中下載示例 (下載需要免費的SAS登錄)。
表名: MarriedFilingJointlyTable
列名:

我們希望使用上表來確定下表中的應稅收入稅,名稱為 MarriedFilingJointlyTable :

使用Loc Sorted()和上面的兩個表格,我們已經準備好開始了。
在收入表中,我們通過選擇添加一列 Cols> New Column ...

我們輸入“Tax”作為Column Name並選擇“Currency”作為Format。
然後,我們從“列屬性”下拉列表中選擇“公式”,此時將顯示“公式編輯器”。
您是否知道我們實際上可以將程序輸入到列公式中?這就是我們將在這裡做的 - 即使我們的腳本只有三行,最簡單且最不容易出錯的方法是通過從腳本窗口復制和粘貼。
所以,打開一個腳本窗口( 文件>新建>新腳本 )並輸入以下內容:

第1行指出變量 DT 到稅表:
- 每當我們想要使用稅表中的列 - 而不是收入表(公式實際將駐留在哪裡)時,我們需要在列表名前加上 DT 。
3號線確定我們將用於給定收入金額的稅表的哪一行:
- 我們使用稅表中cut cut列的所有值調用Loc Sorted() X ,以及應稅收入表當前行中的值為 ÿ 。
- 我們將此調用的結果存儲為托架 ,我們將用它來查找稅表中我們需要的行。
- 例如,對於第一個收入值,因為$ 41,196.47介於稅表第2行和第3行中包含的截止值之間,Bracket等於2,所以我們最終會使用稅表中的第2行來計算稅額。
第5行計算稅收。以第一收入價41,196.47美元為例:
- DT:稅前[支架] 是存儲在稅表的PreTax列的相應行中的值。對於列出的第一個收入價值,這是收入低於最接近但不超過41,196.47美元的截止值的總和。(在這種情況下,它是1,785美元。)
對於這個數量,我們必須添加以下產品:
- DT:MargRate [支架] ,最高等級的邊際稅率,稅收為41,196.47美元(在這種情況下,為0.150),以及
- :應納稅所得額 - dt:削減[Bracket] ,這是按此稅率徵稅的收入金額(在這種情況下,它是41,196.47美元 - 17,850美元。)
一旦我們將腳本輸入到腳本窗口中,我們就會選擇所有腳本,將其複制並粘貼到公式編輯器中的紅色框中(直到現在還沒有包含任何內容):

按“確定”關閉公式編輯器並單擊“確定”關閉列屬性編輯器後,我們發現已為收入表中的每一行計算稅額,並通過“+”圖標查看稅收為公式基;只要您想重新評估公式,就需要打開查找表。(如果您希望此時刪除公式,只需單擊“+”圖標,在公式編輯器打開時選擇“清除”,然後單擊“確定”。)

對於那些喜歡編寫腳本的人來說,解決方案是類似的。在下面的腳本中,我在沒有公式的情況下直接將值寫入表中,但使用<< New Column()消息中的formula()選項也可以正常工作。

你有它。這就是在JMP中使用查找表的全部內容!如果您像我們的許多客戶一樣,您會看到很多機會供他們使用 - 享受。