convertir des colonnes en lignes
données et résultats souhaités
j'apprécierais vraiment votre aide
Ingénierie Qualité et ProcédésPartager et communiquer les résultatsRe : Script JSL pour transposer des colonnes en lignesmerci Jim
Re : Script JSL pour transposer des colonnes en lignesMon erreur....par erreur, la dernière entrée que je vous ai envoyée ne comportait pas mes modifications. J'ai modifié ma dernière réponse et mis à jour le JSL. Veuillez revenir en arrière, extraire le JSL et l'exécuter. Il contient désormais le code corrigé.Re : Script JSL pour transposer des 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 des colonnes en lignesLe problème était qu'un ou plusieurs paramètres étaient saisis sous forme de données de caractères.Le 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 &
Column( dt, i ) << get modeling type == "Continuous",
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 des colonnes en lignesen voici un
Re : Script JSL pour transposer des colonnes en lignesLe message d'erreur qui s'affiche indique que la table de données vers laquelle pointe "dtTrans2" n'est pas en cours de création."dtTrans2" est créé à partir d'un Transpose(), qui nécessite une liste de paramètres de votre table de données d'origine.Le "parameterColNamesList" est créé en recherchant toutes les colonnes de votre table de données d'origine qui commencent par un nombre suivi d'un ":".Je soupçonne que vos paramètres ne sont pas nommés ainsi dans votre table de données d'origine.Mais sans voir le tableau de données, je ne fais que deviner.Si ce que je suppose est vrai, il faut alors trouver quelque chose qui identifie les colonnes de paramètres.
Re : Script JSL pour transposer des colonnes en lignesbonjour Jim
Je trouve toujours des problèmes avec d'autres tables de données pour certaines raisons, j'ai vérifié le type de données et je m'assure qu'elles sont toutes identiques. mais ça ne marche pas

Re : Script JSL pour transposer des colonnes en lignesmerci Jim
Re : Script JSL pour transposer des colonnes en lignesCet exemple de table de données présente un problème avec la colonne Périphérique.Il est défini comme type de données de caractère.Si vous le changez en Numérique, le script fonctionne correctement.
Re : Script JSL pour transposer des colonnes en lignesJ'ai exécuté le script sur les exemples de données de sous-ensemble que vous avez fournis, et il s'est exécuté sans erreur et a produit un tableau de données transposé.J'ai trouvé un petit problème, à savoir que les noms des tests ne contenaient pas le nom complet de la table de données d'entrée.Mais à part ça, il semble avoir fonctionné correctement.

Voici le JSL corrigé
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 des colonnes en lignesignorez l'exemple précédent, veuillez utiliser celui-ci
Re : Script JSL pour transposer des colonnes en lignesvoici un échantillon de données aléatoire
Re : Script JSL pour transposer des colonnes en lignesok, bien sûr, le voici
Re : Script JSL pour transposer des 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 (mettre en surbrillance) 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
);
Vérifiez si le tableau de données Transpose 1 ressemble à :

Le parcours des 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 paramètreColNamesList 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 prêt à effectuer la vérification moi-même.
Re : Script JSL pour transposer des colonnes en lignesil n'y a pas d'erreur de journal. quand j'exécute le script, il ne fait rien. la seule différence réside dans les noms des tests... ils sont différents. mais tous les autres en-têtes sont les mêmesRe : Script JSL pour transposer des 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 d'être terminé ?
Re : Script JSL pour transposer des colonnes en lignesmerci Jim! le format est parfait. cependant, cela ne fonctionne pas avec d'autres ensembles de données similaires pour une raison quelconque. une raison pour laquelle ?
Re : Script JSL pour transposer des colonnes en lignesVoici une version corrigée du script, qui positionne les colonnes de spécifications, etc. au bon emplacement et ajoute également des étiquettes de colonnes
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 des colonnes en lignesj'utilise jmp 14
Re : Script JSL pour transposer des colonnes en lignesQuelle version de JMP utilisez-vous ?Re : Script JSL pour transposer des colonnes en lignesMerci! cela semble fonctionner très bien. Mais pour une raison quelconque, les colonnes de nom de test Lo Limit et Hi limites sont placées en dernier. comment pouvons-nous les réorganiser et les étiqueter dans le script ?
Re : Script JSL pour transposer des 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 );