<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Saluti,
Programmatore SAS di lunga durata ma nuovo di JSL. Ho una tabella dati e sono stato in grado di creare un gruppo contenente diciamo 20 colonne. Eseguendo questo rapporto la prossima settimana, potrebbe avere 25 colonne nello stesso gruppo e sto cercando di trovare un modo per trasporre la tabella dei dati utilizzando questo elenco di colonne variabili. Usando JSL, come si modifica lo script qui sotto per operare fuori dal nome del gruppo invece del singolo elenco di colonne? Il nome della colonna è "HB_001 ecc."
Tabella dati ("tran_HB") << Transpose (
colonne (
: HB_001,
: HB_002,
: HB_003,
: HB_004,
: HB_005,
: HB_006,
: HB_007,
: HB_008,
: HB_010,
: HB_012
),
Per (: Famiglia,: gruppo),
Etichetta (: etichetta),
Tabella di output ("sum_HB_w_0")
);
Grazie, Mike
****MODIFICARE:
Non avevo capito che le colonne erano in un gruppo di colonne fisiche (stavo pensando a un gruppo logico).
Sembra che ci sia stata una risposta in un altro post (anche Mikeret57) per questa stessa domanda. Se le colonne sono in un gruppo fisico, puoi (e con tutti i mezzi dovrebbero) rinunciare agli noiosi approcci seguenti.
*** Fine EDIT
Ecco un modo per farlo (ce ne sono molti altri) che si spera sia relativamente comprensibile.
Fondamentalmente tu costruisci un'espressione che contiene le colonne che vuoi (qui, qualsiasi colonna con il nome che inizia con HB_), quindi sostituisci questa espressione (al posto di un segnaposto che hai usato per questo scopo ... in questo caso ho chiamato il segnaposto "cols") in un'espressione che contiene la frase transpose, e valuto questa espressione appena formata.
dt = Data Table ("tran_HB");
collist = (dt << getcolumnnames);
colexpr = Expr (Columns ());
Per (i = 1, i <= N Items (collist), i ++,
Se (a sinistra (Char (collist ), 3) == "HB_",
Inserisci (colexpr, collist )
)
);
trans_expr = Expr (
dt << Transpose (
cols,
Per (: Famiglia,: gruppo),
Etichetta (: etichetta),
Tabella di output ("sum_HB_w_0")
)
);
Eval (sostituto (trans_expr, expr (cols), expr (collist ())));
Ecco un altro modo che utilizza le operazioni con le stringhe:
dt = Data Table ("tran_HB");
collist = (dt << getcolumnnames (stringa));
per (i = nitems (collist), i> = 1, i--,
se (a sinistra (collist , 3)! = "_ HB", removefrom (collist, i))
);
eval (parse (sostituto (
"\ [
dt << Transpose (
colonne (: xxx),
Per (: Famiglia,: gruppo),
Etichetta (: etichetta),
Tabella di output ("sum_HB_w_0")
)
] \",
"xxx", concatitems (collist, ",:")
)));
Saluti,
Brady