Transposer de WIDE à LONG et une question de formuleBonjour, deux questions un peu liées
J'ai utilisé SPLIT pour transformer un fichier long en un fichier large, mais j'ai une situation un peu plus compliquée où je veux EMPILER/transposer un fichier large en un fichier long.
J'ai un ensemble de données avec un identifiant de sujet unique, puis plusieurs centaines de colonnes/variables. Les noms des variables sont exactement les mêmes à l'exception que l'année 1 se termine par '2', l'année 2 se termine par '3', etc. 2,3,4) et les noms de variables n'y figurent qu'une seule fois sans numéro à la fin ?
Connexe mais abordant ce qui précède d'une manière différente, dans un tel ensemble de données, existe-t-il un moyen de créer une formule dans JMP pour l'indiquer pour toutes les XXX centaines de colonnes, pour supprimer le # (par exemple, 1, 2) à la fin du nom de colonne/variable ? Évidemment, je pourrais le faire manuellement, mais cela prendrait une éternité.
Merci beaucoup!
Fusion et nettoyage des donnéesRe : Transposer de WIDE à LONG et une question de formuleJe vais vous guider dans la génération de la table de données empilées, en utilisant la table de données ci-dessous

Aller à
Tableaux=>Empiler
Remplissez la fenêtre de dialogue en plaçant toutes les colonnes que vous souhaitez empiler dans la boîte de sélection Empiler les colonnes.

Cela créera une table qui ressemble à ceci

Créez une nouvelle colonne dans la table de données appelée "Column Name"

Cliquez avec le bouton droit sur l'en-tête de colonne de la colonne Nom de la colonne et sélectionnez Formule

Une formule doit être spécifiée qui prend tout ce qui précède les nombres à la fin des valeurs dans la colonne Libellé et conserve cela comme valeur du nom de la colonne.Cela peut donc être fait de plusieurs manières, en fonction des données réelles.Dans notre exemple, la formule trouvera tout avant que les nombres ne soient vus et le prendra comme valeur du nom de la colonne.
La formule trouve le 1er mot dans la colonne :Label, s'arrêtant chaque fois qu'elle trouve une valeur numérique "0123456789"

Le résultat est

Créez maintenant une autre nouvelle colonne et appelez-la "Année".Dans ce cas, nous voulons prendre le dernier caractère de la colonne car la valeur de la formule de l'année est

Ce qui vous donne votre tableau de données final

Concernant le renommage des colonnes, je ne connais pas de manière interactive de le faire de manière interactive.Je pense donc que vous devrez exécuter le script que j'ai fourni plus tôt
Re : Transposer de WIDE à LONG et une question de formuleJ'apprécie vraiment ta réponse.Si ma mémoire est bonne, vous m'avez également aidé avec une question l'année dernière.
Malheureusement, je ne suis pas averti avec le script JMP, je ne fais que pointer et cliquer.Et même si je pouvais le comprendre, puisque j'ai beaucoup de variables, je devrais exécuter ce code pour chacune, n'est-ce pas ?
Re : Transposer de WIDE à LONG et une question de formuleVoici un script qui va générer un tableau de données empilé avec 3 colonnes

Voici un script qui supprimera le nombre numérique à la fin des colonnes dans une table de données.N'oubliez pas que lorsque vous renommez des colonnes, si le résultat final est un nom de colonne identique au nom d'une colonne précédente, JMP ajoutera une valeur numérique pour faire du nouveau nom de colonne un nom unique.
Names Default To Here( 1 );
dt = Current Data Table();
For( i = 1, i <= N Cols( dt ), i++,
if(
is missing(
Num(
word(
-1,
Lowercase( Column( dt, i ) << get name )
,
"abcdefghijklmnopqrstuvwxyz;:, -_)(")
)
) == 0,
Column( dt, i ) <<
set name(
substr(
Column(dt,i)<<GET name=""></GET>
Names Default To Here( 1 );
dt = new table( "Example",
add rows( 10 ),
New Column( "Year2", formula( Random Integer( 1, 100 ) ) ),
New Column( "Year3", formula( Random Integer( 1, 100 ) ) ),
New Column( "Year4", formula( Random Integer( 1, 100 ) ) )
);
dtStack = Data Table( "Example" ) << Stack(
columns( :Year2, :Year3, :Year4 ),
Source Label Column( Column ),
Stacked Data Column( "Data" )
);
dtStack << New Column( "Year",
formula(
Num(
Word(
-1,
Lowercase( :Column ),
"abcdefghijklmnopqrstuvwxyz;:, -_)("
)
)
)
);
dtStack:Year << delete formula;
for each row(
:Column = substr(
:Column,
1,
Length( :Column ) - Length(
Word(
-1,
Lowercase( :Column ),
"abcdefghijklmnopqrstuvwxyz;:, -_)("
)
)
)
);