Iterieren durch zwei Datentabellen unterschiedlicher Größe und Vergleichen nach übereinstimmenden WertenHi,
Ich habe folgendes Problem:
- Ich habe zwei Datentabellen in separaten JMP-Dateien, von denen jede eine Spalte hat.
- Eine Tabelle ist 8 Zeilen lang, während die andere 6440 Zeilen lang ist.
- Mein Ziel ist es, jeden der Werte in der 8-Zeilen-Tabelle durchzugehen und sie mit jedem Wert in der 6440-Zeilen-Tabelle zu vergleichen, um zu sehen, ob sie übereinstimmen.
- Ich habe mich nur gefragt, wie ich das machen könnte, weil ich beide Tabellen durchlaufen möchte, aber sie haben unterschiedliche Größen. Ich dachte daran, eine verschachtelte for-Schleife zu verwenden, bin mir aber nicht sicher.
Jede Hilfe wäre willkommen.
Betreff: Durch zwei Datentabellen unterschiedlicher Größe iterieren und auf übereinstimmende Werte vergleichenIch habe in meinem vorherigen Pseudo-Codebeispiel einen kleinen Fehler gemacht,
dtShort:Compare Column[i] > dtLong:Compare Column</CODE></PRE>
<P><SPAN>Muss in der Logik umgekehrt werden, damit es funktioniert</SPAN></P>
<PRE><CODE class=" language-jsl"> dtLong:Compare Column > dtShort:Compare Column[i]
Hier ist ein funktionierendes Beispiel
Names Default To Here( 1 );
dtLong = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Create the short data table
dtShort = New Table( "Short",
New Column( "Target Age", values( {12, 16} ) ),
New Column( "Match", character, values( {"Teenager", "Young Adult"} ) )
);
// Sort the data for illustration of data not being
// in age order
dtLong << sort( by( :Name ), replace table( 1 ) );
// Create a couple of new columns in the data table
dtLong << New Column( "Kind Of Match", character );
dtLong << New Column( "Count" );
// Process the data
For( i = 1, i <= N Rows( dtShort ), i++,
// Find all rows that match the Where Clause
theRowsFound = dtLong << get rows where( dtLong:Age > dtShort:Target Age[i] );
// If some rows were found process
If( N Rows( theRowsFound ) > 0,
// Set a value in the dtLong data table with one statement
// that sets values in multiple rows
dtLong:Kind Of Match[theRowsFound] = dtShort:Match[i];
// Now set values row by row for individual rows that were found
theCount = 1;
For( k = 1, k <= N Items( theRowsFound ), K++,
dtLong:Count[theRowsFound[k]] = theCount;
theCount = theCount + 1;
);
);
);Betreff: Durch zwei Datentabellen unterschiedlicher Größe iterieren und auf übereinstimmende Werte vergleichenDanke für die schnelle Antwort.
Für den folgenden Teil:
dtLong : Compare Column
Können Sie erklären, wie ich auf alle Werte in einer Spalte zugreifen kann, ohne auf jeden Index/Index der Spalte verweisen zu müssen?
Betreff: Durch zwei Datentabellen unterschiedlicher Größe iterieren und auf übereinstimmende Werte vergleichenSo würde ich es verarbeiten.......
// This is pseudo code, but it will give you an idea of the flow
dtShort = Open( "<YOUR short="" data="https://community.jmp.com/" table="">" );
dtLong = Open( "<YOUR long="" data="https://community.jmp.com/" table="">" );
For( i = 1, i <= N Rows( dtShort ), i++,
theRowsFound = dtLong << get rows where( dtShort:Compare Column[i] > dtLong:Compare Column );
If( N Rows( theRowsFound ) > 0,
// Do your processing
);
);</YOUR></YOUR>
Betreff: Durch zwei Datentabellen unterschiedlicher Größe iterieren und auf übereinstimmende Werte vergleichenDanke für deine Antwort.
Wie würden Sie vorschlagen, das Problem anzugehen, wenn ich überprüfen wollte, ob der Wert in der 8-Zeilen-Tabelle ist größer als der Wert in der 6440-Zeilen-Tabelle?
Betreff: Durch zwei Datentabellen unterschiedlicher Größe iterieren und auf übereinstimmende Werte vergleichenIch glaube, der einfachste Weg, dies zu tun, wäre, JMP die Arbeit für Sie erledigen zu lassen.Wenn Sie die Tabellen zu einer neuen Tabelle zusammenfügen, können Sie JMP eine neue Spalte mit dem Namen Match flag erstellen lassen, die Ihnen mitteilt, ob eine Übereinstimmung gefunden wurde oder nicht
Tische==>Beitreten