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

问题描述

我有2个SAS表,其中一个包含有关发布到论坛中的人员的数据。例如:

enter image description here

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

enter image description here

我想匹配这些表以显示谁已发布到论坛中,因此新表看起来像这样,并带有新列以指示此人是否已与论坛表匹配:

enter image description here

解决方法

可以对表MailsPosts进行左连接。

示例:

要求ID是不同应用程序数据表中的人员通用ID。您没有提供有关IDname列角色的足够详细信息,无法确保正确的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;