首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标记符合SAS中两个条件的行

标记符合SAS中两个条件的行
EN

Stack Overflow用户
提问于 2016-01-18 06:11:21
回答 3查看 931关注 0票数 0

我有一个很大的数据集,有数百个变量和数百个观察,来自一个临床试验。变量V1是一个是/否变量,表示某些条件。V2是数字的,代表剂量。T是一个时间变量。数据集是“长”形状的,每个对象都有很少的观测,每个时间点都有一个。对于每个主题,我想要创建一个新的“是/否”变量(可以在一个新的数据集中),如果:yes:V1至少在一个时间点中为“是”,则OR,V2至少在一个时间点超过0。我该怎么做?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-18 07:39:33

尝试以下几点:

代码语言:javascript
复制
data ds;
set ds;
if V1="yes" or V2>0 then do;
flag="yes;
end;
else do;
flag= "no";
end;

将数据集汇总到ID级别:

代码语言:javascript
复制
proc sql;
create table summary as
select ID, count(flag) as flag_cnt
from ds
where flag="yes"
group by ID;
quit;

这些是满足条件的ID。

票数 1
EN

Stack Overflow用户

发布于 2016-01-18 12:30:56

可以在下面的示例中提交代码以进行验证。

这里(V1="yes“或V2>0)为eauch行提供了一个虚拟变量。当我们把它和起来时,我们有满足每个ID的条件的行数。要有一个标志,我们将和0进行比较,并将其放在()之间,以创建您想要的0/1变量。

希望能帮上忙!

MK

代码语言:javascript
复制
 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;
票数 1
EN

Stack Overflow用户

发布于 2016-01-18 14:30:10

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34848262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档