我有一个大型数据集,有数百个变量和数百个观察结果来自临床试验。变量V1是是/否变量,表示某些条件。 V2是数字,表示剂量。 T是时间变量。数据集是“长”形的,每个主题几乎没有观察结果,每个时间点一个。对于每个主题,我想创建一个新的是/否变量(可以在新数据集中),如果:V1在至少一个时间点为“是”,则为是,或者,V2在至少一个时间点内高于0。我怎么做?谢谢。
答案 0 :(得分:1)
尝试以下方法:
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
答案 1 :(得分:1)
您可以提交以下示例中的代码进行验证。
这里(V1 =“是”或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;
答案 2 :(得分:0)
select tg.*,
(select tgc.amount from @tg tgc where tgc.id = tg.cid)
from @tg tg;