Suppression de colonnes avec N valeurs de ligne nullesJ'ai un tableau de valeurs avec chaque colonne étant un instrument et chaque ligne étant un temps. Certains instruments n'ont pas eu de données enregistrées à suffisamment de valeurs temporelles pour que je puisse adapter un modèle significatif.
J'essaie d'utiliser une boucle pour me permettre de parcourir chaque colonne tour à tour et de vérifier le nombre de valeurs.
J'ai un code qui trouve le nombre de valeurs pour la colonne 80.
col_a = Column(dt_2, 80);
val_mat = col_a << Get Values;
y = sum(!is missing(val_mat));
J'essaie d'adapter ce code dans une boucle pour chaque colonne tour à tour et de supprimer les colonnes avec trop peu de valeurs.
N_loop = N Cols(dt_2);
i_loop = 2;
While (i_loop <= N_loop,
col_loop = Column(dt_2, i_loop),
val_loop = col_loop << Get Values,
y_loop = sum(!is missing(val_loop)),
If(y_loop <= 8,
dt_2 << Delete Columns( i_loop ),
);
i_temp+=1,
);
Le message d'erreur indique trop d'arguments.
les fenêtresRe : Suppression de colonnes avec N valeurs de ligne nullesLa raison pour laquelle il y a trop d'arguments est qu'il y a une deuxième virgule dans la fonction While().
La structure d'une fonction While() est
While( testExpr, bodyExpr )
Remarque : il n'y a que 2 arguments à la fonction.Le test
i_loop <= N_loop
puis les instructions qui sont exécutées si le textExpr est vrai.Votre bodyExpr a des virgules après chaque instruction, plutôt que des points-virgules.Ainsi, faire de chaque déclaration un argument distinct.
Veuillez ne pas simplement changer les virgules en points-virgules et exécuter ce code.Il y a une erreur de logique, qui ne permettra pas au code de se terminer.i_loop et N_loop ne changent jamais de valeur.
Il existe également un moyen plus rapide de vérifier le nombre de valeurs valides dans une colonne.De plus, si vous supprimez des colonnes et que votre valeur N_loop reste fixe, N_loop n'est plus le nombre correct de colonnes dans la table de données, une fois qu'une colonne est supprimée.Il est préférable de travailler de la dernière colonne à la première colonne dans de tels cas.
Vous trouverez ci-dessous une refonte de votre script qui supprimera les colonnes où le nombre de valeurs de données valides est inférieur ou égal à 8.
Names Default To Here( 1 );
dt_2 = Current Data Table();
N_loop = N Cols( dt_2 );
i_loop = 2;
While( N_loop > i_loop,
If( Col Number( As Column( dt_2, N_loop ) ) <= 8,
dt_2 << Delete Columns( N_loop )
);
N_loop -= 1;
);
PS @jthi solution est une meilleure solution.Votre approche, avec quelques corrections, fonctionne... alors bon travail !
Re : Suppression de colonnes avec N valeurs de ligne nullesDe nombreuses façons de le faire. Une option consiste à utiliser Col Number ou Col N Missing and For Each (nécessite JMP16)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//delete some values
dt[1::20, "name"] = "";
dt[1::30, "sex"] = "";
dt[1::40, "height"] = .;
wait(2);
row_count = N Rows(dt);
For Each({col_name}, dt << Get Column Names("String"),
// missing_vals = Col N Missing(Column(dt, col_name));
// found_values = row_count - missing_vals;
found_values = Col Number(Column(dt, col_name));
If(found_values <= 8,
dt << Delete Column(col_name);
)
);