标记在SAS中满足两个条件的行

时间:2016-01-18 06:11:22

标签: sas

我有一个大型数据集,有数百个变量和数百个观察结果来自临床试验。变量V1是是/否变量,表示某些条件。 V2是数字,表示剂量。 T是时间变量。数据集是“长”形的,每个主题几乎没有观察结果,每个时间点一个。对于每个主题,我想创建一个新的是/否变量(可以在新数据集中),如果:V1在至少一个时间点为“是”,则为,或者,V2在至少一个时间点内高于0。我怎么做?谢谢。

3 个答案:

答案 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;