各行の値をカウントするリストに列 1 ~ 6 を含むスクリプトがあります
POR という単語が何回出現するか、および test という単語が何回出現するかをカウントする JSL スクリプトを作成しようとしています。
以下の例(最後の 2 列は手動で実行しました)

フォーラムを読んで、DT を行列に変換する必要があることは理解しましたが、それを機能させることができません。
ありがとう!
自動化とスクリプト作成Re: 各行の値をカウントするそれはわかっています...しかし、時間の観点から見ると、これは驚くほど良い方法です。 興味深いことに、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."));
Re: 各行の値をカウントするすごくクール……でも、ちょっと大きな深淵に足を踏み入れてしまったような気がするRe: 各行の値をカウントする私はこれが好きです、クレイジ。
デザイン マトリックス機能でもこのアイデアを処理できるようです。この式を試して「a」の数を数えてください。
dt = :Col1 << get data table;
Sum( Design( dt[Row(), {:Col1, :Col2, :Col3, :Col4, :Col5}], {"a"} ) );
Re: 各行の値をカウントする別の方法。
Column formula to count across rowColumn formula to count across row行全体でカウントする列の式
この数式は、データ テーブルの添字を使用して、行 8 の {"test","POR","test","test"} のようなリストを取得します。
上では 1::4 を使用しましたが、これはショートカットとして Index(1,4) に変わります。 {Column1、Column 2、... を使用する必要があります。 これは、値の 1 つを "xyzzy" に変更すると、数式を強制的に再実行するまで数式列の値が更新されなかったためです。 JMP が列が別の列を参照していることを認識できない場合、再評価は行われません。
これはよりうまく機能します:
formula with explicit column namesformula with explicit column names明示的な列名を含む式
Re: 各行の値をカウントするこんにちは、
JMP の「値ラベル」プロパティ、「ラベルからコードへ」および「コードからラベルへ」列ユーティリティを確認してください。
POR には数値 1 を使用し、テストには 0 を使用することを推奨しないとしたら、私は怠慢になります (1: テスト、0: POR をお好みであれば)。 値ラベル列プロパティを使用すると、これらの値を「test」と「POR」であるかのように表示できますが、内部的には 0 と 1 です。
値は数値であるため、ネイティブの列および行の式を使用して計算を実行できます。 1 と 0 の場合、合計は 1 の数を示し、平均は 1 の割合を示します。 この例では、POR を 0、「テスト」を 1 として保存すると、対象の列をすべて選択し、右クリックして選択するだけで、特定の行のテストの数を見つけることができます。新しい数式列 > 結合 > 合計ポップアップメニューから。
以下は、これが実際にどのように見えるかを示す画像です。 「POR」と「test」という単語が左寄せされているため、セルにはテキストが含まれているように見えますが、セルをクリックすると、実際には日付と時刻の場合と同様に、JMP が内部的に数値を保存していることがわかります。

[列] ペイン (データ テーブルの左中央) の列名の右側にある * をクリックすると、[値ラベル] を選択してプロパティの現在の設定を表示できます。

乾杯、
ブレイディ
Re: 各行の値をカウントするクールなアイデア
Re: 各行の値をカウントするこんにちは、
さらに別の方法では、1 クリックの変換ですべての列を連結します。
「test」は POR より 1 文字多く、欠落データがないため、結果の文字列は、「POR」のみの文字列と比較して、含まれる「test」ごとに 1 文字ずつ増加します。
連結するには、対象の列を選択して右クリックし、以下のように選択します。 次に、簡潔にするために列の名前を「concat」に変更します。

以下のテーブルの例には、対象となる列が 6 つあります。したがって、「POR」のみを含む文字列は 6 * 3 = 18 文字になります。
したがって、次の式を使用します。
length(:concat) - 「test」== n_test の数の場合は 18。
そして
6 - 「POR」の数の n_test。
一般に、n_test の場合は (length(:concat) - 18)/k を使用します。ここで、k は 2 つのフレーズ間の文字の差です。 ここでは、k == 1なので省略します。

乾杯、
ブレイディ
Re: 各行の値をカウントするあなたが提供したテーブルをJMPで作成しました

次に、新しい列を作成し、その列に次の式を適用しました。
count = 0;
For( i = 1, i <= 4, i++,
count = Sum( count, Contains( As Column( i ), "test" ) )
);
count;
処理するテーブルには 4 つの列しかないため、For() ループは最大 4 までしか実行されないことに注意してください。
次の結果が得られます

データ表を添付しました
「ヘルプ」プルダウン メニューにある文書「Discovering JMP」を時間をかけて読むことを強くお勧めします。
Re: 各行の値をカウントするすべてですが、行ごとです
各行がその行内に値が出現した回数をカウントし、その行の最後に「カウント」値を書き込みます。
以下の例を参照してください。テーブルを追加しましたRe: 各行の値をカウントするおい、これはうまくいかない
たとえばこれで実行すると
| POR | POR | POR | POR |
| POR | POR | POR | POR |
| テスト | POR | POR | テスト |
| テスト | POR | POR | テスト |
| POR | POR | POR | POR |
| POR | POR | POR | POR |
| テスト | POR | POR | テスト |
| テスト | POR | テスト | テスト |
カウントは 0 として出力されます
「テスト」を実行すると期待されるのは次のとおりです: 0,2,2,0,0,2,3
出力は次のようになります。
| POR | POR | POR | POR | 0 |
| POR | POR | POR | POR | 0 |
| テスト | POR | POR | テスト | 2 |
| テスト | POR | POR | テスト | 2 |
| POR | POR | POR | POR | 0 |
| POR | POR | POR | POR | 0 |
| テスト | POR | POR | テスト | 2 |
| テスト | POR | テスト | テスト | 3 |
Re: 各行の値をカウントするカウントを計算する 1 つの方法である公式を次に示します。
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;
Re: 各行の値をカウントするちょっとした質問ですが、列ごとに必要ですか、それとも全体に必要ですか?