Script JSL pour transposer des colonnes en lignesJe ne sais pas comment commencer, je voudrais de l'aide avec un script qui transposerait automatiquement les colonnes choisies en lignes.
Je sais comment le faire manuellement, mais j'ai besoin d'un script car il s'agit d'une tâche très répétitive pour des centaines de fichiers de données
s'il vous plaît voir le fichier jmp ci-joint pour un échantillon de données et les résultats souhaités
j'apprécierais vraiment votre aide
Tableau de donnéesScriptingRe: script JSL pour transposer les colonnes en lignesLe script ci-dessous est un bon début pour créer la table de sortie que vous avez demandée
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the values to the new columns
For( i = 1, i <= N Rows( dtTrans2 ), i++,
dtTrans2:Column 1[i] = Word( 1, dtTrans2:Label[i], ":" );
dtTrans2:Column 2[i] = Word( 2, dtTrans2:Label[i], ":" );
specs = Column( dt, dtTrans2:Label[i] ) << get property( "spec limits" );
If( Is Missing( specs["LSL"] ) == 0,
dtTrans2:Column 3[i] = specs["LSL"]
);
If( Is Missing( specs["USL"] ) == 0,
dtTrans2:Column 4[i] = specs["USL"]
);
If( Column( dt, dtTrans2:Label[i] ) << get property( "Units" ) != "",
dtTrans2:Column 5[i] = Column( dt, dtTrans2:Label[i] ) << get property( "Units" )
);
);
// Get rid of the label column which is no longer needed
dtTrans2 << delete columns( :Label );
// Change the names of the Trans2 table to match the names in the Trans1 table
For( i = 6, i <= N Cols( dtTrans2 ), i++,
Column( dtTrans2, i ) << set name( "Column " || Char( i ) )
);
// Combine the 2 Transformed data tables
dtFinal = dtTrans1 << concatenate( dtTrans2 );
// Cleanup the no longer needed data tables
close( dtTrans1, nosave );
close( dtTrans2, nosave );Re: script JSL pour transposer les colonnes en lignesJe vous remercie! cela semble fonctionner très bien. Mais pour une raison quelconque, les colonnes de nom de test Lo Limit et Hi limits sont placées en dernier. comment pouvons-nous les réorganiser et les étiqueter dans le script?

Re: script JSL pour transposer les colonnes en lignesQuelle version de JMP utilisez-vous?Re: script JSL pour transposer les colonnes en lignesim en utilisant jmp 14
Re: script JSL pour transposer les colonnes en lignesVoici une version corrigée du script, qui positionne les colonnes de spécification, etc. à l'emplacement correct et ajoute également dans les étiquettes de colonne
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the columns 2-5 in the trans data table
dtTrans1 << Add Multiple Columns( "xColumn", 4,after(:Column 1), Character );
for(i=2,i<=5,i++,
column(dtTrans1,i)<<SET name=""></SET>Re: script JSL pour transposer les colonnes en lignesmerci Jim! le format est parfait. cependant, il ne fonctionne pas avec d'autres ensembles de données similaires pour une raison quelconque. une raison pourquoi?
Re: script JSL pour transposer les colonnes en lignesY a-t-il des messages d'erreur dans le journal?
Quelles sont les différences entre les 2 tableaux de données?
Le script s'arrête-t-il avant la fin?
Re: script JSL pour transposer les colonnes en lignesil n'y a pas d'erreur de journal. quand je lance le script, il ne fait rien. la seule différence est les noms des tests ... ils sont différents. mais tous les autres en-têtes sont les mêmesRe: script JSL pour transposer les colonnes en lignesEssayez d'exécuter le code de la ligne 1 à la ligne 26. Tout ce que vous avez à faire est de sélectionner (surligner) ces lignes dans votre script, puis de cliquer sur l'icône Exécuter.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
Voyez si la table de données Transpose 1 ressemble à:

La course les lignes 30-35
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
et voyez si le parameterColNamesList contient les noms de tous les tests de la table de données.
Continuez ensuite à vérifier les différentes sections de code, jusqu'à ce que vous trouviez ce qui ne fonctionne pas correctement.
Si vous pouvez me fournir une copie du tableau de données que vous essayez de lire, je serais disposé à faire la vérification moi-même.
Re: script JSL pour transposer les colonnes en lignesok bien sûr que c'est ici
Re: script JSL pour transposer les colonnes en lignesvoici un échantillon aléatoire de données
Re: script JSL pour transposer les colonnes en lignesignorer l'exemple précédent, veuillez utiliser celui-ci
Re: script JSL pour transposer les colonnes en lignesen voici un
Re: script JSL pour transposer les colonnes en lignesLe problème était qu'un ou plusieurs des paramètres étaient entrés en tant que données de caractères.La Transpose ne peut pas gérer des données mixtes.J'ai donc ajouté une vérification pour m'assurer que tous les paramètres détectés sont numériques.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the columns 2-5 in the trans data table
dtTrans1 << Add Multiple Columns( "xColumn", 4,after(:Column 1), Character );
for(i=2,i<=5,i++,
column(dtTrans1,i)<<SET name=""></SET>Re: script JSL pour transposer les colonnes en lignesmerci jim mais j'ai toujours la même erreur avec le script mis à jour pour certaines raisons

Re: script JSL pour transposer les colonnes en lignesMon erreur .... par erreur, la dernière entrée que je vous ai envoyée n'avait pas mes modifications. J'ai édité ma dernière réponse et mis à jour le JSL. Revenez en arrière, tirez le JSL et exécutez-le. Il contient maintenant le code corrigé.Re : Script JSL pour transposer les colonnes en lignesmerci jim