<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe vor Monaten versucht zu fragen, aber ich war so verloren, dass meine Erklärung inkohärent war. Dann wurde ich auf Anweisung weggezogen, bevor ich erklären konnte. Hier ist mein hoffentlich besserer Versuch zu erklären, was ich will und was nicht funktioniert.
Was ich mache: Ich erstelle ein Skript, das ein großes Dataset verwendet, das sich ständig ändert, obwohl die Spaltennamen dies nie tun werden. Ich muss verschiedene Zusammenfassungen und Formeln ausführen. Meine Strategie besteht darin, einige Übersichtstabellen zu erstellen, um festzustellen, welche Datenkategorien ich habe. Das folgende Beispiel ist ein großartiges, simples Beispiel für das, was ich versuche. Es verwendet die große class.jmp-Datei und sucht nach den Sexkategorien. Nachdem die Kategorien "M" und "F" bekannt sind, werden für jede Variablenkategorie neue Spalten erstellt. In diesem Fall heißt es: Beispiel-F und dann Beispiel-M und in jeder neuen Spalte wird eine Formel angegeben, die auf andere verweist Spalten und führt Zeilenberechnungen aus, die auf die neu erstellte Spalte verweisen.
Mein Problem: Ich kann die Spaltenreferenzen nicht zum Laufen bringen, insbesondere die Variable, die für dieselbe Spalte aufgerufen wird, unter der die Formel erstellt wird . Siehe unten
//Start
try (close (dt, No save));
try (close (dt_categories, Kein Speichern));
try (close (dt_data, No save));
clear globals ();
dt = Open (" Pfad \ big_class.jmp ");
// Erzeugt eine Liste von Geschlecht und ersetzt Namen. Keine Probleme hier.
dt_categories = dt << Zusammenfassung (
Gruppe (: SEX),
Statistikspaltennamenformat ("Spalte"),
Name der Ausgabetabelle ("Gender_Summary"));
genderlist = dt_categories: Geschlecht << Werte erhalten;
gendercount = nrows (dt_categories);
dt_data = dt << Split (Aufteilen nach (: SEX), Split (: HEIGHT), Ausgabetabelle ("Split_Big_Class"), Restspalten (Alles löschen)
);
Für (i = 1, i <= Geschlechtszahl, i ++,
// oldcol wird aus der genderlist erstellt, stellt jedoch die Spaltennamen in den neuen dt_data dar und meine Formel verweist darauf. Keine Probleme hier.
oldcol = Spalte (Genderliste );
// Ich muss die neue Spalte anders benennen als die vorhandene (alte) Spalte, andernfalls erhöht Jmp die Namen und es scheint, als würde es wirklich meine Spaltennamenreferenzen durcheinander bringen. Keine Probleme hier, denke ich nicht.
newcolname = ("Example-" || genderlist );
// Als Nächstes habe ich versucht, die Spalte zuerst zu erstellen, sodass die nachfolgende Formel auf eine bereits vorhandene Spalte verweisen kann. Ich weiß jedoch nicht, ob dies erforderlich ist.
newcol = dt_data << Neue Spalte ( newcolname numerisch);
// Nächste Zeile ist eine Funktionsformel, verwendet meine Variablen jedoch nicht als Referenz. Sie können sehen, was ich versuche.
// newcolname << Formel (If (Row () == 1, 1 +: F,: Name ("Beispiel-F") [Row () - 1, Empty ()] + 1));
// Nächste Zeile ist die nicht funktionierende Formel, da ich versucht habe, meine Variablen in die obige Funktionsformel einzufügen. Hier wirft es Fehler.
newcolname << Formel (If (Row () == 1, 1 +) oldcol . newcol [Zeile () - 1, leer ()] + 1));
);
Irgendwelche Vorschläge? Ich bin relativ neu im Scripting und versuche zu lernen, während ich gehe. VIELEN DANK!!!!!
Entschuldigung, ich habe Ihre Zeile vermisst, die zeigt, was Sie produzieren wollten.
Versuche dies:
dt1 = Open ("$ SAMPLE_DATA / Big Class.JMP");
zusammenfassen (categories = by (: SEX));
dt2 = dt1 << Split (Split By (: SEX), Split (: HEIGHT), Ausgabetabelle ("Split_Big_Class"), Restspalten (Drop All));
für (i = 1, i <= nItems (Kategorien), i ++,
dt2 << newColumn ("Beispiel-" || Kategorien Charakter Formel(
Wenn (Row () == 1,
1 + asColumn (Kategorien )
asColumn ("Beispiel-" || Kategorien ) [Zeile () - 1] + 1
);
);
);
);
Können Sie uns bitte in Worten erklären, was Sie mit Ihrer Formel machen wollen?
Es sieht so aus, als würden Sie versuchen, Werte basierend auf den vorherigen Zeilendaten zu erstellen - während Sie fortfahren?
Wenn Sie genau auf das Endergebnis eingehen, wäre dies mit einem Beispiel möglich. Das wäre großartig.