<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />问候,
长期以来的SAS程序员,但JSL的新手。 我有一个数据表,并且能够创建一个包含20列的组。 下周运行此报告,它可能在同一组中有25列,我希望找到一种方法来使用此变量列列转置数据表。 使用JSL,如何修改下面的脚本来操作组名而不是单独的列列表?列名是“HB_001等”
数据表(“tran_HB”)<< Transpose(
列(
:HB_001,
:HB_002,
:HB_003,
:HB_004,
:HB_005,
:HB_006,
:HB_007,
:HB_008,
:HB_010,
:HB_012
)
通过(:家庭,:小组),
标签(:标签),
输出表(“sum_HB_w_0”)
);
谢谢,迈克
****编辑:
我没有意识到列是在一个物理列组中(我正在考虑一个逻辑组。)
这似乎已被回答另一篇文章 (也是Mikeret57的)同样的问题。如果列在物理组中,您可以(并且无论如何应该)放弃下面的繁琐方法。
***结束编辑
这是一种方法(有许多其他的),希望相对可以理解。
基本上,您构建一个包含所需列的表达式(此处,名称以HB_开头的任何列),然后替换此表达式(代替您为此目的使用的占位符... 在这种情况下,我将占位符“cols”调用到包含转置语句的表达式中,并评估这个新形成的表达式。
dt =数据表(“tran_HB”);
collist =(dt << getcolumnnames);
colexpr = Expr(Columns());
对于(i = 1,i <= N项(collist),i ++,
如果(左(Char),collist ),3)==“HB_”,
插入(colexpr,collist )
)
);
trans_expr = Expr(
dt << Transpose(
COLS,
通过(:家庭,:小组),
标签(:标签),
输出表(“sum_HB_w_0”)
)
);
Eval(替代(trans_expr,Expr(cols),Expr(collist())));
这是另一种使用字符串操作的方法:
dt =数据表(“tran_HB”);
collist =(dt << getcolumnnames(string));
for(i = nitems(collist),i> = 1,i--,
如果(左(collist ,3)!= “HB _”,removefrom(collist,i))的
);
的eval(解析(代用品(
“\ [
dt << Transpose(
列(:XXX)
通过(:家庭,:小组),
标签(:标签),
输出表(“sum_HB_w_0”)
)
] \”,
“xxx”,concatitems(collist,“,:”)
)));
干杯,
布雷迪