こんにちは、
2015 年のディスカッション (件名「sumif」) を見つけましたが、そこには現在のタスクに非常に役立つスクリプトが記載されていました。そこに質問を書きましたが、そのディスカッションに参加した人が私の質問を見ることができるかどうかはわかりません。
このスクリプトは私が見つけたもので(少し変更されています)、値が「0/0」(または何でも)である各行の列をカウントするのに非常に役立ちます。
dt << New Column("Sum",
Numeric, Formula(
Local({i = 0, n = N Col(Current Data Table()) - 1},
Sum(Repeat({i++ ; (Column(i)[] =="0/0")}, n))
)
)
);しかし、このスクリプトを編集して、「some_character」を含む列をカウントするにはどうすればよいでしょうか?
最後の列「合計」に数式と必要な結果の数値が含まれているデータ テーブルを添付しました。
大きなデータ テーブルがあり、特定の値 (文字として) を持つ各行の列をカウントするスクリプトが必要です。
上記のスクリプトを変更しようとしましたが、機能しません。
dt << New Column("Miss",
Numeric, Formula(
Local({i = 0, n = N Col(Current Data Table()) - 1},
Sum(Repeat({i++ ; (Contains(Column(i)[],"."))}, n))
)
)
);</CODE>Please, help</P><P>ヴァレンティーナ</P></LINGO-BODY><LINGO-LABS id="lingo-labs-737490" slang="en-US" mode="CREATE"><LINGO-LABEL>自動化とスクリプト</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-737586" slang="en-US" mode="CREATE">Re: sumif: 文字が含まれている列をカウントする</LINGO-SUB><LINGO-BODY id="lingo-body-737586" slang="en-US" mode="CREATE"><P>添付した元のデータ テーブルは 4 つの列があるため、そのようではありませんでした (合計列を無視することはできません)</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1711103084651.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_0-1711103084651.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/62510iAAF3B35AD80E493A/jthi_0-1711103084651.png" role="button" title="jthi_0-1711103084651.png" alt="jthi_0-1711103084651.png" /></span></SPAN></P>
<P>データに応じて、数式を使用する場合は、次のようにします (ほとんどの場合、数式は使用せず、純粋なスクリプト ソリューションを使用します)。</P>
<PRE><CODE class=" language-jsl">Names Default To Here(1);
dt = Open("$DOWNLOADS/sum_help_data.jmp");
dt << Delete Column("Sum");
dt << New Column("Miss", Numeric, Continuous, Formula(
As Constant(
cols_of_interest = Filter Each({colname}, Current Data Table() << Get Column Names("String"),
!IsMissing(Regex(colname, "S\d"));
);
);
Local({
res = 0;
},
For Each({colname}, cols_of_interest,
res = res + (Contains(Column(colname)[], ".") > 0);
);
res;
);
));
はい、すべてのデータは同じタイプである必要があるようです。
ありがとうございます。うまくいきました!
私の投稿には小さなデータ テーブルを添付しました。3 行 3 列のヘッダーがあります。
S1 S2 S3
0/0./. 0/0
./. ./. ./.
0/0 0/0 0/0
このサンプルテーブルではスクリプトは動作しません
列の合計数式が中断されました
アクセスまたは 'Contains' の評価の行 1 の引数の型が間違っています。不正な引数 (列 ( i )[])、Contains/*###*/(列 ( i )[], ".")
数式評価エラーは無視されました
おそらくループは文字列ではない列に到達しています。この部分に何らかの修正が必要になる可能性があります。
n = N Col(Current Data Table()) - 1
データの知識がなければ、どのように行うべきかを知ることは非常に困難です。-1 を単純に変更したり、文字列のリストを取得したり、何らかのパターンでどの列を調べるかを計算したりするだけかもしれません。
これは私のログからの抜粋です:
列の合計式が中断されました
'Contains' のアクセスまたは評価の行 421001 の引数の型が間違っています。不正な引数 (列 ( i )[] )、Contains/*###*/(列 ( i )[], ".")
数式評価エラーは無視されました
申し訳ありませんが、あなたの質問が理解できません。
約 500,000 行、約 3,000 列のテーブルがあります。ドットを含む列の合計を計算する必要がありますが、数式は使用できません。
スクリプトが欲しいです。どんなスクリプトでも構いません。さまざまなアプローチを試しましたが、どれもうまくいきませんでした。