全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1121 1
2013-08-05
悬赏 50 个论坛币 已解决
帮忙看看这个,我应该怎么用这个  不咋会proc iml 谢谢拉


http://www.unc.edu/~arellis/socnet/bcent.sas

最佳答案

南方de梦 查看完整内容

data have ; input name1 :$8. name2 :$8. ; dummy = 1 ; datalines; Tom Jack Jack Mike Tom Hellen Dora Hellen Ross Jack Will Paul Paul Howard Paul Andy Andy Kim Andy Tom ; ;;;; /* create list of unique names that are in either column */ /* assumes names in name1 and name2 may be different lists */ proc sql ; create table unique_names as ...
二维码

扫码加我 拉你入群

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

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

全部回复
2013-8-5 18:44:14
data have ;
        input name1 :$8. name2 :$8. ;
        dummy = 1 ;
datalines;
Tom Jack
Jack Mike
Tom Hellen
Dora Hellen
Ross Jack
Will Paul
Paul Howard
Paul Andy
Andy Kim
Andy Tom
;
;;;;

/* create list of unique names that are in either column */
/* assumes names in name1 and name2 may be different lists */
proc sql ;
        create table unique_names as
        select distinct name
        from
        ( select distinct name1 as name
        from have )
        union (select distinct name2 as name
        from have )
        order by name
;
quit;

/* merge with original data to create complete list */
proc sort data=have ;
        by name1 name2;
        run;

data have2 ;
        merge have (in=a) unique_names (in=b rename=(name=name1));
        by name1; /* left side */
        if a or b;
run;

proc sort data=have2 ;
        by name2 name1;

data havenew ;
        merge have2 (in=a) unique_names (in=b rename=(name=name2));
        by name2; /*right side */
        if a or b;
run;

/* resort */
proc sort data=havenew;
        by name1 name2 ;
run;

/* read column names into macro var in sorted order */
/* used to sort column output from proc transpose */
proc sql noprint;
        select name into :namelist separated by ' '
        from unique_names
        order by name
;
quit;

/* get number of names - used for array processing later on */
proc sql noprint;
        select count ( distinct name ) into :namecnt
        from unique_names
;
quit;

/* transpose rows to columns */
proc transpose data=havenew out=want ;
        id name2;
        by name1 ;
run;

/* reorder proc transpose output */
/* assign 1 when name1 var matches column name */

data want;
attrib name1 &namelist label='';
set want (drop=_name_);
where name1 ne ' ' ;
run;


data havesorted (drop=i);
        set want;
        /* array nm {&namecnt} &namelist ;*/
        array nm
&namelist;
        do i = 1 to &namecnt ;
                /* deal with missing values (set to 1 or 0 ) */
                if nm{i} = . then do;
                        /* set to 1 if the person's name is the same as the column name */
                        if vname(nm)=name1 then nm{i}=1;
                        else nm{i} = 0;
                end;
        end;
run;


proc iml;
use havesorted;
read all var _NUM_ into m;
n_row=nrow(m);
n_col=ncol(m);
do i=1 to n_col;
   do j=1 to n_row;
      if m[j,i]=1 then m[i,j]=1;
   end;
end;
print m;
create MyData from m;
append from m;
close MyData;
quit;
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

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