2014-01-30 2 views
1

У меня есть набор данных, в котором есть имя человека и сколько раз они набрали 1-10. Например, Боб набрал 7 1, 8 2 и 7 4, но не получил никаких других баллов.SAS Перевести счетчик клеток на определенные значения

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 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

Можете ли вы предоставить образец исходного набора данных? –

+0

Дмитрий-я включил снимок того, что Боб будет выглядеть в исходном наборе данных. – pyll

ответ

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; 
+0

Это прекрасно. Хороший старый proc транспонирует! Большое вам спасибо, Дмитрий. – pyll

Смежные вопросы