создать индекс в SAS с помощью цикла do - PullRequest
2 голосов
/ 24 марта 2011

Скажем, у меня есть набор данных в этом формате:

ID  Product account open date  
1   A   20100101  
1   B   20100103  
2   C   20100104  
2   A   20100205  
2   D   20100605  
3   A   20100101  

И я хочу создать столбец для записи последовательности открытых продуктов, чтобы таблица выглядела следующим образом:

ID  First   Second  third  
1   A   B   
2   C   A   D  
3   A       

Я знаю, что мне нужно создать индекс для каждого идентификатора, чтобы потом можно было транспонировать данные:

ID  Product account open date   sequence  
1   A   20100101    1  
1   B   20100103    2  
2   C   20100104    1  
2   A   20100205    2  
2   D   20100605    3  
3   A   20100101    1 

Из моих ограниченных знаний в цикле do я думаю, что мне нужно написать что-то подобное:
если first.ID, а не last.ID, тогда n = 1 делать, пока ID не последний n + 1

Что-то в этом роде.Может кто-нибудь помочь мне с точным синтаксисом?Я пробовал поискать похожие коды, и мне не повезло.

Спасибо!

1 Ответ

2 голосов
/ 25 марта 2011

Я бы отсортировал по ID, а затем по дате и использовал бы proc transpose для простотыВот пример:

data prod;
input ID Product $ Open_DT :yymmdd8.;
format open_dt date9.;
datalines;
1 A 20100101
1 B 20100103
2 C 20100104
2 A 20100205
2 D 20100605
3 A 20100101
;
run;
proc sort data=prod;
  by ID Open_DT;run;
proc transpose data=prod 
  out=prod_trans(drop=_name_)
    prefix=ITEM;
  by id;
  var Product;
run;

proc print data=prod_trans noobs;
run;
...