SAS如何验证一个值是否存在

SAS how to verifiy if a value exists

在 SAS 中,我想通过以下条件定义变量 new_var

对于每个id,如果存在reference='A',则new_var='A'; else new_var='B',例如:

id  reference  new_var
--  ---------  -------
1   A          A
1   B          A
1   C          A
2   B          B   
2   B          B   

提前致谢!

您可以在 id 级别的基础上将引用为 A 的观察值加入原始数据集:

data have;
   input id $ reference $;
   datalines;
     1       A
     1       B
     1       C
     2       B
     2       B  
    ;
run;

proc sql;
    create table want as select
        a.id, a.reference,
        case when b.reference = "A" then "A" else "B" end as new_var
        from have as a
        left join have (where = (reference = "A")) as b
        on a.id = b.id
        order by a.id, a.reference;
quit;

如果数据像您的示例一样简单并且按 id 和引用排序,那么只需检查 id 的每个更改的引用值(使用 first.id)。 retain 语句为具有相同 ID 的每个后续行复制 new_var 值。

如果正在检查的参考值并不总是按字母顺序排在第一位,则此方法将不起作用。

data have;
input id reference $;
datalines;
1       A
1       B
1       C
2       B
2       B
;
run;

data want;
set have;
by id reference;
retain new_var;
if first.id then do;
    if reference='A' then new_var='A';
    else new_var='B';
end;
run;