rechercher et remplacer un en-tête de colonneSalut,
Je peux remplacer le nom de l'en-tête de colonne par le nom exact en utilisant :height << Définir le nom( "test" );
Si j'ai une liste de texte que je veux remplacer par "".
Comment puis-je procéder avec cela?
"nom" "Heure" "sexe" "taille abc poids" "poids xyz" "test de taille 12"
CATIE 12 F 59 95 59
LOUISE 12 F 61 123 61
Sortie finale :
"nom" "Heure" "sexe" "abc" "xyz" "12 test"
Names Default To Here( 1 );
dt = Open( "C:/JSL/BigClass.jmp" );
headerList = dt << get column names( string );
//:height << Set Name( "test" );
For( i = 1, i <= N Items( headerList ), i++,
If( (headerList[i] == "height" || headerList[i] == "weight"), //trying to find any column header has height or weight and replace with ""
Column( dt, colList[i] ) << set name( " " ) //above are just two examples, maybe put it in list and loop?
)
);
ScriptRe : recherche et remplacement d'en-tête de colonneSalut Sam,
Il semble que le problème concerne le changement de nom direct de la colonne dans la deuxième boucle (j) où vous effectuez toujours une substitution.
Une solution possible (illustrée ci-dessous) consiste à modifier la liste des en-têtes (hl) puis à renommer la colonne après que toutes les modifications ont été apportées :
Names Default To Here( 1 );
dt = Open( "C:\Program Files\SAS\JMP\14\Samples\Data\Big Class.jmp" );
hl = dt << get column names( string );
sr = List();
sr[1] = "height"; //
sr[2] = "e"; // Order of replacement strings is critical
sr[3] = "a"; //
For( i = 1, i <= N Items( hl ), i++,
For (j = 1, j <= N Items (sr), j++,
If (contains (hl [i], sr [j]),
txt = substitute (hl [i], sr [j], "x"); // Just for clarity: the expression could be wrapped into the next
Substitute into (hl, hl [i], txt); // Hold all the changes into the hl list
)
);
Column (dt , i ) << set name (hl [i]); // Renames column only after all changes have been made
);
J'espère que cela aide.
Meilleur,
TS
Re : recherche et remplacement d'en-tête de colonneJ'ai essayé de définir la liste à l'avance et de faire une double boucle imbriquée. Il ne remplace que sur chaîneRemplacer[3].
headerList = dt << get column names( string );
stringReplace = List();
stringReplace[1] = "height";
stringReplace[2] = "e";
stringReplace[3] = "a";
For( i = 1, i <= N Items( headerList ), i++,
For( j = 1, j <= N Items( stringReplace ), j++,
Column( dt, i ) << set name( Substitute(headerList[i], stringReplace[j], "" ) )
);
);
Re : recherche et remplacement d'en-tête de colonneSalut Sam,
J'ai trouvé 2 problèmes dans votre script:
- Vous avez utilisé la concaténation "||" code pour représenter votre instruction "Ou" (devrait être "|")
- JMP n'autorise pas le nom de colonne " ".
En outre, il est généralement plus rapide et plus facile d'appeler la colonne par numéro au lieu de parcourir la liste des noms de colonne.
Alors, voici ce que j'ai trouvé:
Names Default To Here( 1 );
dt = Open( "C:\Program Files\SAS\JMP\14\Samples\Data\Big Class.jmp" );
headerList = dt << get column names( string );
For( i = 1, i <= N Items( headerList ), i++,
If( (headerList[i] == "height" | headerList[i] == "weight"), //Fixed the "Or" statement
Column( dt, i ) << set name(substitute (headerList [i], "e", "x")) //Used the substitute function as an example, you can replace any string with ""?
)
);