SAS 邻接矩阵创建
SAS Adjacency Matrix Creation
我创建了这个 table:
据此,我想创建一个邻接矩阵,显示 employee_id 和 table 共享的数量。它看起来像这样(我认为):
我不确定我是否以正确的方式解决这个问题。我想我可能做错了。我知道,如果我有更多 SAS 产品,这可能会更容易,但我只有基本的 SAS 企业指南可以使用。
非常感谢您的帮助。谢谢你。
我想这就是你想要的,但它没有给出你显示的答案。
data id;
input id:. human alien wizard;
cards;
1005 1 1 0
1018 0 0 1
1022 0 0 1
1024 1 0 0
1034 0 1 0
1069 0 1 0
1078 1 0 0
1247 1 1 1
;;;;
run;
proc corr noprint nocorr sscp out=sscp;
var human alien wizard;
run;
proc print;
run;
我能够使用它得到答案,尽管它不包括我想要的最后一个单元格 (human_alien_wizard):
proc transpose data=FULL_JOIN_ALL3 out=FULL_JOIN_ALL3_v2;
by employee_id;
var human_table alien_table wizard_table;
run;
proc sql;
create table FULL_JOIN_ALL3_v3 as
select distinct a._name_ as anm,b._name_ as bnm,
count(distinct case when a.col1=1 and b.col1=1 then a.employee_id else . end) as smalln
from FULL_JOIN_ALL3_v2 a, FULL_JOIN_ALL3_v2 b
where a.employee_id=b.employee_id
group by anm,bnm
;
proc tabulate data=FULL_JOIN_ALL3_v3;
class anm bnm;
var smalln;
table anm='',bnm=''*smalln=''*sum=''*f=best3. / rts=5;
run;
这是另一种使用 PROC CORR 的方法,它仍然比上面的解决方案更好。而且您不需要过滤 - 变量无关紧要,您只需在 PROC CORR 过程中指定它们。
data id;
input id:. human alien wizard;
cards;
1005 1 1 0
1018 0 0 1
1022 0 0 1
1024 1 0 0
1034 0 1 0
1069 0 1 0
1078 1 0 0
1247 1 1 1
;;;;
run;
ods output sscp=want;
proc corr data=id sscp ;
var human alien wizard;
run;
proc print data=want;
format _numeric_ 8.;
run;
结果是:
Obs Variable human alien wizard
1 human 4 2 1
2 alien 2 4 1
3 wizard 1 1 3
我创建了这个 table:
据此,我想创建一个邻接矩阵,显示 employee_id 和 table 共享的数量。它看起来像这样(我认为):
非常感谢您的帮助。谢谢你。
我想这就是你想要的,但它没有给出你显示的答案。
data id;
input id:. human alien wizard;
cards;
1005 1 1 0
1018 0 0 1
1022 0 0 1
1024 1 0 0
1034 0 1 0
1069 0 1 0
1078 1 0 0
1247 1 1 1
;;;;
run;
proc corr noprint nocorr sscp out=sscp;
var human alien wizard;
run;
proc print;
run;
我能够使用它得到答案,尽管它不包括我想要的最后一个单元格 (human_alien_wizard):
proc transpose data=FULL_JOIN_ALL3 out=FULL_JOIN_ALL3_v2;
by employee_id;
var human_table alien_table wizard_table;
run;
proc sql;
create table FULL_JOIN_ALL3_v3 as
select distinct a._name_ as anm,b._name_ as bnm,
count(distinct case when a.col1=1 and b.col1=1 then a.employee_id else . end) as smalln
from FULL_JOIN_ALL3_v2 a, FULL_JOIN_ALL3_v2 b
where a.employee_id=b.employee_id
group by anm,bnm
;
proc tabulate data=FULL_JOIN_ALL3_v3;
class anm bnm;
var smalln;
table anm='',bnm=''*smalln=''*sum=''*f=best3. / rts=5;
run;
这是另一种使用 PROC CORR 的方法,它仍然比上面的解决方案更好。而且您不需要过滤 - 变量无关紧要,您只需在 PROC CORR 过程中指定它们。
data id;
input id:. human alien wizard;
cards;
1005 1 1 0
1018 0 0 1
1022 0 0 1
1024 1 0 0
1034 0 1 0
1069 0 1 0
1078 1 0 0
1247 1 1 1
;;;;
run;
ods output sscp=want;
proc corr data=id sscp ;
var human alien wizard;
run;
proc print data=want;
format _numeric_ 8.;
run;
结果是:
Obs Variable human alien wizard
1 human 4 2 1
2 alien 2 4 1
3 wizard 1 1 3