<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,“,:”)
)));
乾杯,
布雷迪