SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2210|回复: 2
打印 上一主题 下一主题

如何补充数据

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-12-12 13:54:39 | 只看该作者

如何补充数据

数据格式如下
year id  price
1998 1  10
1999 1  12
2000 1  11.5
1998 2  11
1999 2  11.5
2000 3  12

我想对这个数据年增加到 2005年或者任意其他,price 缺省。即如下格式:
year id  price
1998 1  10
1999 1  12
2000 1  11.5
2001 1  .
2002 1  .
2003 1  .
2004 1  .
2005  1  .
1998 2  11
1999 2  11.5
2000 3  12
2001 2  .
2002 2  .
2003 2  .
2004 2  .
2005  2  .

谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-12-13 13:47:41 | 只看该作者

Re: 如何补充数据

自己想了下,这样做,效率不行。

data temp;
input year id price;
DATALINES;
1998 1 10
1999 1 12
2000 1 11.5
1998 2 11
1999 2 11.5
2000 3 12
;

run;

proc sort data=temp out=missing;
by year id;
run;


data missing;
set missing;
price=.;
do year=1995 to 1997;
if year<=1997 then output;
end;
run;

proc sort data=missing nodupkey;
by id year;
proc sort data=temp;
by id year;
/*merge have and the expanded missing*/
data want;
  merge missing (in=ina) temp (in=inb);
  by id year;
  if inb or (ina and not inb);
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2013-1-4 02:56:04 | 只看该作者

Re: 如何补充数据

[code:1mw391v3]data a;
input year id price;
   yi=catx('_',year,id);
cards;
1998 1 10
1999 1 12
2000 1 11.5
1998 2 11
1999 2 11.5
2000 2 12
;
data b;
do id=1 to 2;
do year=1995 to 2005;
   yi=catx('_',year,id);
   output;
   end;
end;
run;
proc sql;
create table ab(drop=yi) as
  select d1.*, d2.price from b d1 left join a d2
   on d1.yi=d2.yi
   order by id,year;
quit;[/code:1mw391v3]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-3 06:25 , Processed in 0.135091 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表