全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7445 11
2009-12-01
悬赏 5 个论坛币 未解决
一共两个数据集a 和 b,
a:共4个变量                                                     
      index           code    year        x
      12003           1        2003       1
      12004           1        2004       2
      12005           1        2005       3
      22004           2        2004       4
      42005           4        2005       5
b:共5个变量
     index             code    year       y
     12003             1         2003     6
     12004             1         2004     7
     22005             2         2005     8
     32005             3         2005     9
(1)想要生成一个新的数据集c:(即相同的变量保留,不同的变量合并)
    index              code     year        x           y
   12003               1         2003       1           6
   12004               1         2004       2           7
   12005               1         2005       3           .
   22004               2         2004       4           .
   22005               2         2005       .            8
   42005               4         2005       5           .
   32005               3         2005       .            9
(2)生成一个新的数据集d:(要求,提取相同code各year都有的数据)
  index                code      year       x         y
  12003                1          2003      1         6
  12004                1          2004      2         7
  12005                1          2005      3         .

等待高手的解答~多谢~
二维码

扫码加我 拉你入群

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

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

全部回复
2009-12-1 21:33:38
proc sql;
create table d as
  select *
  from a,b
  where a.code=b.code
   and a.year=b.year;
可以解决(2)生成一个新的数据集d:(要求,提取相同code各year都有的数据)的问题
二维码

扫码加我 拉你入群

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

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

2009-12-1 21:36:01
按某个变量排序(最好是序号),然后用merge语句合并两个数据得到c,用按code变量排序得到d。
data a;
input index  code    year     x        ;
cards;
……
;
proc sort;
by index;
run;
data b;
input index             code    year       y ;
cards;
……
;
proc sort;
by index;
run;
data c;
merge a b;
by index;
data d;
set c;
by code;
二维码

扫码加我 拉你入群

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

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

2009-12-1 21:48:01
我已经想到怎么解决(1)想要生成一个新的数据集c:(即相同的变量保留,不同的变量合并)的问题了
proc sql;
create table c as
  select *
  from b left join a
  on b.code=a.code
   and b.year=a.year;
二维码

扫码加我 拉你入群

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

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

2009-12-1 21:54:37
data a;
input   index           code    year        x;
datalines;
  12003           1        2003       1
      12004           1        2004       2
      12005           1        2005       3
      22004           2        2004       4
      42005           4        2005       5

;
run;
data b;
input index code year y;
datalines;
12003             1         2003     6
     12004             1         2004     7
     22005             2         2005     8
     32005             3         2005     9

;
data c;
merge a b;
by index code;
run;
proc print data=c;
run;
proc sql;
select a.index,a.year,a.code,x,y
from a,b
where a.year=b.year and a.code=b.code;
新手初次尝试,楼主试一下吧,鉴于你给定的数据我没有对数据a,b集用proc sort 分类,对于一般的数据集最好先分类,哈哈
二维码

扫码加我 拉你入群

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

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

2009-12-2 14:10:38
回答问题2,楼主是想要年份齐全的纪录吧??就是03,04,05年都存在的纪录。比较有意思的问题。
接替5楼Data步C的程序,我就不复制了
请指正,需要的话我再解释。

proc sort data=c out=c0;
        by code year;
run;
data c1;
        set c0;
        year_lag = lag(year);
run;

data c2;
        retain conseq year_first;
        set c1;
        by code year;

        if first.code then do;
                year_first=year;
                conseq=0;
        end;
        else do;
                if year ^= year_lag +1 then conseq=1;
                if last.code then do;
                        *change the year value and year_first value to use other criterias;
                        if year = 2005 and year_first = 2003 and conseq =0 then output;
                end;
        end;
run;

data d;
        merge c2(keep = code IN=A) c0;
        by code;
        IF A;
run;

Data步C1最好不要与C2合并,lag这个公式比较娇贵,最好独立Data步
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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