SAS将细胞计数转换为特定值

时间:2014-01-30 02:11:51

标签: sas

我有一个数据集,其中包含一个人的姓名以及他们得分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。

的变量

我在填充细胞方面遇到了麻烦。任何帮助,将不胜感激。感谢。

1 个答案:

答案 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;