Hallo,
Ich habe eine Diskussion aus dem Jahr 2015 (Betreff „sumif“) gefunden, die ein sehr hilfreiches Skript für meine aktuelle Aufgabe enthält. Ich habe dort meine Frage geschrieben, weiß aber nicht, ob die Leute, die an dieser Diskussion teilgenommen haben, meine Frage sehen können.
Dieses Skript habe ich gefunden (leicht modifiziert) und es eignet sich hervorragend zum Zählen von Spalten für jede Zeile, deren Werte „0/0“ (oder was auch immer) sind.
dt << New Column("Sum",
Numeric, Formula(
Local({i = 0, n = N Col(Current Data Table()) - 1},
Sum(Repeat({i++ ; (Column(i)[] =="0/0")}, n))
)
)
);Wie kann ich dieses Skript jedoch bearbeiten, um Spalten zu zählen, die „some_character“ enthalten?
Ich habe eine Datentabelle angehängt, in der die letzte Spalte „Summe“ eine Formel und die benötigten Ergebniszahlen enthält.
Ich habe eine Big-Data-Tabelle und hätte gerne ein Skript zum Zählen der Spalten für jede Zeile mit bestimmten Werten (als Zeichen).
Ich habe versucht, das obige Skript zu ändern, aber es funktioniert nicht:
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>Valentina</P></LINGO-BODY><LINGO-LABS id="lingo-labs-737490" slang="en-US" mode="CREATE"><LINGO-LABEL>Automatisierung und Skripterstellung</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-737514" slang="en-US" mode="CREATE">Betreff: sumif: Spalten zählen, wenn sie Zeichen enthalten</LINGO-SUB><LINGO-BODY id="lingo-body-737514" slang="en-US" mode="CREATE"><P>Braucht man dafür eine Formel?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737576" slang="en-US" mode="CREATE">Betreff: sumif: Spalten zählen, wenn sie Zeichen enthalten</LINGO-SUB><LINGO-BODY id="lingo-body-737576" slang="en-US" mode="CREATE"><P>Entschuldigung, ich verstehe Ihre Frage nicht.</P><P>Ich habe eine Tabelle mit ca. 500.000 Zeilen und ca. 3.000 Spalten. Ich muss die Summe über Spalten berechnen, die einen Punkt enthalten – ich kann keine Formel verwenden. .</P><P>Ich möchte ein Skript haben, jedes Skript, das funktionieren würde. Ich habe verschiedene Ansätze ausprobiert, aber keiner hat funktioniert. .</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737577" slang="en-US" mode="CREATE">Betreff: sumif: Spalten zählen, wenn sie Zeichen enthalten</LINGO-SUB><LINGO-BODY id="lingo-body-737577" slang="en-US" mode="CREATE"><P>Das ist aus meinem Log:</P><P> </P><P>Spaltensummenformel unterbrochen<BR /> Argument ist falscher Typ in Zeile 421001 beim Zugriff oder bei der Auswertung von „Contains“, Bad Argument( Column( i )[] ), Contains/*###*/(Column( i )[], „.“)<BR /> Fehler bei der Formelauswertung wurden ignoriert</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737582" slang="en-US" mode="CREATE">Betreff: sumif: Spalten zählen, wenn sie Zeichen enthalten</LINGO-SUB><LINGO-BODY id="lingo-body-737582" slang="en-US" mode="CREATE"><P>Höchstwahrscheinlich erreicht Ihre Schleife eine Spalte, die keine Zeichenspalte ist. Dieser Teil muss höchstwahrscheinlich geändert werden</P>
<PRE><CODE class=" language-jsl">n = N Col(Current Data Table()) - 1
Ohne Kenntnis Ihrer Daten ist es sehr schwer zu wissen, wie es gemacht werden soll. Es könnte sich lediglich um eine einfache Änderung von -1 handeln, um eine Liste der Zeichenspalten abzurufen oder anhand einer Art Muster zu berechnen, welche Spalten durchlaufen werden sollen
Ich habe meinem Beitrag eine kleine Datentabelle beigefügt. Es hat 3 Zeilen und 3 Spalten mit einer Kopfzeile:
S1 S2 S3
0/0./. 0/0
./. ./. ./.
0/0 0/0 0/0
Das Skript funktioniert in dieser Beispieltabelle nicht
Spaltensummenformel unterbrochen
Argument ist falscher Typ in Zeile 1 beim Zugriff oder bei der Auswertung von „Contains“, Bad Argument( Column( i )[] ), Contains/*###*/(Column( i )[], „.“)
Fehler bei der Formelauswertung wurden ignoriert
Die ursprüngliche Datentabelle, die Sie angehängt haben, war nicht so, da sie 4 Spalten hat (Sie können die Summenspalte nicht ignorieren).

Abhängig von Ihren Daten würde ich dies folgendermaßen machen, wenn ich eine Formel verwenden würde (höchstwahrscheinlich würde ich das vermeiden und einfach eine reine Skriptlösung verwenden)
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;
);
));
Ja, es scheint, dass alle Daten vom gleichen Typ sein sollten.
Danke – es funktioniert!