全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1323 6
2013-07-12
悬赏 180 个论坛币 已解决

数据设定为AID值包含BID值,反言之BID值必然会在A组中出现。

数据处理仅对BID值对应的A组观测的 NEXIST DE NDE PONE 4个变量值进行更新。 两组数举例如下,

数据A   

变量ID  TYPE   STATUS  NEXIST  DE  NDE  PONE

       hij   MC        ZC            1         0      0      0

       aaa MC        ZC           1         0      0     0

       bbb MC        ZC            1        0      0     0

       fgh MC        QX            1        0       0     0


数据B  

变量ID  TYPE  STATUS  TIME

        aaa PER    ZC      40

        bbb  PER   QX       29


更新规则如下:

若A组数据ID存在对应的B组ID,则将相应A组ID观测的NEXIST值更改为0,若A组数据ID没有对应的BID观测,A组数据相应NEXIST值仍保持为1.

A组数据ID值在B组数据存有对应ID值,且B组对应ID观测 STATUSQX时,A组相应观测DE值变为1,否则DE保持为0

A组数据ID值存在B组数据对应ID值,且B组对应ID观测 STATUSZC时,A组相应NDE值变为1,否则NDE保持为0

A组数据ID值存在B组数据对应ID值,且B组对应ID观测 TIME小于等于30时,A组相应PONE值变为1,否则PONE保持为0

理想结果为  数据A   

变量ID  TYPE   STATUS  NEXIST  DE  NDE  PONE  

        hij     M        ZC           1          0     0       0   

        aaa  M        ZC           0          0     1       0

        bbb M        ZC           0          1     0       1

        fgh  M        QX           1          0     0       0   

  

SAS新手,想了很久也没有结果,所以请大家帮忙解答,谢谢大家了。不知道逻辑写的清不清楚,已经尽量了。

对比A组4各变更变量NEXIST DE NDE和PONE的原始数据与更新后数据

更新前

aaa M  ZC  1  0  0   0

bbb M  ZC  1  0  0   0

更新后

aaa M  ZC  0  0  1   0

bbb M  ZC  0  1  0   1


最佳答案

ziyenano 查看完整内容

proc sql; create table c as select t.id ,t.type,t.status, case when t1.type is not null then 0 else t.NEXIST end as NEXIST, case when t1.STATUS='QX' then 1 else t.DE end as DE, case when t1.STATUS='ZC' then 1 else t.NDE end as NDE, case when t1.time is not null and t1.time
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-7-12 23:12:49
proc sql;
create table c as
select t.id ,t.type,t.status,
case when t1.type is not null then 0 else t.NEXIST end as NEXIST,
case when t1.STATUS='QX' then 1 else t.DE  end as DE,
case when t1.STATUS='ZC' then 1 else t.NDE  end as NDE,
case when t1.time is not null and t1.time<=30  then 1 else t.PONE end as PONE
from a t
left join
b t1
on t.id=t1.id;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-12 23:13:27
希望能得到大家的帮助, 先谢过了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-13 00:32:01
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-13 10:35:57
在线等
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-13 11:54:44
ziyenano 发表于 2013-7-12 23:12
proc sql;
create table c as
select t.id ,t.type,t.status,
谢谢您的帮忙,水平真的高超,向您学习,希望以后基础雄厚些了也可以像您一样帮助其他朋友解决问题。 再次感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群