全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1390 7
2012-11-02
悬赏 20 个论坛币 已解决
有一数据,是不同年份检查,比如1981年、1998年、2004年分别在同一地区检查一群人,每一年份ID号分别赋予,比如1981年的ID为X1+4为数字,1998年ID为X2+4为数字,2004年ID为X3+4为数字,其中部分对象某两年或3年份均参加,导致数据库中某些对象是重复的,现想知道某年份对象哪些年份尚参加检查,并且其对应ID是多少?数据如下:
ID            姓名  
X10001   张三
X21001   张三
X10001   李四
X20012   李四
X30052   李四

变为
ID          ID1981    ID1998      ID2004     姓名
X10001                 X21001                      张三
X21001 X10001                                      张三
X10001                 X10001    X30052     李四
X20012  X10001                    X30052    李四
X30052  X10001  X20012                      李四
如何编程?





最佳答案

Imasasor 查看完整内容

不明白你的最终目的,但还是按照你的要求写了一下,有点长,自己优化一下
二维码

扫码加我 拉你入群

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

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

全部回复
2012-11-2 17:29:26
复制代码
不明白你的最终目的,但还是按照你的要求写了一下,有点长,自己优化一下
二维码

扫码加我 拉你入群

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

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

2012-11-2 19:48:13
data a;
input id $6. name $8.;
cards;
X10001 张三
X21001 张三
X10001 李四
X20012 李四
X30052 李四
;
run;
proc sort data=a;by name;run;
data b;
set a;
if substr(id,1,2)="X1" then  id1981=id;
else if substr(id,1,2)="X2" then  id1998=id;
  else if substr(id,1,2)="X3" then  id2004=id;
run;
二维码

扫码加我 拉你入群

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

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

2012-11-2 21:07:40
chaosxiao 发表于 2012-11-2 19:48
data a;
input id $6. name $8.;
cards;
这个没有达到要求,谢谢。
二维码

扫码加我 拉你入群

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

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

2012-11-2 22:13:07
data a;
input id $6. name $10.;
cards;
X10001 张三
X21001 张三
X10001 李四
X20012 李四
X30052 李四
;
run;
proc sort data=a;by name;run;
data aa;
set a;
if substr(id,1,2)="X1" then do;id1981=id;output;end;
run;
data bb;
set a;

if substr(id,1,2)="X2" then do;id1998=id;output;end;
run;
data cc;
set a;
if substr(id,1,2)="X3" then do;id2004=id;output;end;
run;
/*proc sort data=aa;by name;run;*/
/*proc sort data=bb;by name;run;*/
/*proc sort data=cc;by name;run;*/
data x;
merge aa bb cc;
by name;
run;
二维码

扫码加我 拉你入群

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

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

2012-11-2 23:50:55
优化的程序如下,谢谢。

data a;
input id $ name $;
cards;
X10001   张三
X21001   张三
X10001   李四
X20012   李四
X30052   李四
X10112   王五
X30998   王五
;
run;

data b;
set a;
code=substr(id,2,1);
if code=1 then id1981=id;
else if code=2 then id1998=id;
else if code=3 then id2004=id;
run;
proc sort data=b ;
by name;
;
data c;
set b;
informat a1-a3 $8.;
retain a1-a3;
if first.name then do;
a1="";
a2="";
a3="";
end;
if id1981^="" then a1=id1981;
if id1998^="" then a2=id1998;
if id2004^="" then a3=id2004;
keep name a1-a3;
if last.name;
by name;
run;

proc sort data=a;
by name;
;
data d;
merge a c;
by name;
run;
data e;
set d;
if a1=id then a1="";
if a2=id then a2="";
if a3=id then a3="";
run;

data e; set e;
rename a1=id1981
       a2=id1998
      a3=id2004;
run;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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