Ho un grande set di dati con circa 30 colonne di voci finanziarie datate. Voglio sapere quale colonna è la prima con un valore diverso da zero (nessuna colonna contiene dati mancanti, ma voglio ottenere la prima colonna con un valore positivo). Ho allegato un piccolo esempio inventato con quattro colonne temporali e una quinta colonna che mostra ciò che mi piacerebbe che la mia formula producesse. Se mancassero i valori zero, potrei usare la funzione Numero (numero di valori non mancanti) per ottenere quello che voglio, ma quando non ci sono dati mancanti e valori zero, non riesco a capire come automatizzare l'identificazione di quale colonna è il primo che ha un valore positivo. Qualsiasi idea sarà apprezzata.
@dale_lehman ,
Un paio di pensieri e soluzioni qui per il tuo problema.
Approccio 1: continuare con JSL dalla soluzione precedente e aggiungerlo alla tabella
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
Approccio 2: Script la formula in JSL e applicala al tavolo - una piccola rotatoria - ma scalabile - un vecchio ma rilevante esempio - si modificherà più tardi nel corso della giornata
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^)); ]\" ) ) );
Approccio 3: Manualmente fare qualcosa del genere - non è un fan di questo, ma non riesco a trovare un'alternativa da solo - forse altri avranno pensieri migliori
If(
:Column 1 > 0, "Column 1",
:Column 2 > 0, "Column 2",
"No Positive"
)
Grazie - questo calcola davvero quello che voglio, ma ho bisogno di un po 'più di aiuto (a causa delle mie quasi inesistenti capacità JSL). Riesco a vedere i calcoli corretti nella finestra del registro, ma quando inserisco il tuo script nella finestra della formula per una nuova colonna, ottengo dei valori vuoti. L'avviso che mi riguarda riguarda la funzione Show (). Come faccio a visualizzare i calcoli risultanti nella nuova colonna della formula?
@dale_lehman ,
Forse provarlo?
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);