首页 > 解决方案 > 如果多个 id 包括添加一些变量,则在 SAS 中合并来自多行的数据

问题描述

希望您能提供解决方案,无论是 SQL 还是数据步骤。

如果客户 ID 相同,我需要合并多行,并添加一些带代码的变量。

我有以下静态变量容器:

%let FirstColSuffix=<Somecode1>
%let SecondColSuffix=#<SomeCode2>
%let ThirdColSuffix=#<SomeCode3>

数据有;

Customerid  Firstcol    Secondcol   Thirdcol
1   A1  A2  A3
2   B1  B2  B3
2   C1  C2  C3
2   D1  D2  D3
3   E1  E2  E3
3   F1  F2  F3
3   G1  G2  G3
3   H1  H2  H3

数据需要;

Customerid  Firstcol    Secondcol   Thirdcol    Result
1   A1  A2  A3  A1<SomeCode1>A2#<SomeCode2>A3#<SomeCode3>
2   B1  B2  B3  B1<SomeCode1>B2#<SomeCode2>B3#<SomeCode3>
2   C1  C2  C3  B1<SomeCode1>B2#<SomeCode2>B3#<SomeCode3>C1<SomeCode1>C2#<SomeCode2>C3#<SomeCode3>
2   D1  D2  D3  B1<SomeCode1>B2#<SomeCode2>B3#<SomeCode3>C1<SomeCode1>C2#<SomeCode2>C3#<SomeCode3>D1<SomeCode1>D2#<SomeCode2>D3#<SomeCode3>
3   E1  E2  E3  E1<SomeCode1>E2#<SomeCode2>E3#<SomeCode3>
3   F1  F2  F3  E1<SomeCode1>E2#<SomeCode2>E3#<SomeCode3>F1<SomeCode1>F2#<SomeCode2>F3#<SomeCode3>
3   G1  G2  G3  E1<SomeCode1>E2#<SomeCode2>E3#<SomeCode3>F1<SomeCode1>F2#<SomeCode2>F3#<SomeCode3>G1<SomeCode1>G2#<SomeCode2>G3#<SomeCode3>
3   H1  H2  H3  E1<SomeCode1>E2#<SomeCode2>E3#<SomeCode3>F1<SomeCode1>F2#<SomeCode2>F3#<SomeCode3>G1<SomeCode1>G2#<SomeCode2>G3#<SomeCode3>H1<SomeCode1>H2#<SomeCode2>H3#<SomeCode3>

我只需要最后一个客户 ID 的输出(但在“结果”列的最后一行输出所有匹配的客户 ID 的数据。

所以在这个例子中,我需要第 1、4 和 8 行

任何人都可以帮忙吗?:-)

标签: sas

解决方案


使用retain和按组处理。对于我们读取的每一行,我们将不断地连接result到自身,并将该值向前推进。在最后一个客户 ID 处,我们将输出。在第一个客户 ID 处,result被重置。

data want;
    set have;
    by Customerid;

    length Result $500.;
    retain Result;

    if(first.Customerid) then call missing(Result);
    
    Result = cats(Result, FirstCol, "&FirstColSuffix", SecondCol, "&SecondColSuffix", ThirdCol, "&ThirdColSuffix");

    if(last.Customerid);
run;

输出: 在此处输入图像描述


推荐阅读