SAS中文论坛

标题: 两个数据集的合并 [打印本页]

作者: shiyiming    时间: 2010-9-14 20:51
标题: 两个数据集的合并
请教大虾, 下面这个数据集如何处理
Data A: code date         a   b  
1              20090101
        …
1        20091231
2        20090101
        …
2         20091231


100         20091231
Data B:  code  sdate
1        20090503
4   20090802
7   20090314
7   20090426

Data A 四列, a, b(3,4列的数值省略),code从1-100, 每个code都有2009年全年的数据,Data B 是Data A 的子集,Data B两列,现在想删除data A 中的不再data B中的code,如code 2,
并且生成 data C: code date        a  b  sdate
                1   20090101        20090503
                …
         1   20091231        20090503
                4   20090101        20090802
                …
         4   20091231        20090802
                7   20090101        20090314
                …
         7   20091231        20090314
                7   20090101        20090426
                ..
               7   20091231          20090426
            …
作者: shiyiming    时间: 2010-9-15 10:09
标题: Re: 两个数据集的合并
直接由data b 生成;
[code:3u5baw9k]
data b;
input code sdate yymmdd8.;
format sdate yymmddn8.;
cards;
1 20090503
4 20090802
7 20090314
7 20090426
;
run;

data c;
set b;
do m=1 to 12;
     endday=intnx('month',mdy(m,1,2009),0,'end');
     inv=endday-mdy(m,1,2009)+1;
     do  d=1 to inv;
            mydate=mdy(m,d,2009);
                output;
         end;
  end;
format mydate yymmddn8.;
keep code mydate sdate;
run;
[/code:3u5baw9k]

或者用SQL;
[code:3u5baw9k]
proc sql;
create table c as
select b.code,a.mydate,b.sdate from a inner join b
on a.code=b.code;
quit;
[/code:3u5baw9k]
作者: shiyiming    时间: 2010-9-15 11:14
标题: Re: 两个数据集的合并
谢谢nobodyknows, 我用sql试了下,对于data B中只出现 1个代码,1个时间的可以, 但是同一个代码, 2个或者多个时间的得到的data C中 sdate是交替出现, 我想得到的是 例如code 7出现 20090314 和20090506, 那么20090314作为sdate和2009年全年对应, 然后20090506再作为sdate和2009年对应
作者: shiyiming    时间: 2010-9-15 14:01
标题: Re: 两个数据集的合并
貌似再排个序吧......
作者: shiyiming    时间: 2010-9-16 11:12
标题: Re: 两个数据集的合并
呵呵,我笨啊




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2