2

假设我有一组这种格式的数据:

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 创建一个索引,以便之后可以转置数据:

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 循环的有限知识,我想我需要写这样的东西:
if first.ID and not last.ID then n=1 do while ID not last n+1

类似的东西。谁能帮我准确的语法?我曾尝试在谷歌上搜索类似的代码,但运气不佳。

谢谢!

4

1 回答 1

2

为了简单起见,我会按 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;
于 2011-03-24T23:15:26.890 回答