etucker0 ,
laisse-moi voir si je l'ai. si je comprends bien, il existe une mesure et un emplacement et vous voulez savoir combien de répétitions y a-t-il pour une mesure (avec une certaine tolérance) à un emplacement (avec une certaine distance). Prenons, par exemple, les échantillons de données sur les ouragans avec les emplacements et les mesures de la vitesse du vent. Si vous souhaitez savoir pour chaque rangée combien de fois il existe des mesures de vent similaires (en nœuds) à une certaine distance (rayon en km), vous pouvez utiliser le script suivant.
à la fin, vous aurez un certain nombre de mesures "correspondantes" pour chaque ligne du tableau.
Vous pouvez également comparer les données de deux tables si vous souhaitez comparer une liste présélectionnée.
laissez-moi savoir si c'est ce que vous recherchez.
Effacer les globes () ;
Noms par défaut jusqu'ici ( 1 ) ;
// fichier de données ouvert (points) - cela inclut l'observation que nous voulons mettre à jour
sdots = Ouvrir ( "C: \ Fichiers de programme (x86) \ SAS \ JMPSW \ 11 \ Samples \ Data \ Hurricanes.jmp" ) ;
des points = Tableau de données ( sdots ) << Sous-ensemble ( Taille de l'échantillon ( 2000 ) ) ; // faire une table plus petite pour la vitesse
Fermer ( sdots , pas de sauvegarde ) ;
// ajoute du bruit à la mesure du vent
des points << Nouvelle colonne ( "Vent" , formule ( : prénom ( "Vent (Noeuds)" ) + Aléatoire Normal () ) ) ;
// introduire une colonne de comptage
des points << Nouvelle colonne ( "répété" ) ;
// extrait les valeurs de longitude et de latitude de la table - en radians
X = ( Colonne ( des points , "Longitude" ) << getValues ) * Pi () / 180 ;
y = ( Colonne ( des points , "Latitude" ) << getValues ) * Pi () / 180 ;
// déclare la fonction de calcul en KM
haversine = Une fonction ( { long1 , lat1 , long2 , lat2 , R = 6371 } ,
{ Local par défaut } ,
une = Péché ( ( lat1 - lat2 ) / 2 ) ^ 2 + Cos ( lat1 ) * Cos ( lat2 ) * Péché ( ( long1 - long2 ) / 2 ) ^ 2 ;
c = 2 * Un bronzage ( une ^ 0.5 , ( 1 - une ) ^ 0.5 ) ;
ré = R * c ;
) ;
// définit la tolérance en distance et en vitesse du vent
distance = 100 ; // en km
différence = dix ; // en nœuds
Attendre ( 0,01 ) ;
// lance la fonction le long des lignes de la table
Pour ( je = 1 , je <= N Row ( des points ) - 1 , je ++,
z = 0 ;
Pour ( il = 1 , il <= N Row ( des points ) - 1 , il ++,
Si (
haversine ( X [ je ] , y [ je ] , X [ il ] , y [ il ] ) < distance // condition pour la distance
Et Abdos ( : Vent [ je ] - : Vent [ il ] ) < différence
, // condition pour la différence de mesure du vent
z ++; // compte les matchs
)
) ;
z -; // supprime celui qui correspond à lui-même.
: répété [ je ] = z ; // met à jour la table
) ;
// mapper les résultats
Générateur de graphes (
Afficher le panneau de configuration ( 0 ) ,
Variables ( X ( : Longitude ) , Y ( : Latitude ) , Taille ( : répété ) ) ,
Éléments ( Points ( X , Y , Légende ( 1 ) , Gigue ( 1 ) ) ) ,
SendToReport (
Envoi ( {} , "Graph Builder" , FrameBox , { Carte de fond ( Images ( "Terre simple" ) ) , Ordre de la grille ( 2 ) , Commande de ligne de référence ( 3 )} )
)
)
Salut Ron
Désolé, j'aurais dû être plus clair. Cette donnée fictive concerne deux signaux provenant SEULEMENT de la 1ère mesure. Donc, il y a 9 autres mesures répétées où, pour ces deux signaux, il y aura des valeurs légèrement décalées x et y (et des numéros d'identification certainement différents). En outre, les amplitudes SD1 et SD2 varieront également un peu. J'espère que cela pourra aider.
Une répétition peut ressembler à quelque chose comme ceci:
ID | X | y | Amplitude SD1 | Amplitude SD2 | | | | | | |
|---|
21775 | -22285.12 | -6664.55 | 2950 | 0 |
21799 | -17723.33 | 7946.01 | 0 | 5050 |
-Eric
Le couple X, Y, arrondi à, par exemple, 2 décimales, détermine-t-il le "nom" du signal? Si tel est le cas, l’utilisation des valeurs arrondies comme clé d’un tableau associatif peut constituer une approche permettant de compter les occurrences de paires similaires.
count = tableau associatif ();
comptes << SetDefaultValue (0);
comptes [char (round (pi (), 2)) || "," || char (round (e (), 2))] + = 1;
montrer (compte);
comptes = ["3.14,2.72" => 1, => 0];