Salut tout le monde.J'ai créé cette fonction JSL pour une tâche spécifique, mais je me demandais s'il existait un meilleur moyen de le faire.
Ce que je veux, c'est un moyen, si vous avez un vecteur d'indices, de créer un vecteur indicateur d'un lien spécifié où la valeur de l'élément vectoriel est 1 pour l'indice spécifié et 0 sinon.PAR EXEMPLE
[2, 3, 6] --> convertir en vecteur indicateur de longueur 10.
[0, 1, 1, 0, 0, 0, 1, 0, 0, 0]
Le cas d'utilisation consiste à sélectionner des sous-ensembles de lignes dans une table de données en fonction de plusieurs conditions, où pour chaque condition, j'obtiens un vecteur des numéros de lignes qui remplissent la condition, et je veux obtenir les lignes qui remplissent toutes les conditions.
// Loc Inverse Function
// This function converts a vector of positive integers (locvals) into an
// indicator vector of a specified length, n, with the values
// v[I] = 1 if I is in locvals, and 0 otherwise
// example
// Loc Inverse(6, [1,3])
// returns
// [1, 0, 1, 0, 0, 0]
*/
Loc Inverse = Function( {n, locvals},
v = J( n, 1, 0 );
v[locvals] = 1;
v;
);
Donc, pour le cas d'utilisation, par exemple, si j'ai trois conditions, j'obtiens les numéros de ligne dans les vecteurs qui remplissent chaque condition (v1, v2, v3), donc je ferais ceci
dt=current data table();
Loc Inverse = Function( {n, locvals},
v = J( n, 1, 0 );
v[locvals] = 1;
v;
);
// ...
// code to get v1, v2, v3
// ...
rowindicator1=Loc Inverse(n rows(dt), v1);
rowindicator2=Loc Inverse(n rows(dt), v2);
rowindicator3=Loc Inverse(n rows(dt), v3);
meet_all_conditions_indicator = rowindicator1 & rowindicator2 & rowindicator3;
rows_that_meet_all_conditions = Loc(meet_all_conditions_indicator);