計算每行中的值我在列表中有一個帶有 col 1-6 的腳本
我正在嘗試編寫一個 JSL 腳本,該腳本將計算 POR 出現的次數以及 test 出現的次數
下面的示例(在最後兩列中手動完成)

閱讀論壇我知道我需要將 DT 轉換為矩陣,但我無法使其工作。
謝謝!
腳本編寫回复:計算每行中的值小問題,你需要每列還是全部?
回复:計算每行中的值以下是計算計數的一種方法的公式
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;
回复:計算每行中的值嘿,這行不通
例如,如果我在這個上運行它
| 复核 | 复核 | 复核 | 复核 |
| 复核 | 复核 | 复核 | 复核 |
| 測試 | 复核 | 复核 | 測試 |
| 測試 | 复核 | 复核 | 測試 |
| 复核 | 复核 | 复核 | 复核 |
| 复核 | 复核 | 复核 | 复核 |
| 測試 | 复核 | 复核 | 測試 |
| 測試 | 复核 | 測試 | 測試 |
計數結果為 0
當我運行“測試”時,我期望的是:0,2,2,0,0,2,3
所以輸出是這樣的:
| 复核 | 复核 | 复核 | 复核 | 0 |
| 复核 | 复核 | 复核 | 复核 | 0 |
| 測試 | 复核 | 复核 | 測試 | 2 |
| 測試 | 复核 | 复核 | 測試 | 2 |
| 复核 | 复核 | 复核 | 复核 | 0 |
| 复核 | 复核 | 复核 | 复核 | 0 |
| 測試 | 复核 | 复核 | 測試 | 2 |
| 測試 | 复核 | 測試 | 測試 | 3 |
回复:計算每行中的值為所有人,但它是每一行
就像每一行計算一個值出現在該行內的次數,然後在該行的末尾我寫了“計數”值
看我下面的例子我添加了一些表格回复:計算每行中的值其他方式。
跨行計數的列公式
此公式使用數據表下標來獲取第 8 行的 {"test","POR","test","test"} 列表。
上面我使用了 1::4,它變成了 Index(1,4) 作為快捷方式。 您應該使用 {Column1, Column 2, ... 列 N} 而不是因為當我將其中一個值更改為“xyzzy”時,直到我強制重新運行公式時,公式列的值才會更新。 如果 JMP 無法判斷某列引用了另一列,則不會重新評估。
這效果更好:
具有顯式列名的公式
回复:計算每行中的值很酷……但我覺得你有點踏入了大深淵回复:計算每行中的值我知道......但從時間的角度來看,這是一種非常好的方法。 有趣的是 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."));
回复:計算每行中的值你好,
另一種方法涉及使用一鍵轉換連接所有列。
由於“測試”比 POR 多 1 個字符,並且您沒有丟失數據,因此與僅包含“POR”的字符串相比,包含的每個“測試”的結果字符串將增加 1 個字符。
要連接,請選擇感興趣的列並右鍵單擊,選擇如下。 為簡潔起見,然後將列重命名為“concat”。

在下面的示例表中,有 6 個感興趣的列;因此,只有“POR”的字符串將有 6 * 3 = 18 個字符。
因此,我們使用以下公式:
length(:concat) - “test” == n_test 的數量為 18。
和
6 - n_test 用於“POR”的數量。
通常,對於 n_test,我們會使用 (length(:concat) - 18)/k,其中 k 是兩個短語之間的字符差異。 在這裡,由於 k == 1,我們省略了它。

乾杯,
布雷迪
回复:計算每行中的值我喜歡這個,克雷格。
看起來設計矩陣功能可以處理這個想法,試試這個公式來計算“a”的數量。
dt = :Col1 << get data table;
Sum( Design( dt[Row(), {:Col1, :Col2, :Col3, :Col4, :Col5}], {"a"} ) );