所以,我熟悉SAS中的合并,之前没有遇到任何问题,但我发现今天的问题以前从未出现过问题。 出于某种原因,观察的实际合并在更复杂的数据集中正常工作,但它只列出了其中一个数据集的变量值(例如,它不会覆盖缺失值)。
例如,我写了这个简单的程序:
data dataset1;
input id var1 var2 var3 var4;
cards;
1 . . 2 2
2 . . 2 2
3 . . 2 2
4 . . 2 2
5 . . 2 2
6 . . 2 2
7 . . 2 2
8 . . 2 2
9 . 2 . 2
10 1 . . .
;
data dataset2;
input id var1 var2 var3 var4;
cards;
1 2 2 . .
2 2 2 . .
3 2 2 . .
4 2 2 . .
5 2 2 . .
6 2 2 . .
7 2 2 . .
8 2 2 . .
10 . 1 . .
;
data dataset3;
merge dataset1 dataset2;
by id;
run;
这应该产生以下结果:
id var1 var2 var3 var4
1 2 2 2 2
2 2 2 2 2
3 2 2 2 2
4 2 2 2 2
5 2 2 2 2
6 2 2 2 2
7 2 2 2 2
8 2 2 2 2
9 . 2 . 2
10 1 1 . .
但相反,我得到了这个:
id var1 var2 var3 var4
1 2 2 . .
2 2 2 . .
3 2 2 . .
4 2 2 . .
5 2 2 . .
6 2 2 . .
7 2 2 . .
8 2 2 . .
9 . 2 . 2
10 . 1 . .
因此,就好像合并正在合并观察结果,然后只显示第二个数据集的值。
我试图找出问题(我觉得这是我刚才看到的非常基本的东西),但我不知道发生了什么,因为我以前从未遇到过这个问题。 / p>
任何人都知道出了什么问题?
感谢您的帮助。
答案 0 :(得分:1)
您的问题是您要按ID
合并数据集,但两个数据集都包含变量VAR1-VAR4
。因此,当两个数据集对观察结果有贡献时,MERGE语句中最后列出的数据集将“赢”。
之前您可能从未见过的原因是,通常在合并两个数据集时,它们共有的唯一变量是关键变量。因此,从第一个数据集中读取的值被第二个数据集中读取的值覆盖的事实并不重要。
要获得您想要的内容,您可以使用UPDATE语句。更新不会替换缺少值的值。基本上它旨在将事务应用于主数据集。
由于看起来每个ID在DATASET1中只有一个观察点,您可以使用DATASEt1作为主数据集。
data want ;
update dataset1 dataset2 ;
by id ;
run;