全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4055 10
2010-03-29
请教高手,如何能让每家公司的ID都统一为该公司第一个出现的non-missing ID
比如:
Co
date
id

1001 200509 2
1001 200510 6
1001 200511 2
1001 200512 6
1119 200112 .
1119 200201 .
1119 200202 6
1119 200203 8

变成:
Co
date
id

1001 200509 2
1001 200510 2
1001 200511 2
1001 200512 2
1119 200112 .
1119 200201 .
1119 200202 6
1119 200203 6

该如何编code?
输入语句如下:
data a;

input company date:yymmn6. id;


format date yymmn6.;


datalines;

1001 200509 2
1001 200510 6
1001 200511 2
1001 200512 6
1119 200112 .
1119 200201 .
1119 200202 6
1119 200203 8

;
run;
二维码

扫码加我 拉你入群

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

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

全部回复
2010-3-30 10:22:32
data a;

input company date:yymmn6. id;

format date yymmn6.;

if missing(id) then mis='yes';
else mis='no';

datalines;
1001 200509 2
1001 200510 6
1001 200511 2
1001 200512 6
1119 200112 .
1119 200201 .
1119 200202 6
1119 200203 8

;
run;


proc sort data=a;
  by company mis date ;
run;

data a(drop=mis tempid);
  set a;
  by company mis date;
  retain tempid;
  if first.company then tempid=id;
  id=tempid;
  if mis='yes' then id=.;
run;

proc sort data=a;
  by company date ;
run;
二维码

扫码加我 拉你入群

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

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

2010-3-30 14:12:02
中间一步是不是要改下?
data a(drop=mis tempid);
  retain tempid;
  set b;
  by company mis date;
  if first.company then tempid=id;
  id=tempid;
run;
二维码

扫码加我 拉你入群

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

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

2010-3-30 16:23:20
我的会把miss给盖掉,没考虑清楚,楼主无视我吧。。。

data a;

input company date:yymmn6. id;

format date yymmn6.;

datalines;
1001 200509 2
1001 200510 6
1001 200511 2
1001 200512 6
1119 200112 .
1119 200201 .
1119 200202 6
1119 200203 8

;
run;

proc sort data=a;
  by company date ;
run;

data a0(drop = date rename = (id=newid));
  set a;
  by company date;
  if id ne .;
  if first.company;
run;

data b(drop = id);
merge a a0;
by company;
run;
二维码

扫码加我 拉你入群

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

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

2010-3-30 16:31:40
调整一下应该可以了;
data a;

input company date:yymmn6. id;

format date yymmn6.;

datalines;
1001 200509 2
1001 200510 6
1001 200511 2
1001 200512 6
1119 200112 .
1119 200201 .
1119 200202 6
1119 200203 8

;
run;

proc sort data=a;
  by company date ;
run;

data a0(drop = date rename = (id=newid));
  set a;
  by company date;
  if id ne .;
  if first.company;
run;

data b(drop = id);
merge a a0;
by company;
if id = . then newid=.;
run;
二维码

扫码加我 拉你入群

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

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

2010-4-1 08:34:10
I really appreciate your help. That code's so helpful.
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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