JSL, um passende Spaltendifferenz und Durchschnitt zu generierenHallo,
Ich hoffe auf Hilfe zu folgendem Thema:
Angehängte JMP-Datei mit der folgenden Tabelle.

Mein typischer/Startdatensatz enthält:
1. eine Kennung „Typ“
2. eine Reihe unbekannter Spaltenzahlen mit demselben Präfix und unterschiedlichem Zahlensuffix, z A num1, A num2, A num3...
3. ein zweiter Satz mit der gleichen Anzahl von Spalten wie in Nr. 2 oben, mit demselben Präfix und passendem Suffix wie in Nr. 2, z. B. B Nummer1, B Nummer2, B Nummer3 ...
Könnte ich Hilfe beim Schreiben eines JSL-Skripts zum Generieren der Spalten erhalten, um die Spalte „Satz A“ und „Satz B“ zu paaren und zu berechnen:
Formel( (:B 1.0 - :B 0.5) / (:A 1.0 - :A 0.5) ) ),
Formel( (:B 1.3 - :B 0.5) / (:A 1.3 - :A 0.5) ) ),
Formel( (:B 1.3 - :B 1.0) / (:A 1.3 - :A 1.0) ) ),
Generieren Sie dann eine Durchschnittsspalte („B/A Avg“), um den Mittelwert aller erstellten Spalten zu ermitteln. Beachten Sie, dass die oben genannten Generierungsspalten eine beliebige Zahl sein können. Es könnten 3, 2 oder 6 sein...
Am Ende des Tages interessiert mich vor allem die letzte Spalte von „B/A Avg“, die Zwischenspalten sind optional, wenn das das Skript vereinfacht.
Bitte lassen Sie mich wissen, wenn ich in meinen Fragen etwas klären kann. Vielen Dank im Voraus.
Automatisierung und SkripterstellungGrundlegende Datenanalyse und ModellierungBetreff: JSL zum Generieren passender Spaltendifferenz und DurchschnittWas bestimmt die zur Berechnung verwendeten Spaltenpaare?
Betreff: JSL zum Generieren passender Spaltendifferenz und DurchschnittMit demselben Suffix (Nummer). Zum Beispiel 0,5 bis 0,5, 1,0 bis 1,0, 1,3 bis 1,3 usw.
Betreff: JSL zum Generieren passender Spaltendifferenz und DurchschnittWenn ich die Spalten A0.5, A1.0, A1.3, B0.5, B1.0 und B1.3 habe, woher weiß ich dann, dass ich genau (B1.0-B0.5)/(A1.0- A0.5), (B1.3-B0.5)/(A1.3-A0.5) und (B1.3-B1.0)/(A1.3-A1.0) Spalten?
Betreff: JSL zum Generieren passender Spaltendifferenz und DurchschnittVielen Dank für die geduldige Zusammenarbeit mit mir und entschuldigen Sie, dass Sie sich über die Absicht nicht zu 100 % im Klaren waren.
Für die Gleichung lautet sie immer: ( B num1 - B num2 ) / ( A num1 - A num2 )
Da wir immer den gleichen Suffixsatz zwischen der A-Gruppe und der B-Gruppe erhalten, ist es mein Ziel, alle möglichen Kombinationen innerhalb der A-Gruppe zu erhalten, die nur auf Suffixe mit höherem Wert und Suffixe mit niedrigerem Wert beschränkt werden können.
Wenn es das Skript vereinfacht, können wir alternativ den Unterschied zwischen jedem Paar finden, beispielsweise zwischen beiden (B1.0-B0.5)/(A1.0-A0.5) und (B0.5-B1.0)/(A0.5-A1.0). Auf diese Weise bleibt der Durchschnitt immer noch derselbe wie nur höher-niedriger.
Betreff: JSL zum Generieren passender Spaltendifferenz und DurchschnittHier ist meine Methode, die die gewünschten neuen Spalten erstellt.
names default to here(1);
dt=current data table();
// Set Prefixes
pre1 = "A";
pre2 = "B";
// Get all levels using Pre1 columns to find the levels
theColumnNames = dt << get column names( string, continuous );
levels = {};
For Each( {col, i}, theColumnNames,
if(word(1,col," ")==pre1,
insert into(levels,trim(substr(col,length(pre1)+1)))
)
);
// Create new columns.
// This is accomplished by creating a character string that is the JSL statement that
// is required to create the new column and it's formula
meanColsList = {};
For( i = 2, i <= N Items( levels ), i++,
For( k = 1, k <= i - 1, k++,
Eval(
Parse(
"dt << New Column( \!"" || pre2 || "/" || pre1 || " " || levels[i] || "-" || levels[k] ||
"\!", formula( (:" || pre2 || " " || levels[i] || " - :" || pre2 || " " || levels[k] || ")
/ (:" || pre1 || " " || levels[i] || " - :" || pre1 || " " || levels[k] || ") ) );"
)
);
insert into( meanColsList, ":\!"" || pre2 || "/" || pre1 || " " || levels[i] || "-" || levels[k] || "\!"n");
);
);
Eval(
Parse(
"dt << New Column( \!"" || pre2 || "/" || pre1 || " Avg\!", formula( Sum(" ||
Concat Items( meanColsList, "," ) || ") / Number(" ||
Concat Items( meanColsList, "," ) || ")));"
)
);Betreff: JSL zum Generieren passender Spaltendifferenz und DurchschnittDies kann auch einige Ideen liefern
Names Default To Here(1);
dt = Open("$DOWNLOADS/Question - Auto Col Diff and Avg.jmp");
dt << Clear Column Selection << Clear Select;
col_list = dt << Get Column Names("String");
// Get column types
col_rgx_pattern = "^(.?) (\d+.\d+)";
aa = Associative Array();
For Each({col_name}, col_list,
rgx_result = Regex(col_name, col_rgx_pattern);
If(!IsMissing(rgx_result),
parts = Words(rgx_result);
If(N Items(parts) == 2,
If(!Contains(aa, parts[1]),
aa[parts[1]] = {};
);
Insert Into(aa[parts[1]], parts[2]);
);
);
);
// Check that all different columns have same number parts (ignored in this case)
// Create combinations
ordered_num_parts = Reverse(Sort List(aa[aa << first])); // sort from largest to smallest, works in this simple case
pairs = {};
For(i = 1, i <= N Items(ordered_num_parts) - 1, i++,
For(j = i + 1, j <= N Items(ordered_num_parts), j++,
cur_pair = Eval List({ordered_num_parts[i], ordered_num_parts[j]});
Insert Into(pairs, Eval List({cur_pair}));
);
);
// Create new columns
avg_expr = Expr(Mean());
For Each({pair}, pairs,
f_expr = Substitute(
Expr(
(_last_numerator_ - _first_numerator_) / (_last_denominator_ - _first_denominator_)
),
Expr(_last_numerator_), Name Expr(AsColumn(dt, "B " || pair[1])),
Expr(_first_numerator_), Name Expr(AsColumn(dt, "B " || pair[2])),
Expr(_last_denominator_), Name Expr(AsColumn(dt, "A " || pair[1])),
Expr(_first_denominator_), Name Expr(AsColumn(dt, "A " || pair[2]))
);
Eval(EvalExpr(new_col = dt << New Column("B/A " || pair[1] || "-" || pair[2], Numeric, Continuous, Formula(
Expr(Name Expr(f_expr))
))));
Insert Into(avg_expr, Name Expr(AsColumn((new_col << get name))));
);
Eval(EvalExpr(
dt << New Column("B/A AVG", Numeric, Continuous, Formula(
Expr(Name Expr(avg_expr))
));
));Betreff: JSL zum Generieren passender Spaltendifferenz und DurchschnittVielen Dank, Jarmo. Ich habe durch dieses Beispiel so viele neue Arten der Skripterstellung gelernt. Schätze deine Hilfe.
Betreff: JSL zum Generieren passender Spaltendifferenz und DurchschnittVielen Dank, Jim, für deine Hilfe. Sehr direkt und leicht verständlich. Bin dankbar!