全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4490 5
2010-05-31
悬赏 5 个论坛币 已解决
一共两个数据集a 和 b,
a:共3个变量                                                     
      dn       time                  age  
      1         2009-01-01       .      
      2         .                         18  
      3         2009-02-01       .      
      4                                    21      
      5         2009-03-01        20      
b:共4个变量
      dn       time                  age        sex
      1         .                         17          男
      2         2009-02-01         .           女
      6         2009-05-01       19          女
      7         2009-04-01         .           女
      8         2009-06-01        20        男


想要生成一个新的数据集c:(即相同的变量保留,不同的变量合并)
    dn       time                  age        sex
      1         2009-01-01      17          男
      2         2009-02-01       18           女
      3         2009-02-01       .      
      4                                    21      
      5         2009-03-01        20      
      6         2009-05-01       19          女
      7         2009-04-01         .           女
      8         2009-06-01        20        男

相当于2个数据集中都没有的dn号直接merge,而相同的dn号则如果A内为空则用B内的数据updata。
这只是举个小例子,实际我碰到的情况是2个数据集内变量都特别多。
望高手指教,谢谢!

最佳答案

bobguy 查看完整内容

You can use a update statement as showed in below. data a; input dn : time : yymmdd10. age ; format time date9.; cards; 1 2009-01-01 . 2 . 18 3 2009-02-01 . 4 . 21 5 2009-03-01 20 ; data b; input dn : ...
二维码

扫码加我 拉你入群

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

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

全部回复
2010-5-31 23:55:16
fjhzxk 发表于 2010-5-31 23:55
一共两个数据集a 和 b,
a:共3个变量                                                     
      dn       time                  age  
      1         2009-01-01       .      
      2         .                         18  
      3         2009-02-01       .      
      4                                    21      
      5         2009-03-01        20      
b:共4个变量
      dn       time                  age        sex
      1         .                         17          男
      2         2009-02-01         .           女
      6         2009-05-01       19          女
      7         2009-04-01         .           女
      8         2009-06-01        20        男


想要生成一个新的数据集c:(即相同的变量保留,不同的变量合并)
    dn       time                  age        sex
      1         2009-01-01      17          男
      2         2009-02-01       18           女
      3         2009-02-01       .      
      4                                    21      
      5         2009-03-01        20      
      6         2009-05-01       19          女
      7         2009-04-01         .           女
      8         2009-06-01        20        男

相当于2个数据集中都没有的dn号直接merge,而相同的dn号则如果A内为空则用B内的数据updata。
这只是举个小例子,实际我碰到的情况是2个数据集内变量都特别多。
望高手指教,谢谢!
You can use a update statement as showed in below.

data a;
input  dn  :  time  : yymmdd10. age   ;
format time date9.;
cards;
      1         2009-01-01       .      
      2         .                         18  
      3         2009-02-01       .      
      4         .                          21      
      5         2009-03-01        20      
      ;

data b;
input  dn  :  time  : yymmdd10.  age   :  sex : $1.;
format time date9.;
cards;
      1         .                       17        M
      2         2009-02-01         .          F
      6         2009-05-01       19         F
      7         2009-04-01         .          F
      8         2009-06-01        20        M
      ;

data a;
  update a b;
  by dn;
run;

proc print; run;
二维码

扫码加我 拉你入群

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

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

2010-6-1 00:26:08
这个有难度,一般意义下后面的会覆盖前面的数据。
二维码

扫码加我 拉你入群

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

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

2010-6-1 00:55:34
sql+COALESCE应该能解决问题吧,要睡觉了,明天再来看看
二维码

扫码加我 拉你入群

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

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

2010-6-1 01:00:37
试试看
data a;
length time $ 12;
input dn $ time $ age;
cards;
1         2009-01-01       .      
2         .               18  
3         2009-02-01       .      
4         .                  21      
5         2009-03-01        20  
;
run;
data b;
length time $ 12;
input dn $ time $ age sex $;
cards;
1         .                 17          男
2         2009-02-01         .           女
6         2009-05-01       19          女
7         2009-04-01         .           女
8         2009-06-01        20        男
;
run;
proc sql;
select  coalesce(a.dn,b.dn) as dn,coalesce(a.time,b.time) as time,coalesce(a.age,b.age) as age,sex
from a
full join
b
on a.dn=b.dn;
quit;
二维码

扫码加我 拉你入群

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

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

2010-6-1 09:26:05
谢谢bobguy,以后向您好好学习。
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

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