Merge SAS:以不同格式组合两个数据集

Merge SAS:以不同格式组合两个数据集,merge,sas,dataset,Merge,Sas,Dataset,我有两个格式不同的数据集 数据1看起来像: data1: YYMM test1 1101 98 1102 98 1103 94 1104 92 1105 99 1106 91 数据2只是一个整体平均值,如下所示: data2: GM 95 我想将这两者结合起来,得到如下结果: WANT: YYMM test1 GM 1101 98 95 1102 98 95 1103 94 95 1104 92 95 1105 99

我有两个格式不同的数据集

数据1看起来像:

data1:

YYMM  test1
1101  98
1102  98
1103  94
1104  92
1105  99
1106  91
数据2只是一个整体平均值,如下所示:

data2:

GM
95
我想将这两者结合起来,得到如下结果:

WANT:

YYMM  test1  GM
1101  98     95
1102  98     95
1103  94     95
1104  92     95
1105  99     95
1106  91     95
我确信有不同的方法来配置它,但我认为应该将95合并成一列并与data1合并


我必须使用宏来完成这个简单的任务吗?请给我看看灯

一种简单的方法是不使用by语句直接合并,并使用retain:

data WANT (drop=temp);
    merge DATA1 DATA2 (rename=(GM=temp));
    retain GM;
    if _N_=1 then GM=temp;
run;
所以基本上你把这两个数据集放在一起。 因为没有by语句,所以它将连接两个数据集的第一个记录和两个数据集的第二个记录,依此类推

在第一条记录中(如果N=1),您获取平均值并将其放入一个变量中,最后一个值将被记住(保留GM)。 所以在记录2,3等中,值仍然是你在记录1中输入的值

为了保持干净,我在输入中重命名了GM变量,因此它可以用作保留变量的名称。当然,我去掉了冗余变量


您还可以使用宏变量或proc sql来解决此问题。但是最好保持简单。

这里有一个类似的方法,稍微简单一点

data want;
set data1;
if _n_=1 then set data2;
run;

你是如何创造平均值的?一种避免创建小数据集和合并的方法是将平均值放入宏变量(在本例中称为平均值),然后简单地执行:data data3;设置数据1;GM=&平均值。;跑;——除此之外,你可以只做数据3;合并数据1数据2;跑关于你的最后一个建议,我不认为这是正确的@scott。SAS仅在使用by语句时挂起最后一条记录。(在这种情况下,每组的最后记录)它起作用了。哇!那很容易。非常感谢您的投入!N来自哪里?它是隐藏变量之一吗?另外,为什么是1?
\N\u
是一个内部值,等于数据步骤执行的迭代次数。”通常在一个简单的“集合”上,这等同于行号。