水平合并三个 SAS 数据集并重命名列

Horizontally combine three SAS datasets with renaming of columns

我在 SAS Enterprise Guide 工作,想将三个独立的数据集合并为一个数据集。所有数据集都有一列,长度、数据类型和列数相同 header:

我的数据如下(三个 table,每个 1 列):

data1         data2        data3

apples        apples       apples
100           200          300
55            77           80
3422          32432        1234 

我希望我的输出数据如下所示(一个 table,3 列)。 headers 列应更改为我选择的名称:

output_data

green_apples  red_apples   yellow_apples
100           200          300
55            77           80
3422          32432        1234 

我已经搞砸了 SAS 合并语句和 proc_sql,但据我所知,我总是需要添加一些通用标识符(用于 BY 语句或类似的东西)。

有没有快速的方法来做我想做的事?

在此先感谢您的帮助。

data want;
  merge a(rename=apples=green_apples) 
        b(rename=apples=red_apples) 
        c(rename=apples=yellow_apples)
  ;
run;

这会按照你说的做,将数据集合并在一起,没有 by 语句。有一个选项 (options mergenoby=ERROR|WARN|NOWARN) 可能会使此语句出错或产生警告(因为这通常是错误完成的),但您可以将其设置为 NOWARN 以避免这种情况。

在 SQL 中没有创建人工行标识符的好方法。

一个快速而肮脏的解决方案可以准确匹配您发布的内容:

data output_data;
    set data1 (rename=(apples = green_apples));
    set data2 (rename=(apples = red_apples));
    set data3 (rename=(apples = yellow_apples));
run;

请记住,此解决方案将受到 最小 数据集中观测值数量的限制。

但是,您似乎希望按照记录在数据集中出现的顺序 来匹配记录?如果是这样,描述顺序的标识符字段会有所帮助(例如,如果数据集具有不同的观察计数)。一种方法是使用 _N_ 自动变量:

/*
    Changing observation counts
*/
data data1;
    id = _N_;
    input apples 8.;
    cards;
100
55
3422
;
run;

data data2;
    id = _N_;
    input apples 8.;
    cards;
200
77
32432
1
2
;
run;

data data3;
    id = _N_;
    input apples 8.;
    cards;
300
80
1234 
5
;
run;

data output_data;
    merge data1 (in=d1 rename=(apples = green_apples))
          data2 (in=d2 rename=(apples = red_apples))
          data3 (in=d3 rename=(apples = yellow_apples));
    by id;
    if d1 or d2 or d3;
run;

此处,数据集选项 (in=d1... 创建一个临时变量 d1 并将其设置为 1 如果来自 data1 的记录匹配来自 [=17] 的记录=] 或 data3 通过 id.