選擇和子集數據因此,在本演示中,我們將著眼於選擇特定行並使用子集命令(可在 Tables 菜單中以交互方式找到)來提取數據表的子集。 因此,在課程日誌部分中,我將單擊滑雪小屋溫度數據。 這是一個廣泛的數據表,但相當短。 所以我們這裡的場景是我們有一個有氣象站的滑雪勝地,它每小時記錄一次溫度並將其保存到某個文件中。 因此,文件中的每個觀察結果都將包含每小時溫度讀數的日期加上。 它在上午統計,上午的溫度也是如此。現在讓我們假設當溫度低於零攝氏度時,我們計劃打開造雪機,因為在那個溫度下可能太冷而不能下雪。 因此,我們想查看我們的歷史數據記錄,找出記錄中我們使用那台造雪機的日子。 也許我們正試圖證明添加另一台機器或替換現有機器的合理性。 這裡有幾件事。 一個是這個溫度是用華氏溫度記錄的,而不是攝氏溫度。 第二,我們只使用了一小部分數據。 現在這些都是按天排序的,但這代表了我們的最佳實踐之一,當您將要處理大型數據集時,請嘗試獲取具有代表性的觀察樣本來開發您的腳本,以便您可以開發和測試您的腳本針對較小的子集。 同樣,希望能代表您可能希望在數據中找到的任何問題。 然後您可以針對完整的數據集對其進行測試。 所以在這個例子中,希望這是有代表性的,我們只用了一周的數據。 另一件事是我們記錄了華氏溫度,但我們的截止溫度是零攝氏度。 因此,雖然我們當然可以將負攝氏度轉換為華氏溫度,但我們將重申這個使用矢量化操作的概念,我們將提取所有華氏溫度作為矩陣並將它們轉換為攝氏溫度。 所以在日記裡有一個預先寫好的腳本,叫做隔離造雪日腳本。 我將一次運行那件作品。 在這個演示中,我實際上將使用嵌入式日誌選項,而不是來回導航到日誌窗口。 所以我要在我的腳本編輯器窗口中右擊並選擇 Show Embedded Log。 我將調整它的大小,以便我們仍然可以在窗口的編輯器部分中看到整個腳本。 所以我會選擇行並運行它。 這樣就可以獲取當前數據表的引用,即 Ski Lodge 溫度數據表,並將其存儲在 dt 中。 然後我將消息 get 作為矩陣發送並將其存儲在變量 tempF 中。 所以我要運行 line 並且通常使用更大的矩陣,而不是在日誌中顯示矩陣,我們只獲取矩陣維度和已分配的指示。 現在註意它有七行和七列。 如果我導航回數據表,則此數據表中有列。 那麼為什麼我們只拉出列呢? 好吧,如果您查看日期列,一方面您可以看到它是名義上的。 這表明這可能被視為字符數據而不是數字。 而且我可以進一步確認,我當然可以轉到列信息,但我還可以通過使列稍微寬一點並註意值左對齊來確認這一點,這就是 JMP 處理字符數據的方式。 所以當我將 get 作為矩陣發送到數據表時,它忽略了這個字符列,只提取了數字列。 然後 Line 將獲取變量 tempF 中的每個元素,即存儲在那裡的矩陣,並將其轉換為攝氏度並將其存儲在 tempC 中。 我再次在日誌中收到相同的消息,但是您當然可以將鼠標懸停在 tempf 或 tempc 上以查看它們的值。 接下來我想計算 tempC 中的行數,我一直提到這是一個最佳實踐,在循環外計算行數或列數。 所以我計算矩陣 tempC 中的行並將其存儲在變量 nr 中。 所以我會跑線,當然有七個。 我想做的另一件事是我想要——我要創建兩個矩陣。 一個給出任何一天的最低溫度,即 minTemp,另一個將指示造雪機是否應該打開,稱為 Machine。 它們都將從一定數量的行、一列和缺失值開始。 因此,我們正在級聯分配函數。 我使用那個 J 函數來製作一個包含一些行數的矩陣,這裡是 tempC 中的行數、我提到的那個單列以及缺失值。 如果 Machine 和 minTemp 以及任何其他變量將以相同的值開始,我們可以像您在行中看到的那樣以這種級聯方式簡單地分配它們所以我將運行它,並在日誌中,如果您將鼠標懸停在Machine 或 minTemp 你只會看到那一列缺失值。 然後我想循環,我從一個計數器開始,我測試 r 小於或等於存儲在 nr 中的數字,然後 for 循環的主體是我將有一個名為 obs 的變量,它將接受這個情況下,tempC 中的第一行和所有列。 我將在該行中找到最小值並將其放在 minTemp 中的第 r 位或第一位。 然後我會將我剛剛在 minTemp 中的那個位置的值與減號進行比較,如果這個比較為真,如果該值小於減號,我將得到一個布爾值,並將其放在機器的第一個位置,而如果它是假的,如果它大於或等於減號,我會輸入機器。 然後我們更新,我們再次測試,現在 obs 將被數據表中的下一行覆蓋。 我們將執行相同的步驟,直到我們填充 minTemp 和 Machine。 所以我將運行線路,我們可以將鼠標懸停在 minTemp 上。 它再次顯示在懸停幫助中,它也顯示在腳本輸入窗口的底部,您可以在下面看到。 我可以將鼠標懸停在機器上,有那些,現在最後幾個步驟我們可以級聯這些消息,但出於演示目的,我們將把它們分開。 所以我要向 dt 發送一個新的列消息。 它將被稱為 minTemp,其值將是我剛剛從該 for 循環中獲得的值。 因此,我將逐行逐行您可以在後台看到該新列已創建。 例如,我可以在新列中添加一個格式參數以具有固定的小數位數。 這還返回了一個列對象引用,如果我打算再次使用該列,我可以將其存儲在一個變量中。 然後下一段代碼將新列設置為 dt 的消息。 這個叫作雪。 值來自該機器列向量,它有 和 在這裡我的腳本將要求我們使用值標籤,如果有一個用於數據值的標籤將為否,如果有一個用於數據值的標籤將是肯定的。 然後我們當然會使用布爾值來打開使用值標籤的選項。 因此,我將運行線條再次,我們正在創建一個列對象的實例。 我想導航回表格並滾動過去。 因此,在現在的列中,我們顯示的是“否”和“是”。 在列面板中,如果我向下滾動,您仍然可以看到 Make Snow 是連續的,這意味著它是實際數據值的數字數據。 當我使用值標籤時,還有另一件事——列面板中的星號也表示有一個屬性,如果你點擊它,你會看到這個——當我使用值標籤時,如果我將鼠標懸停在數據表中的單元格上,它會顯示實際數據值。 但是,如果我現在要製作圖表或進行任何類型的分析,只要打開這些標籤,它就會使用這些標籤。 然後回到腳本中,我們可以再次將這些消息級聯到數據表,但出於演示目的,我們將在這些步驟中執行它們。 我將 select where 發送到數據表,我正在尋找 Make Snow 列中的值等於的行 所以我將運行 line 你可以在後台看到已經選擇了四行。 最後我將 subsect 命令發送到數據表。 我提供一個輸出表名並指定列。 因為我選擇了四行,所以我不必說我想要哪些行。 這些將自動被拉入子集表中。 所以我將逐行遍歷 現在我們有了那個子集表。 同樣在這一點上,我們可以選擇格式化最低溫度數據。 源腳本反映了子集。 如果我右鍵單擊源並選擇編輯,讓我們快速看一下。 每當我使用 Tables 菜單中的命令創建新腳本時,無論是交互執行還是使用腳本執行,我都會獲得源腳本。 所以它只是顯示子集是使用的表命令。 對子集的警告是它不知道為什麼這些行被拉出,所以它對這些行進行硬編碼。 JMP 編寫的腳本中沒有該選擇的依據。 並且 JMP 還通過將 a 作為參數添加到選定行來覆蓋僅拉取選定行的默認趨勢。 因此,如果您想捕獲腳本並將其調整為您正在編寫的另一個腳本,您將希望擺脫我顯示的兩行,並且在發送子集消息之前,對腳本進行任何邏輯選擇需要. 所以我會取消那個腳本。 因此,這是使用表格菜單中的命令的一個示例,但也再次將數據用作矩陣。