J'ai un grand ensemble de données avec environ 30 colonnes d'entrées financières datées.Je veux savoir quelle colonne est la première avec une valeur différente de zéro (aucune colonne n'a de données manquantes, mais je veux obtenir la première colonne avec une entrée de valeur positive).J'ai joint un petit exemple inventé avec quatre colonnes de temps et une cinquième colonne montrant ce que j'aimerais que ma formule aboutisse.Si les valeurs zéro manquaient, je pourrais utiliser la fonction pour Number (nombre de valeurs non manquantes) pour obtenir ce que je veux, mais lorsqu'il n'y a pas de données manquantes et de valeurs nulles, je ne peux pas comprendre comment automatiser l'identification de la colonne est le premier qui a une valeur positive.Toutes les idées sont les bienvenues.
@dale_lehman ,
Quelques réflexions et solutions ici à votre problème.
Approche 1 : Continuer avec JSL de la solution précédente et l'ajouter au tableau
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
Approche 2 : Scripter la formule en JSL et l'appliquer au tableau - un petit détour - mais évolutif - un exemple ancien mais pertinent - sera édité plus tard dans la journée
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^)); ]\" ) ) );
Approche 3 : faites manuellement quelque chose comme ça - pas fan de ça, mais je n'arrive pas à trouver une alternative par moi-même - peut-être que d'autres auront de meilleures pensées
If(
:Column 1 > 0, "Column 1",
:Column 2 > 0, "Column 2",
"No Positive"
)
Merci - cela calcule en effet ce que je veux, mais j'ai besoin d'un peu plus d'aide (en raison de mes capacités JSL presque inexistantes).Je peux voir les calculs corrects dans la fenêtre du journal, mais lorsque j'entre votre script dans la fenêtre de formule pour une nouvelle colonne, j'obtiens des valeurs vides.L'avertissement que je reçois concerne la fonction Show().Comment puis-je faire apparaître les calculs résultants dans la nouvelle colonne de formule ?
@dale_lehman ,
Essayez peut-être ceci ?
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);