Hola a todos.Hice esta función JSL para una tarea específica, pero me preguntaba si hay una mejor manera de hacerlo.
Lo que quiero es una forma, si tiene un vector de índices, de hacer un vector indicador de un enlace específico donde el valor del elemento del vector es 1 para el índice especificado y 0 en caso contrario.P.EJ
[2, 3, 6] --> convertir a vector indicador de longitud 10.
[0, 1, 1, 0, 0, 0, 1, 0, 0, 0]
El caso de uso es para seleccionar subconjuntos de filas en una tabla de datos en función de múltiples condiciones, donde para cada condición obtengo un vector de los números de fila que cumplen la condición y quiero obtener las filas que cumplen todas las condiciones.
// 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;
);
Entonces, para el caso de uso, por ejemplo, si tengo tres condiciones, obtengo los números de fila en vectores que cumplen cada condición (v1, v2, v3), así que haría esto
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);