全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4920 26
2013-08-07
悬赏 200 个论坛币 已解决
如下面数据所示,原始数据格式内容如下所示,每一列为一人名,每一行数据表示两个人之间建立联系,
TomJack
JackMike
TomHellen
DoraHellen
RossJack
WillPaul
PaulHoward
PaulAndy
AndyKim
AndyTom


要求把数据转成一个矩阵,上面变量名为人名,第一列也为人名,如果两个人之间建立直接联系,则标识为1,没有则为0,最终数字矩阵为一对称矩阵。因不懂IML,往高手帮忙,谢谢。
namesAndyDoraHellenHowardJackKimMikePaulRossTomWill
Andy

1

0

0

0

0

1

0

1

0

1

0

Dora

0

1

0

0

0

0

0

0

0

0

0

Hellen

0

0

1

0

0

0

0

0

0

1

0

Howard

0

0

0

1

0

0

0

1

0

0

0

Jack

0

0

0

0

1

0

1

0

1

1

0

Kim

1

0

0

0

0

1

0

0

0

0

0

Mike

0

0

0

0

1

0

1

0

0

0

0

Paul

1

0

0

1

0

0

0

1

0

0

0

Ross

0

0

0

0

1

0

0

0

1

0

0

Tom

1

0

1

0

1

0

0

0

0

1

0

Will

0

0

0

0

0

0

0

0

0

0

1



最佳答案

ziyenano 查看完整内容

data have; input name1 $ name2 $; datalines; Tom Jack Jack Mike Tom Hellen Dora Hellen Ross Jack Will Paul Paul Howard Paul Andy Andy Kim Andy Tom ; run; proc sql; create table name_id as select name,monotonic() as id from (select name1 as name from have union select name2 as name from have); create tabl ...
二维码

扫码加我 拉你入群

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

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

全部回复
2013-8-7 13:06:11
data have;
input name1 $ name2 $;
datalines;
Tom        Jack
Jack        Mike
Tom        Hellen
Dora        Hellen
Ross        Jack
Will        Paul
Paul        Howard
Paul        Andy
Andy        Kim
Andy        Tom
;
run;

proc sql;
create table name_id as
select name,monotonic() as id from
(select name1 as name from have
union
select name2 as name from have);

create table name_id1 as
select t.*,t1.id as id1
from
have t
inner join
name_id t1
on t.name1=t1.name;

create table name_id2 as
select t.*,t1.id as id2
from
name_id1 t
inner join
name_id t1
on t.name2=t1.name;
quit;

proc iml;
use name_id;
read all var {name} into name;
close name_id;
use name_id2;
read all var{id1,id2} into id;
close name_id2;
res=j(nrow(name),nrow(name),0);
res[id[,1],id[,2]]=1;
create want from res[colnames=name rownames=name];
quit;

二维码

扫码加我 拉你入群

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

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

2013-8-7 14:46:06
data have;
input name1 $ name2 $;
datalines;
Tom        Jack
Jack        Mike
Tom        Hellen
Dora        Hellen
Ross        Jack
Will        Paul
Paul        Howard
Paul        Andy
Andy        Kim
Andy        Tom
;
run;

data have;
set have;
id=1;
run;

proc sort data=have;
by name1;
run;

proc transpose data=have out=want;
by name1;
id name2;
var id;
run;

data want(drop=i);
set want;
array numvar _NUMERIC_;
do i=1 to dim(numvar);
        if numvar(i)=. then numvar(i)=0;
end;
run;
二维码

扫码加我 拉你入群

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

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

2013-8-7 15:50:01
data a;                                                                                                                                 
input name $ @@;                                                                                                                        
cards;                                                                                                                                 
Andy Dora Hellen Howard Jack Kim Mike Paul Ross Tom Will                                                                                
;                                                                                                                                       
run;                                                                                                                                    
data b;                                                                                                                                 
set a;                                                                                                                                 
length Andy $1 Dora $1 Hellen $1 Howard $1 Jack $1 Kim $1 Mike $1 Paul $1 Ross $1 Tom $1 Will $1 ;                                      
run;                                                                                                                                    
                                                                                                                                       
                                                                                                                                       
data c;                                                                                                                                 
set b;                                                                                                                                 
if name='Tom' then Jack=1;                                                                                                              
else Jack=0;                                                                                                                           
if name='Jack' then Mike=1;                                                                                                            
else Mike=0;                                                                                                                           
if name='Tom' then Hellen=1;                                                                                                            
else Hellen=0;                                                                                                                          
if name='Dora' then Hellen=1;                                                                                                           
if name='Ross' then Jack=1;                                                                                                            
if name='Will' then  Paul=1;                                                                                                            
else Paul=0;                                                                                                                           
if name='Paul' then Howard=1;                                                                                                           
else Howard=0;                                                                                                                          
if name='Paul' then Andy=1;                                                                                                            
else Andy=0;                                                                                                                           
if name='Andy' then Kim=1;                                                                                                              
else Kim=0;                                                                                                                             
if name='Andy' then Tom=1;                                                                                                              
else Tom=0;                                                                                                                             
if name='Tom' then Jack=1;                                                                                                              
if name='Mike' then Jack=1;                                                                                                            
if name='Hellen' then Tom=1;                                                                                                            
if name='Hellen' then Dora=1;                                                                                                           
else Dora=0;                                                                                                                           
if name='Jack' then Ross=1;                                                                                                            
else Ross=0;                                                                                                                           
if name='Paul' then  Will=1;                                                                                                            
else Will=0;                                                                                                                           
if name='Howard' then Paul=1;                                                                                                           
if name='Andy' then Paul=1;                                                                                                            
if name='Kim' then Andy=1;                                                                                                              
if name='Tom' then Andy=1;                                                                                                              
if name='Andy' then andy=1;                                                                                                            
if name='Dora' then Dora=1;                                                                                                            
if name='Hellen' then hellen=1;                                                                                                         
if name='Howard' then howard=1;                                                                                                         
if name='Jack' then jack=1;                                                                                                            
if name='Kim' then kim=1;                                                                                                               
if name='Mike' then Mike=1;                                                                                                            
if name='Paul' then paul=1;                                                                                                            
if name='Ross' then ross=1;                                                                                                            
if name='Tom' then tom=1;                                                                                                               
if name='Will' then will=1;                                                                                                            
run;
二维码

扫码加我 拉你入群

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

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

2013-8-7 16:48:04
playmore 发表于 2013-8-7 14:46
data have;
input name1 $ name2 $;
datalines;
这个不行 你看Tom和andy在有关联,那tom-andy,andy-tom对应的都应该是1
二维码

扫码加我 拉你入群

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

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

2013-8-7 16:48:33
playmore 发表于 2013-8-7 14:46
data have;
input name1 $ name2 $;
datalines;
这个不行 你看Tom和andy在有关联,那tom-andy,andy-tom对应的都应该是1
二维码

扫码加我 拉你入群

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

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

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

分享

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