Tengo un gran conjunto de datos con alrededor de 30 columnas de entradas financieras con fecha de vencimiento. Quiero saber qué columna es la primera con un valor distinto de cero (a ninguna columna le faltan datos, pero quiero obtener la primera columna con una entrada de valor positivo). He adjuntado un pequeño ejemplo con cuatro columnas de tiempo y una quinta columna que muestra en qué me gustaría obtener mi fórmula. Si faltaban los valores cero, podría usar la función Número (número de valores no perdidos) para obtener lo que quiero, pero cuando no faltan datos ni valores cero, no puedo averiguar cómo automatizar la identificación de la columna. El primero que tiene un valor positivo. Cualquier idea será apreciada.
@dale_lehman ,
Un par de pensamientos y soluciones aquí a su problema.
Enfoque 1: continuar con JSL de la solución anterior y agregarlo a la tabla
dt = Current Data Table();
Mat = dt << Get As Matrix;
DesList = list();
for(i = 1 , i <= N Rows(Mat), i++,
Pos = Min(Loc(Mat[i,0]));
Insert Into(DesList,Pos);
);
dt << New Column("Test",Numeric,Continuous,<< Set Values(DesList));
// Please note that there will be "." missing value if none of your columns have a positive value
Enfoque 2: escriba la fórmula en JSL y aplíquela a la tabla, una pequeña rotonda, pero escalable, un ejemplo antiguo pero relevante, se editará más adelante en el día
for(i = 1, i <= N Items(InvColNames), i++,
If(i == 1,
Stmt = ":" || InvColNames[i] || " >= 1 &" || ":" || InvColNames[i] || " <= InvLimit" ;
,
Stmt = Stmt || " & " || ":" || InvColNames[i] || ">= 1 &" || ":" || InvColNames[i] || " <= InvLimit" ;
) ;
);
Eval( Parse( Eval Insert("\[ dt_Inp << New Column("Status_Inv",Numeric,Continuous,Formula(^Stmt^)); ]\" ) ) );
Enfoque 3: hacer manualmente algo como esto, no soy un fanático de esto, pero parece que no puedo encontrar una alternativa por mi cuenta; tal vez otros tengan mejores pensamientos
If(
:Column 1 > 0, "Column 1",
:Column 2 > 0, "Column 2",
"No Positive"
)
Gracias, esto de hecho calcula lo que quiero, pero necesito un poco más de ayuda (debido a mis habilidades JSL casi inexistentes). Puedo ver los cálculos correctos en la ventana de registro, pero cuando ingreso su secuencia de comandos en la ventana de fórmula para una nueva columna, obtengo valores en blanco. La advertencia que recibo se refiere a la función Show (). ¿Cómo consigo que los cálculos resultantes aparezcan en la nueva columna de fórmula?
@dale_lehman ,
Tal vez intente esto?
dt = Current Data Table();
Mat = dt << Get As Matrix;
DesList = list();
for(i = 1 , i <= N Rows(Mat), i++,
Pos = Min(Loc(Mat[i,0]));
Insert Into(DesList,Pos);
);
Show(DesList);