2014-02-21 6 views
0

У меня есть большой набор данных транзакций, которые нужно сделать транспонировать. данные у меня есть:sas transpose набор данных

id  prod 
1   A 
1   B 
1   C 
1   B 
1   B 
2   A 
2   B 
2   B 
2   B 
2   D 

мне нужно перенести его в

id PROD_1 PROD_2 PROD_3 
1  A  B  C 
2  A  B  D 

есть много переменных, нужно сделать этот вид работы. Любая помощь приветствуется. На самом деле не имеет понятия. Или если у вас есть идея превратить эту информацию о prod в набор данных, который сможет анализировать, пожалуйста, дайте мне знать.

ответ

0

Если это большой набор данных, вам необходимо подумать об эффективности. Его нужно сначала отсортировать (или проиндексировать) в переменной идентификатора. Кроме того, убедитесь, что вы только сохраняете (обрабатываете) соответствующие переменные:

proc transpose data=input(keep=id prod) out=output(drop=_name_) prefix=PROD_; 
by id; 
var prod; 
run; 
1

Вы можете перенести столько переменных, сколько захотите на одном шаге данных. Это, как правило, гораздо быстрее, чем делать то же самое с Proc транспонированной:

data want; 
    if 0 then set have; /*Keeps all columns in the original order*/ 
    array prods[5] $ prod1-prod5; 
    do _n_ = 1 by 1 until(last.id); 
    set have; 
    by id; 
    prods[_n_] = prod; 
    run; 
run; 

Просто добавьте больше массивов по мере необходимости для каждой переменной, которую вы хотите перенести. Это предполагает, что вы хотите посмотреть только то же количество строк для каждого идентификатора - если вы не уверены, сколько их есть, вам нужно сделать дополнительный начальный проход, чтобы узнать, насколько вам нужно массивы ,

Этот метод известен как DOW-loop. Дополнительная информация: http://analytics.ncsu.edu/sesug/2010/BB13.Dorfman.pdf

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