合并一列中具有值而另一列中为空的行

时间:2019-10-29 13:33:12

标签: sql sas

我在SAS数据集中有一个包含许多参数的数据集。他们都属于同一组。我需要能够将参数组合成每组一行。它们将具有null或值。如果该参数没有值,则需要保留null。我知道我可以通过为每个参数创建单独的表然后再链接回主数据集来实现这一点,但是如果可能的话,我想避免很多参数。

拥有:

+-------+--------+--------+--------+--------+--------+
| group | param1 | param2 | param3 | param4 | param5 |
+-------+--------+--------+--------+--------+--------+
|     1 |        | text1  |        |        |        |
|     1 | text2  |        |        |        |        |
|     1 |        |        |        | text3  |        |
|     2 |        |        |        |        |        |
|     2 |        |        | text4  |        |        |
|     3 |        |        |        |        |        |
+-------+--------+--------+--------+--------+--------+

需要:

+-------+--------+--------+--------+--------+--------+
| group | param1 | param2 | param3 | param4 | param5 |
+-------+--------+--------+--------+--------+--------+
|     1 | text2  | text1  |        | text3  |        |
|     2 |        |        | text4  |        |        |
|     3 |        |        |        |        |        |
+-------+--------+--------+--------+--------+--------+

2 个答案:

答案 0 :(得分:2)

在普通的sql中,应该是

proc sql;
    select group
         , max(param1) as param1
         , max(param2) as param2
         , max(param3) as param3
         , max(param4) as param4
         , max(param5) as param5
    from table
    group by group;
quit;  

答案 1 :(得分:0)

这就是数据步骤UPDATE语句的作用。该语句需要一个SOURCE和TRANSACTION数据集,但是您可以通过在一个副本上使用数据集选项NOBS = 0从一个空的源数据集开始使用这两个数据集。

data want;
  set have(obs=0) have;
  by group;
run;