Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 动态创建新列以写入相同id的不同行值_Sql_Sas_Duplicates_Teradata - Fatal编程技术网

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

Sql 动态创建新列以写入相同id的不同行值,sql,sas,duplicates,teradata,Sql,Sas,Duplicates,Teradata,在Teradata Sql中(如果可能的话,也可以在SAS中执行),我尝试为几个字段清除重复项,其中给定ID有多个不同的值。我不想在该列中丢失新的不同值,因此我希望将其作为新列写入。可以有任意数量的不同值,因此它必须动态计算每个不同值,并为每个值编写一个新列。下表为示例: ID | V1 | V2 | A | Mike | 25 | A | Mike | 26 | A | Mike | 27 | 致: 这可以在S

在Teradata Sql中(如果可能的话,也可以在SAS中执行),我尝试为几个字段清除重复项,其中给定ID有多个不同的值。我不想在该列中丢失新的不同值,因此我希望将其作为新列写入。可以有任意数量的不同值,因此它必须动态计算每个不同值,并为每个值编写一个新列。下表为示例:

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


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

结果输出如下所示:

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

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

如果插入另一行,预期结果是什么?你想突然出现第四列吗?@jarlh是的,我想添加列,直到Mike有了新的ID。谢谢,我会试试这个。我确实忘了提到我有几个专栏需要做这件事。那么我可以在proc转置中使用多个变量吗?是的,您可以使用多个变量。默认情况下,它们将列在
\u NAME\u
变量下。我想我不理解NAME列中的V2。那不应该是迈克,马克,麦克,身份证分别是A,B,C吗?我试过运行这个,有5个变量,SAS EG冻结在我身上。。。将在较小的数据集上进行尝试。@CGermain您可以将
by
语句更改为
by id v1,它将保留该列。我正在运行这个程序,它将返回column:NAME和我的变量名(在示例中,所有行都将是“V2”,另一个column:LABEL在所有行中也返回“V2”)。
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