楼主: jjltcfa
1070 6

[问答] 求助:各种纠结的数据更新。请大家帮忙,辛苦了。 [推广有奖]

  • 6关注
  • 1粉丝

本科生

16%

还不是VIP/贵宾

-

TA的文库  其他...

sAs of K

威望
0
论坛币
664 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
809 点
帖子
70
精华
0
在线时间
73 小时
注册时间
2011-12-1
最后登录
2017-9-27

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
关键词:数据更新 status exist type time SAS

回帖推荐

ziyenano 发表于2楼  查看完整内容

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

yongyitian 发表于4楼  查看完整内容

沙发
ziyenano 发表于 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;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
jjltcfa + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

藤椅
jjltcfa 发表于 2013-7-12 23:13:27 |只看作者 |坛友微信交流群
希望能得到大家的帮助, 先谢过了。

使用道具

板凳
yongyitian 发表于 2013-7-13 00:32:01 |只看作者 |坛友微信交流群
  1. data a;
  2. input ID $ TYPE $ STATUS $ NEXIST  DE  NDE  PONE;
  3. datalines;
  4. hij MC ZC 1 0 0 0
  5. aaa MC ZC 1 0 0 0
  6. bbb MC ZC 1 0 0 0
  7. fgh MC QX 1 0 0 0
  8. ; run;

  9. data b;
  10. input ID $ TYPE $ STATUS $ TIME;
  11. datalines;
  12. aaa PER ZC 40
  13. bbb PER QX 29
  14. ; run;

  15. proc sort data=a; by id; run;
  16. proc sort data=b; by id; run;

  17. data c;
  18.     merge a(in=ina) b(in=inb rename=(type=type_b status=status_b));
  19.     by id;
  20.     if ina;
  21. run;

  22. data want;
  23.     set c;
  24.    NEXIST = ifc(missing(type_b), 1,0);
  25.        DE = ifc(not missing(type_b) and status_b='QX', 1, 0);
  26.       NDE = ifc(not missing(type_b) and status_b='ZC', 1, 0);
  27.      PONE = ifc(not missing(type_b) and time <= 30, 1,0);
  28.   drop type_b status_b time;
  29. run;
  30. proc print data=want; title 'want'; run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
jjltcfa + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

报纸
jjltcfa 发表于 2013-7-13 10:35:57 |只看作者 |坛友微信交流群
在线等

使用道具

地板
jjltcfa 发表于 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,
谢谢您的帮忙,水平真的高超,向您学习,希望以后基础雄厚些了也可以像您一样帮助其他朋友解决问题。 再次感谢!

使用道具

7
jjltcfa 发表于 2013-7-13 11:58:04 |只看作者 |坛友微信交流群
yongyitian 发表于 2013-7-13 00:32
真的是太感谢了,看到您最后一次编辑是在凌晨时间01:12,我只能说是感动的一塌糊涂,辛苦了辛苦了。您的代码看起来调理同样很清晰,用较为常见的代码解决了这个问题,感觉到您的基础功底真的是非常的扎实。虽然没有选择您的答案为最佳答案,但希望您知道我真的是非常的感谢您的帮忙,解决了昨天困扰了好久的问题。谢谢了。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 18:16