我有一组 SAS 数据,其中每个单独的条目都需要重新分配给只有 2 个变量的临时数据集:颜色和数字。现在该集合被组织成这样的列:
黑色 | 灰色 | 红色 | 白色 |
---|---|---|---|
57 | 59 | 60 | 78 |
67 | 76 | 81 | 50 |
52 | 62 | 47 | 66 |
我最初考虑使用 do 语句来迭代每个条目,但设置起来遇到困难。
使用数组并循环遍历每个值。使用变量的名称来识别其颜色。
data want;
set have;
array c[*] Black--White;
do i = 1 to dim(c);
color = vname(c[i]);
value = c[i];
output;
end;
keep color value;
run;
与将数据堆叠四次相比,这是一种更通用的方法:
data want;
set have(in=b rename=(black=value))
have(in=g rename=(gray=value))
have(in=r rename=(red=value))
have(in=w rename=(white=value))
;
select;
when(b) color='Black';
when(g) color='Gray';
when(r) color='Red';
when(w) color='White';
otherwise;
end;
keep color value;
run;
color value
Black 57
Gray 59
Red 60
White 78
Black 67
Gray 76
Red 81
White 50
Black 52
Gray 62
Red 47
White 66