有一个相当棘手的SAS问题,我想请求你的帮助。这是问题所在:
我有两个SAS数据集;我们称之为setA和setB。 setA中的每一行都有多个属性,一个属性是数据集中唯一的键值。 setB由两个属性组成。这些属性是setA中的键值,表示setA中具有属性1键值的行是具有属性2键值的行的副本(重复不包括键值)。
我需要删除setA中的所有重复行。
我对SAS很新,我相信我使用的版本是9.1。解决这个问题的最佳方法是什么?谢谢。
答案 0 :(得分:5)
我对你的问题的解释是,如果setA包含
key value
1 67
2 3
3 4
8 16
9 16
10 4
和setB包含
key1 key2
8 9
10 3
然后你希望新的setA看起来像这样(因为key = 9是key = 8的欺骗 和key = 10是一个密钥= 3):
key value
1 67
2 3
3 4
8 16
如果我已正确解释您的问题,您可以使用此SAS代码执行此操作:
data dupes_to_remove (keep=larger_key rename=(larger_key=key));
set setB;
if key1 > key2 then larger_key = key1;
else larger_key = key2;
output;
run;
proc sort data=dupes_to_remove nodupkey;
by key;
run;
data setA_new;
merge setA dupes_to_remove (in=in_dupes);
by key;
if not in_dupes;
run;
(另请注意,SAS中的常用术语是“变量”而不是“属性”。)