【问题标题】:Combining columns in a SAS dataset组合 SAS 数据集中的列
【发布时间】:2014-06-30 14:17:57
【问题描述】:

我的问题涉及将数据集中的多列合并为一列。我知道这个问题之前已经回答过好几次了,但这只是针对较大数据集之外的单个变量。这是针对较大数据集中的两个变量。

基本上,数据如下所示:

Range Pass Height Height_1 Height_2 Height_3  V   V_1   V_2   V_3   Breed Treatment
2     6    200    .        .        .         20  .     .     .     AAAA  1
2     8    .      179      .        .         .   18    .     .     BBBB  1
2     10   .      .        199      .         .   .     21    .     CCCC  1
2     12   .      .        .        188       .   .     .     19    DDDD  1
3     6    155    .        .        .         17  .     .     .     BBBB  2
3     8    .      201      .        .         .   22    .     .     AAAA  2
3     10   .      .        195      .         .   .     20    .     CCCC  2
3     12   .      .        .        188       .   .     .     18    DDDD  2

所以基本上,我想将所有四个“高度”列合并为一个高度列,并将所有四个“V”列合并为一个 V 列,同时保持所有其他列不变。

【问题讨论】:

  • 很好奇,这些数据是怎么来的?看起来它可能已经转变为您可以更轻松地将其转变为您想要的目标的方式。
  • @Joe 数据之所以如此,是因为我们收集数据的方式。我们使用了一台现场计算机,并且从一开始就根据距离做所有事情,这样我们就可以让多人记录数据。所以在那一点上,所有 8 个变量都被填充在一条直线上。使用变量,我们创建了一个差异列(0、2、4 和 6)并添加差异和起点以获得我们的通过值。品种、治疗和我们的其他变量位于单独的参考文件中,我们只需使用合并步骤将两者结合起来。
  • 当然,所以当您执行“添加差异和起点”位时,为什么不直接创建 Height 而不是 Height Height1 等?
  • 当我拥有原始数据集时,有 4 列标记为“高度”,四列标记为“V”。当我导入集合时,SAS 自己添加了数字。

标签: sql sas


【解决方案1】:

您可以在 SQL 中使用 coalesce() 执行此操作,SAS proc SQL 支持:

proc sql;
    select range, pass,
           coalesce(Height, Height_1, Height_2, Height_3) as height,
           coalesce(V, V_1, V_2, V_3) AS V,
           Breed, Treatment
    from dataset;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多