Sélectionnez Où : vous devez sélectionner parmi la sélection actuelle dans JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Je voudrais sélectionner des lignes dans un ensemble de données dans lequel j'ai plusieurs conditions, mais au lieu d'utiliser une seule instruction selectwhere avec "et", je souhaite parcourir mes conditions une par une, en sélectionnant dans la sélection actuelle. C'est très simple dans la fenêtre de sélection où (utilisez "sélectionner dans la sélection actuelle"). Comment puis-je faire cela en JSL ?
Par exemple, j'ai une liste de noms de colonnes cnames = {"Col1", "Col2", "Col3"} et une liste de valeurs cspecs = {"a", "b","c} et je souhaite sélectionner le lignes de ma table de données où Col1 = a, Col2 = b et Col3 = c. Je vais parcourir les éléments de cnames et lui dire de sélectionner à chaque fois dans la sélection actuelle. Merci!
dt<<
sélectionnez où (en tant que colonne (cnames )==cspecs )
Re : Sélectionner où : besoin de sélectionner parmi la sélection actuelle en JSLJ'essaie de travailler ce code que j'ai écrit sur la base du script ici. Les colonnes de diagnostic sont des colonnes de caractères et ce code ne fonctionne pas. Fondamentalement, le tableau comporte trois colonnes, chacune avec des codes CIM. Je souhaite sélectionner les cas où cela correspond aux codes ICD. Il doit s'agir de n'importe quelle colonne correspondant à n'importe quel code ICD, d'où la boucle for imbriquée. Le code non commenté fonctionne, mais la chaîne Select n'a pas de guillemets et c'est probablement pourquoi il ne fonctionne pas. Comment puis-je réparer cela?
dt = Open( "\Main.jmp" );
colnames = {"Diagnosis 1", "Diagnosis 2", "Diagnosis 3"};
ICDcodes = { "7731", "7626", "V3001", "V3000"};
tblname = "Subset.jmp";
/*
dt << Select Where(
:Diagnosis 1 == "V3001",
Current Selection( "extend" )
);*/
select_string = "";
For (i = 1, i <= N Items(colnames), i++,
For (j = 1, j <= N Items(ICDcodes), j++,
if (select_string == "",
// then
// select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]);
select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]) ;
// else
,
select_string = select_string || " | " ||
":" || colnames[i] || " == " || char(ICDcodes[j]);
);
);
);
select_string = "dt << select where(" || select_string || ")";
eval(parse(select_string));
print(select_string);
// Create a subset table with GA <32 weeks.
dt << Subset( Output Table( tblname ), Selected Rows( 1 ), selected columns( 0 ) );
dt2 = data table(tblname);
dt2 << save();
//dt << clear select;Re : Sélectionner où : besoin de sélectionner parmi la sélection actuelle en JSL
To select a row without deselecting a previously selected row, combine << Select Where with
<< Select Where and the current selection("extend") argument. This is an alternative to
using an OR statement.
dt << Select Where( age == 14 );
dt << Select Where( sex == "F", current selection("extend"));
très pointu,
Je ne sais pas d'où vient la syntaxe que vous montrez.Le guide de script JMP 12.1 et la documentation en ligne actuelle contiennent le texte correct, comme indiqué ci-dessus.
Merci.
Wendy
Re : Sélectionner où : besoin de sélectionner parmi la sélection actuelle en JSLPouvons-nous mettre cela à jour dans le guide de script ?
//Guide de script page 336
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << Sélectionnez Où (âge < 15 & sexe == "F" );
//ou
dt << Sélectionnez Où ( age == 14 );
dt << Étendre la sélection où ( sexe == "F" ); //ne fait rien
attendez (10);
dt << Select Where( sex == "F", Sélection actuelle ("étendre")); // étend la sélection
Re : Sélectionner où : besoin de sélectionner parmi la sélection actuelle en JSLJMP 12 propose une nouvelle option pour Select Where() qui vous permet de spécifier s'il faut étendre, restreindre ou effacer la sélection actuelle. La syntaxe est la suivante :
dt << Select Where( condition, );
L'exemple suivant montre l'extension de la sélection actuelle.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :Age == 14 );
Wait( 1 ); //For demonstration purposes
dt << Select Where(
:sex == "M",
Current Selection( "extend" )
);
J'espère que cela pourra aider!
Wendy
Re : Sélectionner où : besoin de sélectionner parmi la sélection actuelle en JSLUne boucle For devrait être aussi rapide sinon plus rapide qu'une clause Where - mais "For Each Row" est horriblement lent - utilisez plutôt For (i=1,i<=NRows(dt),,i++
Re : Sélectionner où : besoin de sélectionner parmi la sélection actuelle en JSLJe cherchais une solution à peu près au même problème, et c'est vraiment très astucieux.Je ne sais pas pourquoi je n'ai pas pensé à créer une chaîne de texte pour l'évaluer avant...
Sélectionnez Où : vous devez sélectionner parmi la sélection actuelle dans JSLMerci!J'ai eu un peu de mal avec les colonnes de caractères et numériques, mais cela fonctionne et c'est une grande amélioration en termes de vitesse par rapport à là où j'étais.
Sélectionnez Où : vous devez sélectionner parmi la sélection actuelle dans JSLIl est probablement plus efficace de faire SELECT WHERE en même temps.Je crée tout le temps des instructions de sélection dynamique, puis j'utilise eval(parse()) pour les exécuter.Voici l'exemple de MS modifié pour effectuer la sélection où en une seule fois.
dt = Ouvrir ( "$ENGLISH_SAMPLE_DATA/Grande Classe.jmp" ) ;
noms c = { "âge" , "hauteur" , "poids" } ;
spécificationsc = { 15 , 62 , 104 } ;
chaîne_sélection = "" ;
Pour ( je = 1 , je <= N articles ( noms c ) , je ++,
si ( chaîne_sélection == "" ,
// alors
chaîne_sélection = ":" || noms c [ je ] || " == " || carboniser ( spécificationsc [ je ]) ;
// autre
,
chaîne_sélection = chaîne_sélection || " & " ||
":" || noms c [ je ] || " == " || carboniser ( spécificationsc [ je ]) ;
) ;
) ;
chaîne_sélection = "dt << sélectionner où(" || chaîne_sélection || ")" ;
évaluer ( analyser ( chaîne_sélection )) ;
imprimer ( chaîne_sélection ) ;
Sélectionnez Où : vous devez sélectionner parmi la sélection actuelle dans JSLMerci, cela va aider. J'avais fait un "pour chaque ligne" pour contourner ce problème et cela avait tué mes performances. Votre suggestion accélérera les choses.
Sélectionnez Où : vous devez sélectionner parmi la sélection actuelle dans JSLOn pourrait utiliser une liste de lignes actuellement sélectionnées dans le cadre de la condition de Select Where(). La liste peut être mise à jour à chaque itération comme dans l'exemple ci-dessous.
dt = Ouvrir ( "$ENGLISH_SAMPLE_DATA/Grande Classe.jmp" ) ;
noms c = { "âge" , "hauteur" , "poids" } ;
spécificationsc = { 15 , 62 , 100 } ;
dt << sélectionner toutes les lignes ;
Pour ( je = 1 , je <= N articles ( noms c ) , je ++,
lignes_sélectionnées = dt << obtenir les lignes sélectionnées ;
dt << sélectionner où (
Et (
Comme colonne ( noms c [ je ] )[] < spécificationsc [ je ] ,
Contient ( lignes_sélectionnées , Rangée () ) > 0 )
)
) ;