动态创建新列以为相同的id写入不同的行值

时间:2017-11-02 13:24:30

标签: sql sas duplicates teradata

在Teradata Sql中(如果可能的话,也可以在SAS中执行)我正在尝试根据给定ID有多个不同值的字段来复制重复项。我不想丢失该列中的新的不同值,因此我想将其写为新列。可能存在任意数量的不同值,因此必须动态计算每个不同的值并为每个值写一个新列。下面是表格示例:

 ID |   V1    |    V2   |
 A  |  Mike   |    25   |
 A  |  Mike   |    26   |
 A  |  Mike   |    27   |

要:

 ID |   V1    |  V2  | V2.1 | V2.2 |
 A  |  Mike   |  25  |  26  |  27  |

1 个答案:

答案 0 :(得分:1)

这可以使用proc transpose在SAS中轻松完成,这将动态创建新列。在这种情况下,您将by变量设置为id(或idV1的组合)。

data tmp;
input id $ V1 $ V2;
    datalines;
A Mike 25
A Mike 30
B Mark 4
C Mack 23
C Mack 40
C Mack 90
;
run;

proc sort data=tmp;
by id v1;
run;

proc transpose data=tmp out=trans;
by id V1;
var v2;
run;

proc print;

结果输出如下:

Obs    id     V1     _NAME_    COL1    COL2    COL3

 1     A     Mike      V2       25      30       .
 2     B     Mark      V2        4       .       .
 3     C     Mack      V2       23      40      90

还有很多其他选项可用于更改文档中输出的名称。