Salut,
J'essaie d'apprendre comment passer un vecteur à la clause where de la commande de filtrage des données. J'essaie de comprendre cela parce que je n'arrive pas à obtenir une déclaration moins que égale à la déclaration dans la clause where. Cependant, passer où ((nom_colonne == {1,2}) fonctionne correctement. Il semble que cela devrait être simple, mais cela finit par s’avérer bogué et je ne peux pas comprendre la syntaxe appropriée. Exemple de code ci-dessous.
GE_Table = Current Data Table();
GE_Table << DataFilter(Add Filter(
columns(:SUSPECT_COUNT,:SYMPTOM_COUNT),
Where( :SYMPTOM_COUNT == 1),
Where( :SUSPECT_COUNT <=2 ), //this doesn't work but Where( :SUSPECT_COUNT == {1,2}) does...?????
show window(0)
)
);Des idées?
Merci pour les réponses. Le passage de type de colonne à continu était le correctif le plus simple pour moi, mais les exemples sont utiles pour afficher davantage d'exemples de code. Merci encore!
Je pense que vous rencontrez un problème de type modélisation.
La colonne suspect_count est nominale, n'est-ce pas? Depuis sa valeur nominale, lui donner une liste de valeurs fonctionne. (C’est une liste car elle est entre accolades.) Si la colonne était numérique continue, votre script fonctionnerait.
Jetez un coup d'œil à ce bout de script.
L'âge est numérique, et dans mon filtre, j'ai choisi 12 et 14 (accolades, délimitées par des colonnes). Mais alors le poids est numérique continu, donc l'inégalité, "<= 100", fonctionne. Un moyen rapide de trier la syntaxe consiste à créer manuellement le filtre, puis à partir du menu du triangle rouge dans le filtre de lignes, enregistrez le script dans le Presse-papiers ou la fenêtre de script.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Data Filter(
Add Filter(
columns( :weight, :age ),
//Where( :weight >= col minimum(:weight) & :weight <= 100 ),
Where( :weight <= 100 ),
Where( :age == {12, 14} ),
Display( :age, Blocks Display )
)
);
note sur la ligne commentée ("//"): Ceci est juste pour montrer que la valeur peut être quelque chose de la colonne (ou n'importe quel élément qui évalue)
Alors, pour la question un peu plus longue, "Comment puis-je passer des valeurs dans une liste et ensuite utiliser la liste dans le filtre?" (s'il vous plaît pardonner l'hommage paraphrasant)
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize( age_levels = By( :age) );
show(age_levels);
parse(age_levels[2]);//second thing in the list of age_levels, returns a number
age_list={};//empty list
insert into(age_list,parse(age_levels[2]));//second thing in the list of age_levels, "parse" returns a number not a quoted string
insert into(age_list,parse(age_levels[4]));//add 4th thing
show(age_list);//look at the log to see the values
dt << Data Filter(
Add Filter(
columns( :weight, :age ),
Where( :weight <= 100 ),
Where( :age == age_list ),//note the list gets evaluated here
Display( :age, Blocks Display )
)
);
Ce script peut être un peu plus facile à lire dans une fenêtre de script JMP.
Le problème est que la colonne sur laquelle vous filtrez n'est pas une colonne continue, mais plutôt une colonne ordinale ou nominale. Ainsi, la méthodologie différente pour le filtre.