<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Weiß jemand, wie man am besten ermittelt, wie oft ein Signal (ich habe 60 interessierende Signale) mit xy-Koordinatenpositionen über 10 Messungen wiederholt wird (wie oft erscheint es über 10 Messungen). Ich habe eine Liste von> 20.000 Signalen, die identifiziert wurden (alle mit unterschiedlichen xy-Positionen), aber ich möchte nur sehen, wie oft ~ 60 von ihnen wiederholt werden (jedes Signal kann NICHT die gleiche xy-Koordinate haben, damit sie sich nicht überlappen.) . Die xy-Position kann auch für das gleiche Signal um einen kleinen Betrag variieren, sodass ihre Toleranz in der xy-Position bestehen muss. Ich habe das Diskussionsforum durchsucht, ohne etwas relevantes zu finden, leiten Sie mich aber bitte zu einer entsprechenden Diskussion, falls Sie davon wissen. Vielen Dank!
etucker0 .
Lass mich sehen, ob ich es habe. Wenn ich es richtig verstehe, gibt es eine Messung und einen Ort, und Sie möchten wissen, wie viele Wiederholungen für eine Messung (mit einiger Toleranz) an einem Ort (mit einiger Entfernung) vorhanden sind. Nehmen Sie zum Beispiel die Hurricanes-Beispieldaten mit Standort- und Windgeschwindigkeitsmessungen. Wenn Sie für jede Reihe wissen möchten, wie oft ähnliche Windmessungen (in Knoten) innerhalb einer bestimmten Entfernung (Radius in KM) vorhanden sind, können Sie das folgende Skript verwenden.
Am Ende haben Sie eine Reihe von "Matching" -Messungen für jede Zeile in der Tabelle.
Alternativ können Sie Daten in zwei Tabellen vergleichen, wenn Sie eine vorgewählte Liste haben, mit der Sie vergleichen möchten.
Lassen Sie mich wissen, ob Sie danach suchen.
Globale löschen () ;
Namensvorgabe bis hier ( 1 ) ;
// Datendatei (Punkte) öffnen - dies beinhaltet die Beobachtung, die wir aktualisieren möchten
sdots = Öffnen ( "C: \ Programme (x86) \ SAS \ JMPSW \ 11 \ Samples \ Data \ Hurricanes.jmp" ) ;
Punkte = Datentabelle ( sdots ) << Teilmenge ( Probengröße ( 2000 ) ) ; // Eine kleinere Tabelle für Geschwindigkeit erstellen
Schließen ( sdots . keine speichern ) ;
// der Windmessung etwas Rauschen hinzufügen
Punkte << Neue Spalte ( "Wind" . Formel ( : Name ( "Wind (Knoten)" ) + Zufällig Normal () ) ) ;
// Eine Zählspalte einführen
Punkte << Neue Spalte ( "wiederholt" ) ;
// extrahiere den Längengrad und die Breitenwerte aus der Tabelle - als Bogenmaß
x = ( Säule ( Punkte . "Längengrad" ) << getValues ) * Pi () / 180 ;
y = ( Säule ( Punkte . "Breite" ) << getValues ) * Pi () / 180 ;
// Die Berechnungsfunktion in KM deklarieren
Haversin = Funktion ( { long1 . lat1 . long2 . lat2 . R = 6371 } .
{ Default Local } .
ein = Sünde ( ( lat1 - lat2 ) / 2 ) ^ 2 + Cos ( lat1 ) * Cos ( lat2 ) * Sünde ( ( long1 - long2 ) / 2 ) ^ 2 ;
c = 2 * Eine Lohe ( ein ^ 0,5 . ( 1 - ein ) ^ 0,5 ) ;
d = R * c ;
) ;
// Toleranz in Entfernung und Windgeschwindigkeit definieren
Entfernung = 100 ; // in km
Unterschied = 10 ; // in Knoten
Warten ( 0,01 ) ;
// führe die Funktion in den Zeilen der Tabelle aus
Zum ( ich = 1 . ich <= N Row ( Punkte ) - 1 . ich ++
z = 0 ;
Zum ( es = 1 . es <= N Row ( Punkte ) - 1 . es ++
Ob (
Haversin ( x [ ich ] . y [ ich ] . x [ es ] . y [ es ] ) < Entfernung // Bedingung für die Entfernung
& Abs ( : Wind [ ich ] - : Wind [ es ] ) < Unterschied
. // Bedingung für den Unterschied bei der Windmessung
z ++; // zähle die Übereinstimmungen
)
) ;
z -; // entferne einen, der mit sich selbst übereinstimmt.
: wiederholt [ ich ] = z ; // aktualisiere die Tabelle
) ;
// die Ergebnisse zuordnen
Graph Builder (
Systemsteuerung anzeigen ( 0 ) .
Variablen ( X ( : Längengrad ) . Y ( : Breite ) . Größe ( : wiederholt ) ) .
Elemente ( Punkte ( X . Y . Legende ( 1 ) . Jitter ( 1 ) ) ) .
SendToReport (
Versand ( {} . "Graph Builder" . FrameBox . { Hintergrundkarte ( Bilder ( "Einfache Erde" ) ) . Rasterlinienreihenfolge ( 2 ) . Referenzzeile bestellen ( 3 )} )
)
)
Hi Ron,
Entschuldigung, ich hätte klarer sein sollen. Diese Modelldaten sind für zwei Signale von NUR der 1. Messung. Es gibt also 9 weitere Wiederholungsmessungen, bei denen für diese beiden Signale die x- und y-Werte (und definitiv unterschiedliche ID-Nummern) leicht verschoben werden. Auch die Amplitude SD1 und SD2 variieren etwas. Hoffentlich hilft das.
Eine Wiederholung kann ungefähr so aussehen:
ICH WÜRDE | x | y | Amplitude SD1 | Amplitude SD2 | | | | | | |
|---|
21775 | -22285,12 | -6664,55 | 2950 | 0 |
21799 | -17723.33 | 7946.01 | 0 | 5050 |
-Eric
Hi Ron,
Hier sind einige Beispieldaten, jede der zwei Reihen sind zwei "Signale". Dabei ist zu beachten, dass sich die ID bei jedem Wiederholungsmessergebnis tatsächlich ändert (das Instrument ordnet alle Signale für jede Messung neu an, sodass ich nicht die ID verwenden kann, um bei jeder Wiederholungsmessung dasselbe Signal zu ermitteln). SD1 und SD2 sind verschiedene Messkanäle, die Daten für jedes Signal liefern. Die Position x und y für dasselbe Signal kann ein wenig variieren, wie in meinem ursprünglichen Beitrag erwähnt.
ICH WÜRDE | x | y | Amplitude SD1 | Amplitude SD2 | | | | | | |
|---|
21770 | -22281,78 | -6669,19 | 3000 | 0 |
21792 | -17728,65 | 7949.11 | 0 | 5000 |
Bestimmt das X-Y-Paar, das auf zwei Dezimalstellen gerundet ist, den "Namen" des Signals? Wenn ja, können die gerundeten Werte als Schlüssel für ein assoziatives Array verwendet werden, um das Vorkommen ähnlicher Paare zu zählen.
Anzahl = assoziatives Array ();
zählt << SetDefaultValue (0);
zählt [char (round (pi (), 2)) || "," || char (round (e (), 2))] + = 1;
show (zählt);
Zählungen = ["3.14,2.72" => 1, => 0];
Hallo etucker0 .
Wenn Sie eine kleine Datenprobe angeben (kann gefälscht sein), denke ich, ich kann Ihnen helfen. Ich arbeite selbst mit ähnlichen Daten. Die Lösung hängt jedoch davon ab, wie die Tabelle erstellt wird.