<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Schöne Grüße,
Lange Zeit SAS-Programmierer, aber neu bei JSL. Ich habe eine Datentabelle und konnte eine Gruppe mit etwa 20 Spalten erstellen. Wenn Sie diesen Bericht nächste Woche ausführen, enthält er möglicherweise 25 Spalten in derselben Gruppe, und ich suche nach einer Möglichkeit, die Datentabelle mithilfe dieser variablen Spaltenliste zu transponieren. Wie kann man mit JSL das folgende Skript ändern, um den Gruppennamen anstelle der einzelnen Spaltenliste zu verwenden? Der Spaltenname lautet "HB_001 usw.".
Datentabelle ("tran_HB") << Transponieren (
Säulen(
: HB_001
: HB_002,
: HB_003,
: HB_004,
: HB_005,
: HB_006,
: HB_007,
: HB_008,
: HB_010,
: HB_012
)
Von (: Familie,: Gruppe),
Label (: Label),
Ausgabetabelle ("sum_HB_w_0")
);
Danke, Mike
****BEARBEITEN:
Ich wusste nicht, dass sich die Spalten in einer physischen Spaltengruppe befanden (ich dachte an eine logische Gruppe.)
Dies scheint in beantwortet worden zu sein ein anderer Beitrag (auch Mikeret57) für diese gleiche Frage. Wenn sich die Spalten in einer physischen Gruppe befinden, können Sie (und sollten dies auf jeden Fall tun) auf die langwierigen Ansätze verzichten.
*** BEARBEITEN
Hier ist eine Möglichkeit (es gibt viele andere), die hoffentlich relativ verständlich ist.
Grundsätzlich erstellen Sie einen Ausdruck, der die gewünschten Spalten enthält (hier eine beliebige Spalte, deren Name mit HB_ beginnt) und ersetzen diesen Ausdruck (anstelle eines Platzhalters, den Sie für diesen Zweck verwendet haben). In diesem Fall nannte ich den Platzhalter "cols") in einen Ausdruck, der die transponierte Anweisung enthielt, und wertete diesen neu gebildeten Ausdruck aus.
dt = Datentabelle ("tran_HB");
collist = (dt << getcolumnnames);
colexpr = Ausdruck (Spalten ());
Für (i = 1, i <= N Items (Kolliste), i ++,
If (Links (Char (Kolliste) ), 3) == "HB_",
Einfügen in (colexpr, collist.) )
)
);
trans_expr = Ausdruck (
dt << Transponieren (
cols
Von (: Familie,: Gruppe),
Label (: Label),
Ausgabetabelle ("sum_HB_w_0")
)
);
Eval (Substitute (trans_expr, Expr (Cols), Expr (Collist ()))));
Eine andere Möglichkeit, Stringoperationen zu verwenden:
dt = Datentabelle ("tran_HB");
collist = (dt << getcolumnnames (string));
für (i = nitems (collist)) i> = 1, i--,
wenn (links (collist , 3)! = "HB _", entfernen (Collist, i))
);
eval (parse (ersatz (
"\ [
dt << Transponieren (
Spalten (: xxx),
Von (: Familie,: Gruppe),
Label (: Label),
Ausgabetabelle ("sum_HB_w_0")
)
] \ ",
"xxx", concatitems (collist, ",:")
)));
Prost,
Brady