你好,
我发现 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”的列?
我附上了一个数据表,其中最后一列“Sum”有一个公式和所需的结果数字。
我有一个大数据表,并且想要一个脚本来计算具有特定值(作为字符)的每一行的列。
我尝试修改上面的脚本,但它不起作用:
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-737514" slang="en-US" mode="CREATE">回复:sumif:计算列是否包含某些字符</LINGO-SUB><LINGO-BODY id="lingo-body-737514" slang="en-US" mode="CREATE"><P>您需要为此制定一个公式吗?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737576" slang="en-US" mode="CREATE">回复:sumif:计算列是否包含某些字符</LINGO-SUB><LINGO-BODY id="lingo-body-737576" slang="en-US" mode="CREATE"><P>抱歉,我不明白你的问题。</P><P>我有一个表 ~500,000 行和 ~3,000 列。我需要计算包含点的列的总和 - 不能使用公式。 。</P><P>我想要一个脚本,任何可行的脚本。我尝试了不同的方法,但没有一个有效。 。</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737577" slang="en-US" mode="CREATE">回复:sumif:计算列是否包含某些字符</LINGO-SUB><LINGO-BODY id="lingo-body-737577" slang="en-US" mode="CREATE"><P>这是来自我的日志:</P><P> </P><P>列总和公式中断<BR />在访问或评估 'Contains' 时,第 421001 行的参数类型错误,错误参数( Column( i )[] ), Contains/*###*/(Column( i )[], ".")<BR />公式计算错误已被忽略</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737582" slang="en-US" mode="CREATE">回复:sumif:计算列是否包含某些字符</LINGO-SUB><LINGO-BODY id="lingo-body-737582" slang="en-US" mode="CREATE"><P>您的循环很可能到达某个不是字符列的列。这部分很可能需要一些修改</P>
<PRE><CODE class=" language-jsl">n = N Col(Current Data Table()) - 1
如果不了解您的数据,就很难知道应该如何完成。它可能只是对 -1 的简单修改,获取字符列列表或通过某种模式计算要遍历哪些列
我在我的帖子中附上了一个小数据表。它有 3 行 3 列,带有标题:
S1 S2 S3
0/0./. 0/0
./. ./. ./.
0/0 0/0 0/0
该脚本在此示例表中不起作用
列总和公式中断
访问或评估 'Contains' 时第 1 行的参数类型错误,错误参数( Column( i )[] ), Contains/*###*/(Column( i )[], ".")
公式计算错误已被忽略
您附加的原始数据表不是这样的,因为它有 4 列(您不能忽略 Sum 列)

根据您的数据,如果我使用公式,我会这样做(最有可能的是,我会避免这样做,而只使用纯脚本解决方案)
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;
);
));