計算每行中的值我有一個清單中包含第 1-6 列的腳本
我正在嘗試編寫一個 JSL 腳本來計算單字 POR 出現的次數以及單字 test 出現的次數
下面的範例(手動完成最後兩列)

閱讀論壇我知道我需要將 DT 轉換為矩陣,但我無法使其工作。
謝謝!
自動化和腳本編寫回覆:計算每行中的值我知道……但從時間的角度來看,這是一個令人驚訝的好方法。 有趣的是,雖然 concat 方法很奇怪,但速度也非常快。
例如,對於這些值的 200,000 行 x 10 列表(附加壓縮檔),運行時間如下:

Names Default To Here( 1 );
dt = Current Data Table();
t1 = HP Time();
dt << new column("xx",
formula(sum( design (dt[row(), {:col1, :col2, :col3, :col4, :col5, :col6, :col7, :col8, :col9, :col10}], {"test"})))
);
t2 = hptime();
dt << New Column( "xx",
formula(
count = 0;
dt = :Col1 << get data table;
For( i = 1, i <= 10, i++,
If( Column( dt, i )[Row()] == "test", count ++)
);
count;
)
);
t3 = hptime();
dt << new column("xx", formula(nrow(loc(dt[row(), {:col1, :col2, :col3, :col4, :col5, :col6, :col7, :col8, :col9, :col10}], "test"))));
t4 = hptime();
dt << new column("concat", character, formula(Col1 || :Col2 || :Col3 || :Col4 || :Col5 || :Col6 || :Col7 || :Col8 || :Col9 ||:Col10));
dt << new column("xx", formula(length(:concat)-30));
t5 = hptime();
print(evalinsert("Design matrix method: ^(t2-t1)/1e6^ seconds."));
print(evalinsert("Looping method: ^(t3-t2)/1e6^ seconds."));
print(evalinsert("Nrow(Loc()) method: ^(t4-t3)/1e6^ seconds."));
print(evalinsert("Concat method: ^(t5-t4)/1e6^ seconds."));
回覆:計算每行中的值非常酷......但我認為你已經步入了深淵回覆:計算每行中的值我喜歡這個,克雷格。
看起來設計矩陣功能也可以處理這個想法 - 嘗試這個公式來計算“a”的數量。
dt = :Col1 << get data table;
Sum( Design( dt[Row(), {:Col1, :Col2, :Col3, :Col4, :Col5}], {"a"} ) );
回覆:計算每行中的值其他方式。
Column formula to count across rowColumn formula to count across row跨行計數的列公式
此公式使用資料表下標來取得第 8 行的類似 {"test","POR","test","test"} 的清單。
上面我使用了 1::4,它變成 Index(1,4) 作為捷徑。 您應該使用 {Column1, Column 2, ... 相反,因為當我將其中一個值更改為“xyzzy”時,公式列的值不會更新,直到我強制重新運行公式。 如果 JMP 無法判斷某一列引用了另一列,則它不會重新評估。
這效果更好:
formula with explicit column namesformula with explicit column names具有明確列名的公式
回覆:計算每行中的值你好,
請查看 JMP 的「值標籤」屬性,以及「標籤到代碼」和「代碼到標籤」列實用程式。
如果我不提倡使用數字 1 表示 POR,使用數字 0 表示測試(如果您願意,1:測試,0:POR),那我就是失職了。 使用“值標籤”列屬性,我們可以使這些值看起來像“test”和“POR”,但在內部,它們是 0 和 1。
由於值是數字,因此可以使用本機列和行公式來完成計算。 對於 1 和 0 的情況,總和給出 1 的數量,而平均值給出 1 的比例。 在此範例中,如果我們將 POR 儲存為 0,將「test」儲存為 1,則只需選擇所有感興趣的列,右鍵單擊並選擇,即可找到給定行中的測試數新公式列 > 合併 > 總和從彈出式選單中。
下面是實際情況的圖片。 這些單元格似乎包含文本,因為單字 POR 和 test 是左對齊的,但當您單擊單元格時,您可以看到實際上 JMP 正在內部存儲數字,類似於日期和時間。

透過點擊「列」窗格(資料表左側中心)中列名稱右側的*,我們可以選擇「值標籤」來查看屬性的目前設定:

乾杯,
布雷迪
回覆:計算每行中的值很酷的主意
回覆:計算每行中的值你好,
另一種方法是透過一鍵轉換連接所有列。
由於“test”比 POR 多 1 個字符,並且沒有丟失數據,因此與僅包含“POR”的字符串相比,包含的每個“test”生成的字符串將增加 1 個字符。
要連接,請選擇感興趣的列並右鍵單擊,如下所示進行選擇。 然後為簡潔起見,將列重命名為「concat」。

在下面的範例表中,有 6 列值得關注;因此,僅包含“POR”的字串將具有 6 * 3 = 18 個字元。
因此,我們使用以下公式:
length(:concat) - 18 表示「test」== n_test 的數量。
和
6 - n_test 用於「POR」的數量。
一般來說,對於 n_test 我們會使用 (length(:concat) - 18)/k,其中 k 是兩個短語之間的字元差異。 這裡,由於 k == 1,我們省略它。

乾杯,
布雷迪
回覆:計算每行中的值我在 JMP 中創建了您提供的表格

然後我創建了一個新列並將以下公式應用於該列
count = 0;
For( i = 1, i <= 4, i++,
count = Sum( count, Contains( As Column( i ), "test" ) )
);
count;
請注意,For() 迴圈最多只能達到 4,因為表中只有 4 列要處理
它給出以下結果

我已附上資料表
我強烈建議您花時間閱讀“發現 JMP”文檔,該文檔可在“幫助”下拉菜單下找到
回覆:計算每行中的值對於所有人,但它是每行
就像每行計算一個值在該行中出現的次數,然後在該行的末尾我寫下“計數”值
請參閱下面的範例,我添加了一些表格回覆:計算每行中的值嘿,這不行
例如,如果我在此運行它
| 上電復位 | 上電復位 | 上電復位 | 上電復位 |
| 上電復位 | 上電復位 | 上電復位 | 上電復位 |
| 測試 | 上電復位 | 上電復位 | 測試 |
| 測試 | 上電復位 | 上電復位 | 測試 |
| 上電復位 | 上電復位 | 上電復位 | 上電復位 |
| 上電復位 | 上電復位 | 上電復位 | 上電復位 |
| 測試 | 上電復位 | 上電復位 | 測試 |
| 測試 | 上電復位 | 測試 | 測試 |
計數結果為 0
當我執行「測試」時我期望的是:0,2,2,0,0,2,3
所以輸出是這樣的:
| 上電復位 | 上電復位 | 上電復位 | 上電復位 | 0 |
| 上電復位 | 上電復位 | 上電復位 | 上電復位 | 0 |
| 測試 | 上電復位 | 上電復位 | 測試 | 2 |
| 測試 | 上電復位 | 上電復位 | 測試 | 2 |
| 上電復位 | 上電復位 | 上電復位 | 上電復位 | 0 |
| 上電復位 | 上電復位 | 上電復位 | 上電復位 | 0 |
| 測試 | 上電復位 | 上電復位 | 測試 | 2 |
| 測試 | 上電復位 | 測試 | 測試 | 3 |
回覆:計算每行中的值以下是計算計數的一種方法的公式
count = 0;
For( i = 1, i <= 6, i++,
count = Sum( count, Contains( As Column( i ), "test" ) )
);
count;
count = 0;
For( i = 1, i <= 6, i++,
count = Sum( count, Contains( As Column( i ), "POR" ) )
);
count;
回覆:計算每行中的值小問題,您需要每列還是全部?