SAS如何验证值是否存在
在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级别的基础上加入原始数据集
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;
你发的时候我正在打字。这正是我要做的。我是在你发布的时候打出来的。这正是我要做的。