Merge SAS:以不同格式组合两个数据集
我有两个格式不同的数据集 数据1看起来像: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
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
是一个内部值,等于数据步骤执行的迭代次数。”通常在一个简单的“集合”上,这等同于行号。