从一个 SAS 数据集访问另一个数据集

发布于 2024-08-21 18:31:26 字数 272 浏览 5 评论 0原文

有一个相当棘手的 SAS 问题,我想请求您的帮助。问题是:

我有两个 SAS 数据集;我们称它们为 setA 和 setB。 setA 中的每一行都有多个属性,其中一个属性是数据集中唯一的键值。 setB 由两个属性组成。这些属性是 setA 中的键值,并指示 setA 中具有属性 1 键值的行是具有属性 2 键值的行的重复项(重复项不包括键值)。

我需要删除 setA 中的所有重复行。

我对 SAS 相当陌生,我相信我使用的版本是 9.1。解决这个问题的最佳方法是什么?谢谢。

have a rather vexing SAS problem and I would like to ask for your help. Here's the problem:

I have two SAS data sets; let's call them setA and setB. Each row in setA has multiple attributes and one attribute is a key value that is unique within the data set. setB consists of two attributes. These attributes are key values from setA and indicate that the row in setA with attribute 1 key value is a duplicate of the row with attribute 2 key value (duplicate excluding the key value).

I need to remove all duplicate rows in setA.

I am rather new to SAS and I believe the version I am using is 9.1. What would be the best way of solving this problem? thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笑百媚生 2024-08-28 18:31:26

我对你的问题的解释是,如果 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 是 key=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 中的常用术语是“变量”而不是“属性”。)

My interpretation of your question is that if setA contains

key   value
1        67
2         3
3         4
8        16
9        16
10        4

and setB contains

key1   key2
 8        9
10        3

then you want the new setA to look like this (because key=9 is a dupe of key=8
and key=10 is a dupe of key=3):

key   value
1        67
2         3
3         4
8        16

If I have interpreted your question correctly, you can do it with this SAS code:

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;

(Also note that the usual term in SAS is "variable" rather than "attribute".)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文