我有2个SAS表,一个是关于已经在论坛上发帖的人的数据。例如:

我有一个表,里面有一个人的列表:

我想要匹配这些表,以显示谁在论坛上发表了帖子,所以新表看起来像这样,其中包含一个新列,用于指示此人是否与论坛表匹配:

发布于 2020-09-11 21:55:07
可以对表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发布于 2020-09-12 06:30:11
这是一个使用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;发布于 2020-09-12 23:02:43
让我们假设您的用户列表是唯一的(每个名字只有一个观察值),但帖子列表不是(每个名字可能有多个帖子)。
首先确保数据按键变量(名称)排序,然后合并这两个变量。然后,您可以使用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;https://stackoverflow.com/questions/63844025
复制相似问题