首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SAS中找到数据集中的匹配项后创建新变量

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

Stack Overflow用户
提问于 2020-09-11 17:09:12
回答 3查看 173关注 0票数 0

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

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

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

EN

回答 3

Stack Overflow用户

发布于 2020-09-11 21:55:07

可以对表MailsPosts进行左连接。

示例:

要求ID为不同应用程序数据表中的人员公共ID。您没有提供有关IDname列角色的足够详细信息,无法确保ON子句正确。

代码语言:javascript
复制
  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
票数 0
EN

Stack Overflow用户

发布于 2020-09-12 06:30:11

这是一个使用SAS数据步骤的解决方案。假设表名为MAILS和POSTS

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2020-09-12 23:02:43

让我们假设您的用户列表是唯一的(每个名字只有一个观察值),但帖子列表不是(每个名字可能有多个帖子)。

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

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63844025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档