Sélectionnez une plage de lignes autour de la date de début de la saisie utilisateurJe travaille avec un vaste ensemble de données s'étalant sur plusieurs années, qui peut être simplifié en deux colonnes nommées "ID" et "Test_date" . La date est au format « m/d/y » et le tableau de données est trié par ordre chronologique. Je souhaite sélectionner toutes les lignes dont la date du test se situe dans un délai d'un an (avant ou après) la date de test spécifiée par l'utilisateur, puis supprimer toutes les autres lignes de la table de données.
Voici ce que j'ai essayé jusqu'à présent. J'ai créé les limites de date supérieure et inférieure pour un ID d'entrée, mais je ne parviens pas à sélectionner les dates dans cette plage à l'aide de selectwhere(). Au lieu de cela, j'obtiens l'erreur "L'argument de SelectWhere n'a pas été évalué comme vrai ou faux, c'est [0]... ". Toute aide à ce sujet serait très appréciée.
dt << current data table();
dt << new column("T_YEAR", numeric, continuous, set each value(:Test_date / (365*86400)));
setpoint = ;//user specified numeric value
set_row= dt << get rows where(:ID == setpoint);
set_date = dt:T_YEAR[set_row] ;
set_min = (set_date - 1);
set_max = (set_date + 1);
dt << select where(:T_YEAR >= set_min & :T_YEAR <= set_max )
<< invert row selection
<< delete rows;Re : Sélectionner une plage de lignes autour de la date de début de la saisie utilisateur@courbé , il semble que votre réponse et la mienne se chevauchent.
Cela fonctionne pour moi.
dt=open("$SAMPLE_DATA\TechStock.jmp");
set_date=datemdy(12, 15, 2000);
set_min = (set_date - In Days(5));
set_max = (set_date + In Days(5));
dt << select where(:Date >= set_min & :Date <= set_max )
<< invert row selection
<< delete rows;
Notez que j'ai dû passer à In Days() au lieu d'années uniquement parce que les exemples de données ne contenaient pas plus d'un an, mais à part cela, cela devrait fonctionner pour vous.
Re : Sélectionner une plage de lignes autour de la date de début de la saisie utilisateurIl existe de nombreuses façons de procéder.
Vous pouvez utiliser le Dans des années() fonction pour renvoyer la valeur datetime JMP pour un certain nombre d'années, ou la Incrément de date() fonction pour ajouter ou soustraire un nombre d’années.
Vous pourriez également obtenir le Année() de la date fixée, ajoutez 1 à cela et utilisez le Date MJM() fonction pour vous donner la valeur de date JMP.
set_min = (set_date - In Years(1));
set_max = (set_date + In Years(1));
//or
set_min = Date Increment(set_date, "Year", -1, "actual");
set_max = Date Increment(set_date, "Year", 1, "actual");
//or
set_min = Date MDY( Month( set_date ), Day( set_date ), Year( set_date ) - 1 );
set_max = Date MDY( Month( set_date ), Day( set_date ), Year( set_date ) + 1 );
Re : Sélectionner une plage de lignes autour de la date de début de la saisie utilisateurOui, c'est essentiellement ce que j'ai fait en créant une nouvelle colonne "T_YEAR" avec la date convertie en années à l'aide de Test_date/ (365*86400). J'ai essayé les deux et cela fonctionne dans les deux cas. Le problème semble se produire lors de l'utilisation des variables set_min et set_max dans selectwhere() pour rechercher toutes les lignes entre ces valeurs.
Re : Sélectionner une plage de lignes autour de la date de début de la saisie utilisateurLes dates et heures sont en unités de secondes, vous devrez donc faire quelque chose comme ceci :
set_min = (set_date - (1 * 365 * 24 * 3600));
set_max = (set_date + (1 * 365 * 24 * 3600));