<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Saludos,
Programador SAS desde hace mucho tiempo pero nuevo en JSL. Tengo una tabla de datos y he podido crear un grupo que contiene, por ejemplo, 20 columnas. Al ejecutar este informe la próxima semana, puede tener 25 columnas en el mismo grupo y estoy buscando una manera de transponer la tabla de datos usando esta lista de columnas de variables. Utilizando JSL, ¿cómo se modifica la secuencia de comandos a continuación para operar fuera del nombre del grupo en lugar de la lista individual de columnas? El nombre de la columna es "HB_001 etc."
Tabla de datos ("tran_HB") << Transpose (
columnas
: HB_001,
: HB_002,
: HB_003,
: HB_004,
: HB_005,
: HB_006,
: HB_007,
: HB_008,
: HB_010,
: HB_012
)
Por (: familia,: grupo),
Etiqueta (: Etiqueta),
Tabla de salida ("sum_HB_w_0")
);
Gracias Mike
****EDITAR:
No me di cuenta de que las columnas estaban en un grupo de columnas físicas (estaba pensando en un grupo lógico).
Esto parece haber sido respondido en otro post (también de Mikeret57) para esta misma pregunta. Si las columnas están en un grupo físico, puede (y por supuesto debería) renunciar a los tediosos enfoques a continuación.
*** Finalizar EDITAR
Aquí hay una forma de hacerlo (hay muchas otras) que es de esperar relativamente comprensible.
Básicamente, creas una expresión que contiene las columnas que deseas (aquí, cualquier columna cuyo nombre empiece por HB_), luego sustituyes esta expresión (en lugar de un marcador de posición que has usado para este propósito ... en este caso, llamé a los marcadores de posición "cols") en una expresión que aloja la declaración de transposición, y evalúo esta expresión recién formada.
dt = Tabla de datos ("tran_HB");
collist = (dt << getcolumnnames);
colexpr = Expr (Columnas ());
Para (i = 1, i <= N Items (collist), i ++,
Si (Izquierda (Char (collist ), 3) == "HB_",
Insertar en (colexpr, collist )
)
);
trans_expr = Expr (
dt << Transponer (
cols
Por (: familia,: grupo),
Etiqueta (: Etiqueta),
Tabla de salida ("sum_HB_w_0")
)
);
Eval (Sustituto (trans_expr, Expr (cols), Expr (collist ())));
Aquí hay otra forma en que utiliza las operaciones de cadena:
dt = Tabla de datos ("tran_HB");
collist = (dt << getcolumnnames (cadena));
para (i = nitems (collist), i> = 1, i--,
si (izquierda) , 3)! = "HB _", removefrom (collist, i))
);
eval (analizar)
"\ [
dt << Transponer (
columnas (: xxx),
Por (: familia,: grupo),
Etiqueta (: Etiqueta),
Tabla de salida ("sum_HB_w_0")
)
] \ ",
"xxx", concatitems (collist, ",:")
)));
Aclamaciones,
Brady