SAS如何验证值是否存在

SAS如何验证值是否存在,sas,exists,Sas,Exists,在SAS中,我想根据以下标准定义变量new\u 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级别的基础上加入原始数据集

在SAS中,我想根据以下标准定义变量
new\u 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级别的基础上加入原始数据集的引用:

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级别的基础上,将引用为原始数据集的观察结果合并到原始数据集:

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的每个后续行复制新的_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;

如果数据与示例一样简单,并且按id和引用进行排序,那么只需检查id中每个更改的引用值(使用
first.id
)。
retain
语句为具有相同id的每个后续行复制新的_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;

你发的时候我正在打字。这正是我要做的。我是在你发布的时候打出来的。这正是我要做的。