问题描述
我有2个SAS表,其中一个包含有关发布到论坛中的人员的数据。例如:
我想匹配这些表以显示谁已发布到论坛中,因此新表看起来像这样,并带有新列以指示此人是否已与论坛表匹配:
解决方法
可以对表Mails
和Posts
进行左连接。
示例:
要求ID
是不同应用程序数据表中的人员通用ID。您没有提供有关ID
和name
列角色的足够详细信息,无法确保正确的ON
子句。
select
Mails.ID,Mails.Name,Mails.Email
case when Posts.Post is null then 0 else 1 end as Posted
from
Mails
left join
Posts
on
Mails.ID = Posts.ID
,
这是使用SAS数据步骤的解决方案。假设表名是MAILS和POSTS
data POSTED;
merge MAILS (in=s1) POSTS (in=s2);
by ID;
if s1 and s2 then do;
posted=1;
output;
end;
if s1 and not s2 then do;
posted=0;
output;
end;
drop post;
run;
,
让我们假设您的用户列表是唯一的(每个NAME仅观察一次),但帖子列表不是唯一的(每个NAME可能有多个帖子)。
首先确保数据按键变量(NAME)排序,然后将两者合并。然后,您可以使用IN =数据集选项来指示该数据集是否对当前观测值有所贡献。看起来无论您发表多少帖子,您都只希望用户出现一次,因此您可以使用FIRST.NAME标志。我还将排除不在名称列表中的名称发布的帖子,但是您可以保留这些帖子,因为它们只会缺少来自名称数据集的变量(EMAIL)的值。通过IN =数据集选项创建的变量不会写入输出数据集,因此请将其复制到将要写入的另一个变量。
proc sort data=names; by name; run;
proc sort data=posts; by name; run;
data want;
merge names(in=innames) posts(in=inposts);
by name;
if first.name and innames;
posted = inposts;
run;