我有一个很大的数据集,有数百个变量和数百个观察,来自一个临床试验。变量V1是一个是/否变量,表示某些条件。V2是数字的,代表剂量。T是一个时间变量。数据集是“长”形状的,每个对象都有很少的观测,每个时间点都有一个。对于每个主题,我想要创建一个新的“是/否”变量(可以在一个新的数据集中),如果:yes:V1至少在一个时间点中为“是”,则OR,V2至少在一个时间点超过0。我该怎么做?谢谢。
发布于 2016-01-18 07:39:33
尝试以下几点:
data ds;
set ds;
if V1="yes" or V2>0 then do;
flag="yes;
end;
else do;
flag= "no";
end;将数据集汇总到ID级别:
proc sql;
create table summary as
select ID, count(flag) as flag_cnt
from ds
where flag="yes"
group by ID;
quit;这些是满足条件的ID。
发布于 2016-01-18 12:30:56
可以在下面的示例中提交代码以进行验证。
这里(V1="yes“或V2>0)为eauch行提供了一个虚拟变量。当我们把它和起来时,我们有满足每个ID的条件的行数。要有一个标志,我们将和0进行比较,并将其放在()之间,以创建您想要的0/1变量。
希望能帮上忙!
MK
data have;
input ID V1 $ V2;
cards;
1 yes 0
1 no 0
1 no 0
2 no 0
2 no 0
2 no 0
3 no 1
3 no 0
4 yes 0
4 yes 0
5 yes 1
5 no 1
5 yes 0
;
run;
proc sql;
select ID
, (sum((V1="yes")or(V2>0))>0) as new_flag
from have
group by ID;
quit;发布于 2016-01-18 14:30:10
data want (keep=id flag);
flag = 'no ';
do until (last.id);
set have;
by id;
if v1 = 'yes' or v2 > 0 then flag = 'yes';
end;
output;
run;https://stackoverflow.com/questions/34848262
复制相似问题