Join 如何在SAS中的数据集中找到匹配项后创建新变量

Join 如何在SAS中的数据集中找到匹配项后创建新变量,join,sas,matching,Join,Sas,Matching,我有两个SAS表,其中一个有关于发布到论坛中的人的数据。例如: 我有一张桌子,上面有一张名单: 我想匹配这些表以显示谁已发布到论坛中,因此新表如下所示,并带有一个新列,以指示此人是否已与论坛表匹配: 可以完成表邮件和帖子的左连接 例如: 要求ID为不同应用程序数据表中的人员通用ID。您没有提供有关ID和name列角色的足够详细信息,以确保ON子句正确 select Mails.ID, Mails.Name, Mails.Email case when Posts.Pos

我有两个SAS表,其中一个有关于发布到论坛中的人的数据。例如:

我有一张桌子,上面有一张名单:

我想匹配这些表以显示谁已发布到论坛中,因此新表如下所示,并带有一个新列,以指示此人是否已与论坛表匹配:


可以完成表
邮件
帖子
的左连接

例如:

要求
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数据步骤的解决方案。假设表名是邮件和帖子

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;

假设您的用户列表是唯一的(每个名称只有一个观察结果),但帖子列表不是唯一的(每个名称可能有多篇帖子)

首先确保数据按键变量(名称)排序,然后合并这两个变量。然后,可以使用IN=dataset选项指示该数据集是否对当前观测有贡献。看起来您只希望用户出现一次,无论他们发表了多少篇文章,这样您就可以使用FIRST.NAME标志。我还将排除由不在名称列表中的名称制作的帖子,但您可以保留这些帖子,它们只是缺少来自名称数据集的变量(电子邮件)的值。IN=dataset选项创建的变量不会写入输出数据集,因此请将其复制到将要写入的另一个变量

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;

在发布问题之前,你应该展示你已经尝试过或考虑过的东西。谢谢你的评论。我没有提供这个,因为我没有任何想法,希望得到帮助。