<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salutations,
Programmeur SAS de longue date, mais nouveau sur JSL. J'ai une table de données et j'ai pu créer un groupe contenant 20 colonnes. En exécutant ce rapport la semaine prochaine, il peut contenir 25 colonnes du même groupe et je cherche un moyen de transposer le tableau de données à l'aide de cette liste de variables de colonnes. Avec JSL, comment modifier le script ci-dessous pour utiliser le nom du groupe au lieu de la liste de colonnes individuelle? Le nom de la colonne est "HB_001 etc."
Table de données ("tran_HB") << Transpose (
colonnes (
: HB_001,
: HB_002,
: HB_003,
: HB_004,
: HB_005,
: HB_006,
: HB_007,
: HB_008,
: HB_010,
: HB_012
),
Par (: Famille,: groupe),
Label (: Label),
Table de sortie ("sum_HB_w_0")
)
Merci, mike
****MODIFIER:
Je ne savais pas que les colonnes étaient dans un groupe de colonnes physique (je pensais à un groupe logique).
Cela semble avoir été répondu dans un autre post (également Mikeret57) pour cette même question. Si les colonnes sont dans un groupe physique, vous pouvez (et par tous les moyens le devriez) renoncer aux approches fastidieuses ci-dessous.
*** Fin EDIT
Voici une façon de le faire (il y en a beaucoup d'autres) qui, nous l'espérons, est relativement compréhensible.
En gros, vous construisez une expression contenant les colonnes souhaitées (ici, toute colonne dont le nom commence par HB_), puis vous la remplacez (à la place d'un espace réservé que vous avez utilisé à cette fin ... dans ce cas, j'ai appelé l'espace réservé "cols") dans une expression contenant l'énoncé de transposition et évalué cette expression nouvellement formée.
dt = table de données ("tran_HB");
collist = (dt << getcolumnnames);
colexpr = Expr (colonnes ());
Pour (i = 1, i <= N éléments (collist), i ++,
Si (gauche (Char (collist ), 3) == "HB_",
Insérer dans (colexpr, collist )
)
)
trans_expr = Expr (
dt << Transpose (
cols,
Par (: Famille,: groupe),
Label (: Label),
Table de sortie ("sum_HB_w_0")
)
)
Eval (Substitute (trans_expr, Expr (cols), Expr (collist ())));
Voici un autre moyen d’utiliser des opérations sur les chaînes:
dt = table de données ("tran_HB");
collist = (dt << getcolumnnames (string));
pour (i = nitems (collist), i> = 1, i--,
si (à gauche (colliste) , 3)! = "HB _", retirer de (collist, i))
)
eval (parse (substitute (
"\ [
dt << Transpose (
colonnes (: xxx),
Par (: Famille,: groupe),
Label (: Label),
Table de sortie ("sum_HB_w_0")
)
] \ ",
"xxx", concatitems (collist, ",:")
)));
À votre santé,
Brady