utilisation des noms de colonnes dans les boucles<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Chers experts JMP,
J'ai un tableau avec de nombreuses colonnes répétitives :
A_X1_Y1, A_X1_Y2, ....A_X1_Y99, A_X2_Y1, A_X2_Y99, ....
B_X1_Y1, B_X1_Y2, ....B_X1_Y99, B_X2_Y1, B_X2_Y99, ....
c'est-à-dire Xi, i=1, 99, Yj, j=1,20,
Si je veux ajouter plusieurs colonnes :
C_Xi_Yj = A_Xi_Yj - B_Xi_Yj
C_ ?, où C_ ? = A_ ? - B_ ?
Puis-je utiliser loop avec Xi, Yj, ou je peux utiliser quelque chose d'encore plus abstrait, comme : C_ ? = A_ ?-B_ ?
Merci,
Qian
Re : utiliser les noms de colonnes dans les bouclesIl me faut du temps pour comprendre cela. C'est une très bonne idée.
Merci!
-------------------------------------------------- -------------------------------------------------- -----------------------------------------
Pour les très grandes tables, une solution basée sur des opérations matricielles est probablement plus efficace.
Un exemple;
// Le script suppose que les colonnes sont dans le bon ordre : d'abord tous les A puis tous les B dans le même ordre
//dt<
n = ncol ( dt ) ;
UN B = dt << obtenir comme matrice ;
C = UN B [ 0 , 1 :: n / 2 ] - UN B [ 0 , n / 2 + 1 :: n ] ;
dt << définir la matrice ( C ) ;
pour ( je = 1 , je <= 3 , je ++,
pour ( j = 1 , j <= 4 , j ++,
col = Colonne ( n + 1 ) ; col << définir le nom ( "C_X" || carboniser ( je ) || "_Y" || carboniser ( j )) ; n ++
)) ;
Re : utiliser les noms de colonnes dans les bouclesMerci!
Cet evalinsert aide vraiment. Maintenant le code fonctionne !
Meilleures salutations,
Qian
Re : utiliser les noms de colonnes dans les bouclesPour les très grandes tables, une solution basée sur des opérations matricielles est probablement plus efficace.
Un exemple;
// Le script suppose que les colonnes sont dans le bon ordre : d'abord tous les A puis tous les B dans le même ordre
//dt<
n = ncol ( dt ) ;
UN B = dt << obtenir comme matrice ;
C = UN B [ 0 , 1 :: n / 2 ] - UN B [ 0 , n / 2 + 1 :: n ] ;
dt << définir la matrice ( C ) ;
pour ( je = 1 , je <= 3 , je ++,
pour ( j = 1 , j <= 4 , j ++,
col = Colonne ( n + 1 ) ; col << définir le nom ( "C_X" || carboniser ( je ) || "_Y" || carboniser ( j )) ; n ++
)) ;
Re : utiliser les noms de colonnes dans les bouclesDécouvrez la fonction Evalinsert(). Cela peut être utile lors de la spécification de formules qui dépendent, par exemple, du compteur.
Exemple avec des colonnes de formules :
// crée une table d'exemple
dt = nouveau tableau ( "test" ) ;
pour ( je = 1 , je <= 3 , je ++,
pour ( j = 1 , j <= 4 , j ++,
dt << nouvelle colonne ( "HACHE" || carboniser ( je ) || "_Y" || carboniser ( j ) , numérique , valeurs ([ 5 , 6 ]))
)) ;
pour ( je = 1 , je <= 3 , je ++,
pour ( j = 1 , j <= 4 , j ++,
dt << nouvelle colonne ( "B_X" || carboniser ( je ) || "_Y" || carboniser ( j ) , numérique , valeurs ([ 2 , 2 ]))
)) ;
// Ajouter des colonnes de formules
F = expr ( analyser ( evalinsert ( "HACHE" || "^car(i)^" || "_Y" || "^car(j)^-B_X" || "^car(i)^" || "_Y" || "^car(j)^" ))) ;
pour ( je = 1 , je <= 3 , je ++,
pour ( j = 1 , j <= 4 , j ++,
dt << nouvelle colonne ( "C_X" || carboniser ( je ) || "_Y" || carboniser ( j ) , numérique , formule ( eval ( F )))
)) ;
Re : utiliser les noms de colonnes dans les bouclesvoici mes essais ratés, quelqu'un s'il vous plaît aider:
pour ( je = 1, je <= 3, je++,
pour ( j = 1, j <=4, j++,
col_new_name="C_"||char(i)||"_"||char(j);
table de données (dt_out) << ajouter plusieurs colonnes (col_new_name, 1, "Numeric");
parse (col_new_name) << formule ( ascolumn (parse("A_"||char(i)||"_"||char(j)) -
ascolumn (parse("B_"||char(i)||"_"||char(j)) );
);
);
Les colonnes avec des noms corrigés sont ajoutées à ma table, mais la formule est littéralement :
parse("A_"||char(i)||"_"||char(j))-parse("B_"||char(i)||"_"||char(j)
J'ai aussi essayé eval(parse (*)), sans 'parse', sans ascolumn, etc. aucun ne fonctionne.
S'il vous plaît aider.
Merci,
Qian