我有类似的数据 (由于数组下标超出范围错误,这不会起作用):
data test;
array id {5} (1, 8, 4, 12, 23);
array a_ {5};
do i = 1 to 5;
a_[id[i]] = id[i];
end;
run;
我想做的是, 创建变量以' a _'开头。和数组id的值。 含义:a_1,a_8,a_4,a_12,a_23
这只有在我用23个成员声明数组a_时才有效:
data test;
array id {5} (1, 8, 4, 12, 23);
array a_ {23};
do i = 1 to 5;
a_[id[i]] = id[i];
end;
run;
但是后来我得到了许多我不需要的缺失变量。 我只想要上面的5。
我怎样才能做到这一点?
答案 0 :(得分:4)
PROC TRANSPOSE通常是最简单的方法。
首先,制作一个如下的垂直数据集:
data vert;
array id[5] (1,8,4,12,23);
do _i = 1 to dim(id);
varname = cats('A_',id[_i]);
vvalue = 1; *it is not apparent to me what the value should be in A_12 or whatnot;
output;
end;
run;
然后PROC TRANSPOSE生成您想要的数据集。
proc transpose data=vert out=want;
id varname;
var vvalue;
run;