Bedingte Anweisungen, Aktion und Löschen von Spalten<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo zusammen,
Ich habe ein Problem mit einem JSL-Skript und habe die Dokumentation, Bücher und Benutzerforen nach einer Antwort durchforstet.
Ich habe ein Skript geschrieben, das eine bedingte Anweisung in JSL enthält, und eines der „Ergebnisse“ besteht darin, eine Aktion wie das Löschen einer Zeile auszuführen.Kann dies in einer bedingten Anweisung erfolgen?
Verwenden wir diesen Beispielcode:
NE3=3;
NE4=5;
/* Diese Variablen können unterschiedliche Werte annehmen. */
Wenn (NE3==NE4,
NewNum = NE3,
NewNum = Index (NE3, NE4)
);
Wenn (NewNum == 0,
Drucken („Keine Löschung“),
Aktuelle Datentabelle () << Spalte löschen (NewNum)
);
Wie Sie sehen oder erraten können, kann ich keine Spalten löschen.Noch wichtiger ist, dass ich die erste bedingte Anweisung verwendet habe, weil ich wollte, dass sie einen Bereich oder einen einzelnen Wert erstellt.
Ich bin mir jedoch nicht sicher, was ich mit 0 als Wert machen soll, da JMP nichts löschen kann, was nicht existiert (auch bekannt als Spalte 0).Irgendwelche Vorschläge werden sehr geschätzt!
Danke vielmals,
K
Betreff: Bedingte Anweisungen, Aktionen und Spalten löschenIndex() ergibt einen Spaltenvektor, daher die doppelten Klammern. Versuchen Sie, die Matrix zu transponieren.
DC_Liste1 = Als Liste ( transponieren ( Index ( DC1 , DC2 ))) ;
DC_Liste2 = Als Liste ( transponieren ( Index ( DC3 , DC4 ))) ;
Betreff: Bedingte Anweisungen, Aktionen und Spalten löschenIch habe mehr mit den bedingten Anweisungen und Löschspalten gearbeitet.Ich habe noch etwas damit herumgespielt, und ich verstehe, was Sie damit meinen, Spalten zu löschen, die entweder einen einzelnen Spaltennamen oder Index oder eine Liste von Spaltennamen oder Indizes verwenden.Nachdem ich jedoch den angegebenen Code durchlaufen und nur die Aktion „Spalte löschen“ isoliert und eine Liste von Indizes erstellt habe, kann ich immer noch nicht alle Indizes für Spalten löschen.Zum Beispiel:
Nehmen wir an, das dt hat 13 Spalten, und ich möchte die ersten drei (1-3) und die letzten beiden (12-13) löschen.
DC1 = 1 ;
DC2 = 3 ;
DC3 = 12 ;
DC4 = 13 ;
DC_Liste1 = Als Liste ( Index ( DC1 , DC2 )) ;
DC_Liste2 = Als Liste ( Index ( DC3 , DC4 )) ;
DC_Liste3 = DC_Liste1 || DC_Liste2 ;
Aktuelle Datentabelle () << Spalten löschen ( dc_list3 ) ; /* löscht nur die erste Spalte b/c, das ist der Wert der ersten Variablen. */
/* Auch nur eine der erstellten Listen zu löschen, schlägt immer noch fehl. */
aktuelle Datentabelle () << Spalten löschen ( dc_list1 ) ; /* löscht nur die erste Spalte b/c, das ist der Wert der ersten Variablen. */
Zeigen ( dc_list1 ) ; /*dc_list1 = {{1, 2, 3}}; */
Zeigen ( dc_list3 ) ; /* dc_list3 = {{1, 2, 3}, {12, 13}}; */
Ich weiß, dass die Funktion "Als Liste" die Matrix in eine Liste umwandelt, aber ich verstehe nicht, warum sie doppelte geschweifte Klammern gibt.Ich denke, das ist es, was meinen Code dafür abwirft.Ich habe unzählige Kombinationen vergeblich versucht.Irgendwelche Gedanken/Vorschläge/Hilfe?Vielen Dank im Voraus für Ihre Hilfe!
Betreff: Bedingte Anweisungen, Aktionen und Spalten löschenÜberhaupt keine Kritik!Ich habe darum gebeten.Ich sehe dies als Hilfestellung für mich (und die JMP-Community) mit Hinweisen und das Durcharbeiten der feineren Details.Ich habe viel gelernt, und ich weiß es zu schätzen, dass Sie sich die Zeit genommen haben, meine Fragen zu beantworten und mir diese wichtigen Feinheiten beizubringen.
Betreff: Bedingte Anweisungen, Aktionen und Spalten löschenSie können eine Anweisung oder 1000 in einer bedingten Anweisung ausführen.Sie können umsetzbare Anweisungen in einer bedingten Anweisung ausführen, wie mein Code zeigt.
Ihre Syntax war in einigen Punkten falsch.
Wenn (NE3==NE4,
NewNum = NE3,
NewNum = Index (NE3, NE4)
);
Das Ergebnis dieser IF-Anweisung ist, dass newnum entweder eine Zahl oder eine Matrix ist.Das ist in Ordnung, aber vielleicht etwas verwirrend, da newnum für zwei verschiedene Arten von Werten (Zahl und Matrix) verwendet wird.Dies führt jedoch zu Problemen mit der nächsten IF-Anweisung, wie unten gezeigt.
Wenn (NewNum == 0,
Drucken („Keine Löschung“),
Aktuelle Datentabelle () << Spalte löschen (NewNum)
);
Hier liegt wirklich das Problem.Newnum ist nur 0, wenn NE3 und NE4 0 sind. Wenn Sie eine Matrix aus der vorherigen IF-Anweisung erhalten (wenn NE3 nicht gleich NE4 ist), dann macht der Vergleich von NewNum mit 0 keinen Sinn.Schließlich funktioniert Ihre Anweisung zum Löschen von Spalten nur, wenn Newnum eine Ganzzahl oder eine Liste ist.Daher ist die AS LIST-Anweisung unerlässlich.
Ich hoffe, das hilft - dies ist als konstruktive Kritik gedacht.
Ich hatte viele Schwierigkeiten, als ich zum ersten Mal JSL lernte, besonders mit der IF-Anweisung!Ich habe einen Stil entwickelt, der Kommentare enthält, die zeigen, wo sich die THEN- und ELSE-Teile der Anweisung befinden.Zum Beispiel:
wenn ( Zeit_Wahl == 1 ,
// dann
date_clause = "Aktuell" ;
fall_liste = { 1 , 2 , 3 , 4 } ;
// anders
,
date_clause = "kumulativ" ;
fall_liste = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ;
) ;
Betreff: Bedingte Anweisungen, Aktionen und Spalten löschenDanke für Ihre Hilfe!Ich schätze es wirklich.Eine Frage, die für die bedingte Anweisung von zentraler Bedeutung ist: Können Sie in einer bedingten Anweisung Aktionen durchführen (auch bekannt als Spalten, Zeilen, dt löschen und/oder hinzufügen)?Ich verstehe nicht, warum der Code die angegebene(n) Spalte(n) nicht gelöscht hat.Lag es nur daran, dass mir die Funktion as list in meiner Beispielanweisung fehlte? Oder war meine Syntax ausgeschaltet?Ich lerne immer noch alle Besonderheiten von Bedingungen in JSL, und ich sehe, dass Sie Semikolons verwendet haben, um einige Ausdrücke zusammenzukleben.Danke noch einmal!
Betreff: Bedingte Anweisungen, Aktionen und Spalten löschenDas ist ein wenig knifflig.Spalten löschen nimmt entweder einen einzelnen Spaltennamen oder Index oder a aufführen von Spaltennamen oder Indizes.Dieses Programm wird es tun.Beachten Sie das ALS LISTE Funktion, die eine Matrix in eine Liste umwandelt:
NE3 = 3 ;
NE4 = 5 ;
/* Diese Variablen können unterschiedliche Werte annehmen. */
dt = aktuelle Datentabelle () ;
nc = ncols ( dt ) ;
wenn ( ne3 > 0 & ne3 <= nc & ne4 > 0 & ne4 <= nc ,
Wenn ( NE3 == NE4 ,
dt << Spalte löschen ( ne3 ) ;
,
neue Liste = als Liste ( Index ( NE3 , NE4 )) ;
dt << Spalte löschen ( neue Liste ) ;
) ;
) ;