JSL-Mehrfachspaltenvergleich mit einer festen Zahl mit for-Schleife und Generieren einer neuen Spalte für die AusgabeHallo JSL-Experten, ich bin ein Anfänger von JSL, ich möchte einen Vergleich mehrerer Spalten durchführen, der Spaltenname lautet Col1, Col2, Col3 usw. Ich verwende für diesen Vergleich eine For-Schleife (siehe unten für ganze Skripte), und wenn sie in die Formel fällt (siehe unten), wird 0 oder 1 ausgegeben. 1. Was ich weiß ist, wenn ich :Col1 in das Skript :Col1 einfüge, funktioniert das Skript wie folgt. 2. Was ich nicht weiß, ist, wenn ich :Col1 in Column(dt, i) ersetze, funktioniert das Skript nicht. Ich habe auch versucht, :Name, :"Name" zu verwenden, aber nichts davon funktioniert, um :Col1 zu ersetzen. Weiß jemand, wie man den mehrspaltigen Vergleich durchführt? Beispiel für die geänderten Teile: Das funktioniert gut: New Column(Name, Character, "Nominal", Formula(If( 1 > :Col1 >0, 0,1)) Das funktioniert nicht: New Column(Name, Character, "Nominal", Formula(If( 1 > :Column( dt, i ) >0, 0,1)) Beispiel für das gesamte Skript: dt1 = table1; dt = table2; For( i = 1, i < N Col( dt ) + 1, i++, Name = Column( dt, i ) << get name; If( Contains( Name, "ABCD" ), For( j = 1, j <= N Row( dt1 ), j++, GGG = Column( dt1, "GGGer" )[j]; New Column( Name, Character, "Nominal", Formula( If( 1 > :Col1 > 0, "0", "Fail" ) ) ); ); ) ); );Betreff: JSL-Mehrfachspaltenvergleich mit einer festen Zahl mit for-Schleife und Generieren einer neuen Spalte für out// Alle Bilder in eine Übersichtstabelle einfügen
Verzeichnis = Verzeichnis auswählen ();
Dateinamen = Dateien im Verzeichnis (Verzeichnis);
summary = New Table( "summary", New Column( "name", character ), New Column( "rows", numeric ) );
For( iFile = 1, iFile <= N Items ( fileNames ), iFile++,
Dateiname = Dateinamen[iFile];
Wenn ( endet mit ( Dateiname, ".JPG" ),
// dt = Open( Verzeichnis || Dateiname );
Zusammenfassung << addrows( 1 );
Zusammenfassung: Name = Dateiname;
// Zusammenfassung: Zeilen = N Zeilen ( dt );
// Schließen( dt, "nosave" );
);
);
Betreff: JSL-Mehrfachspaltenvergleich mit einer festen Zahl mit for-Schleife und Generieren einer neuen Spalte für outHallo @Stokes ,
Willkommen in der JSL-Community. Die Community sollte in der Lage sein, Ihnen bei der Lösung Ihres Problems zu helfen. Für Ihre zukünftigen Posts darf ich jedoch eine Kleinigkeit vorschlagen: Wenn Sie den Code posten, fügen Sie bitte eine der folgenden Optionen ein, die unten gezeigt werden. Dies hilft bei der Formatierung des Codes und erleichtert Community-Benutzern das Verständnis Ihres Codes und hilft bei der Beantwortung Ihrer Fragen.

Nun, da wir das aus dem Weg geräumt haben, sehen wir uns an, wie Sie Ihr Problem lösen können:
Wenn ich deine Frage richtig verstehe -
1. Wie vergleiche ich Spalten in einer Datentabelle mit einem beliebigen Parameter?
2. Warum ersetzt eine Spaltenreferenz ( Col = Column(dt,i); ) nicht direkt einen Spaltennamen (:Col1) in einem Funktionsaufruf ?
Ich werde versuchen, diese Fragen so gut wie möglich zu beantworten. Bitte lassen Sie es mich wissen, wenn ich in meiner Antwort nichts anspreche.
Clear Globals(); Clear Log();
// Open Sample Data
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Acquire Column Names
ColNames = dt1 << Get Column Names("String");
// Define a searchword and look for it in column names
DesiredColsPos1 = list();
DesiredColsPos2 = List();
KeyWord1 = "age";
for(i = 1 , i <= N Cols(dt1), i++,
If(Contains(ColNames[i],KeyWord1),
Insert Into(DesiredColsPos1,i);
);
);
// Display Result
Show(DesiredColsPos1);
// Alternatively
for(i = 1 , i <= N Cols(dt1), i++,
Col = Column(dt1,i); // This gets a reference for the column
Show(Col);
ColName = Col << Get Name;
If(Contains(ColName,KeyWord1),
Insert Into(DesiredColsPos2,i);
);
);
// Display Result
Show(DesiredColsPos2);