如何借助sas代码转换下表:
ID T U
1 1253 1349
2 1139 1382
3 1633 1663
4 1372 1541
5 1502 1335
进入此表?
ClassID All
T 1253
T 1139
T 1633
T 1372
T 1502
U 1349
U 1382
U 1663
U 1541
U 1335
PS:我确实尝试使用sas sql(加入所有),但无法将T和U变量转换为类标识符)
答案 0 :(得分:2)
这就是Redirect("http://google.com/",200)
创建的目的。如果您希望按新的ClassID变量排序记录,那么您还需要添加PROC TRANSPOSE
。
PROC SORT
答案 1 :(得分:1)
这是使用DATA步骤的强力方法:
data test;
input ID T U;
cards;
1 1253 1349
2 1139 1382
3 1633 1663
4 1372 1541
5 1502 1335
;
data test;
set test;
keep ClassID All;
ClassID = "T"; All = T; output;
ClassID = "U"; All = U; output;
proc sort data=test out=test;
by ClassID;
run;
答案 2 :(得分:1)
为避免对任何值进行硬编码,请创建一个循环遍历每个记录的数组,并使用vname
函数读取当前变量名称。此变量名称分配给ClassID,变量值分配给All。如果所有变量都是数字变量,我的代码就可以工作,如果混合了数字和字符变量,你需要调整它(如果是这样的话,只需为字符变量创建另一个数组)。
/* create initial dataset */
data have;
input ID T U;
datalines;
1 1253 1349
2 1139 1382
3 1633 1663
4 1372 1541
5 1502 1335
;
run;
/* transform data into required dataset */
data want (keep=classid all); /* only keep wanted variables */
set have (drop=ID); /* don't read in ID as it's not needed */
array vars{*} _numeric_; /* set up array of all remaining variables (assume all numeric) */
do i = 1 to dim(vars); /* loop through each value */
classID=vname(vars{i}); /* set ClassID to current variable name */
all = vars{i}; /* set All to current value */
output;
end;
run;
/* sort data by ClassID */
proc sort data=want;
by classid;
run;