Mettre à jour la ligne de référence de l'axe de la colonne en fonction des données d'une autre table de donnéesJe cherche à ajouter des lignes de référence de colonne basées sur les données d'une autre capacité de données. Un exemple, l'utilisation de « Big Class » mettrait à jour les colonnes « poids » et « hauteur » avec les valeurs P50 et P95 à partir d'une table de données de recherche.
Les lignes de la table de données de recherche correspondent aux noms de colonnes dans la table principale. Les lignes de référence devraient attribuer la valeur d'étiquette du nom de colonne de la table de recherche "P50" ou "P95" et la valeur provient de la ligne de cette colonne.
Exemple montrant les lignes de référence de l'axe des colonnes ajoutées :

Exemple de table de données de recherche :

Je ne connais pas très bien JSL, donc j'apprécie toute aide qui me vient sur ce sujet. J'ai créé un script mais il ne fait pas ce que je veux.
Il semble corrompre la colonne, parfois lors du traçage d'une distribution, il affiche toutes les valeurs « 0 ». De plus, si j'essaie d'ajouter les lignes de référence P50 et P95, seule la dernière est enregistrée dans la colonne et elle l'enregistre sur les deux colonnes.
dt = Open ("C:\Program Files\SAS\JMP\15\Samples\Data\big class.jmp");
dtLookup = New Table( "Lookup Table",
Add Rows( 2 ),
New Column( "Column Name",
Character,
Nominal,
Set Values( {"weight", "height"} )
),
New Column( "P50",
"Continuous",
Set Values( [100, 61] )
),
New Column( "P95",
"Continuous",
Set Values( [120, 70] )
)
);
col_name_list = dt << get column names(string);
col_name_list_lookup = dtLookup << get column names(string);
numRowsLookup = N Rows( dtLookup );
numColsLookup = N Cols( dtLookup );
for(n=1,n<=numRowsLookup,n++,
col_name = dtLookup[n,1];
If(contains(col_name_list,col_name),
for(j=2,j<=numColsLookup,j++,
col = Column(dt, col_name);
col_name_Lookup = col_name_list_lookup[j];
value = Column(dtLookup,col_name_Lookup)[n];
col <<
Set Property("Axis",
{
//Add Ref Line( 63, "Dashed", "Orange", "P50", 2 )
Add Ref Line( value, "Dashed", "Orange", col_name_Lookup, 2 )
});
);
);
);
Merci,
Roger
ScriptRe : Mettre à jour la ligne de référence de l'axe des colonnes en fonction des données d'une autre table de donnéesVoici un exemple de script. Je suppose que l'axe est remplacé si vous essayez de le faire plusieurs fois comme ça, vous devrez donc peut-être les ajouter dans la même << Définir la propriété (plusieurs façons différentes de construire l'expression pour le faire).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dtLookup = New Table("Lookup Table",
Add Rows(2),
New Column("Column Name", Character, Nominal, Set Values({"weight", "height"})),
New Column("P50", "Continuous", Set Values([100, 61])),
New Column("P95", "Continuous", Set Values([120, 70]))
);
For Each Row(dtLookup,
col_name =:"Column Name"n;
//because we know we have only two lines to add and they are always added
Eval(EvalExpr(Column(dt, col_name) << Set Property("Axis", {
Add Ref Line(Expr(:P50), "Dashed", "Orange", "P50", 2),
Add Ref Line(Expr(:P95), "Dashed", "Orange", "P95", 2)
}))
);
);

Pas sûr si Eval(EvalExpr()) est nécessaire ici, mais cela ne fera pas de mal.
Re : Mettre à jour la ligne de référence de l'axe des colonnes en fonction des données d'une autre table de donnéesMerci Jarmo. Cette solution est beaucoup plus simple mais elle semble écraser toutes les lignes de référence d'axe existantes. Savez-vous s'il existe un moyen de conserver les lignes de référence d'axe déjà présentes dans cette colonne ?
Re : Mettre à jour la ligne de référence de l'axe des colonnes en fonction des données d'une autre table de donnéesJe ne suis pas sûr à 100%, mais peut-être pourriez-vous d'abord obtenir les anciennes propriétés Axis avec << Get Propery("Axis"), puis ajouter à cela.
Peut-être quelque chose comme ça (il pourrait aussi y avoir des moyens plus simples):
old_properties = Column(dt, "height") << get property("Axis");
old_with_new = Insert(old_properties, Expr(Add Ref Line(1, "Dashed", "Orange", "P45", 2)));
Eval(EvalExpr(column(dt, "height") << Set Property("Axis",{expr(old_with_new)})));Re : Mettre à jour la ligne de référence de l'axe des colonnes en fonction des données d'une autre table de donnéesQue fait la fonction Insert() ici ? Je n'arrive pas à le faire fonctionner.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dtLookup = New Table("Lookup Table",
Add Rows(2),
New Column("Column Name", Character, Nominal, Set Values({"weight", "height"})),
New Column("P50", "Continuous", Set Values([100, 61])),
New Column("P95", "Continuous", Set Values([120, 70]))
);
col_name_list = dt << get column names(string);
col_name_list_lookup = dtLookup << get column names(string);
For Each Row(dtLookup,
col_name =:"Column Names"n;
If(contains(col_name_list,col_name),
old_properties = Column(dt, col_name) << get property("Axis");
old_with_new = Insert(old_properties,
{Expr( Add Ref Line(Expr(:P50), "Dashed", "Orange", "P50", 2),
Add Ref Line(Expr(:P95), "Dashed", "Orange", "P95", 2)
)
});
Eval(EvalExpr(Column(dt, col_name) << Set Property("Axis",{
Expr(old_with_new)
})));
);
);