我有一个数据集,其中包含一个人的姓名以及他们得分1-10的次数。例如,鲍勃得到7分,8分和7分,但没有得到任何其他分数。
Name 1 2 3 4 5 6 7 8 9 10
Bob 7 8 7 0 0 0 0 0 0 0
Hal 9 3 1 0 0 0 0 0 0 0
我想要一个具有Bob行的数据集,看起来像这样
Bob 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4
Hal 1 1 1 1 1 1 1 1 1 2 2 2 3
顺便说一句,我在SAS中这样做。
我知道我可以编写一个宏来创建名为score1,score2,...,scoreN。
的变量我在填充细胞方面遇到了麻烦。任何帮助,将不胜感激。感谢。
答案 0 :(得分:1)
这样的事情 - 改变数据集的结构 - 有时使用PROC TRANSPOSE更容易:
data have;
input Name $ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10;
datalines;
Bob 7 8 7 0 0 0 0 0 0 0
;
run;
/*convert original wide dataset into long one*/
proc transpose data=have out=have_long;
var v:;
by Name;
run;
data want;
set have_long;
substr(_NAME_,1,1)=""; *to get rid of first 'v' in variables' names;
do i=1 to COL1;
new_var=_NAME_;
output;
end;
drop _NAME_ COL1 i;
run;
/*convert back to wide dataset*/
proc transpose data=want out=want(drop=_NAME_);
var new_var;
by Name;
run;