全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2307 2
2012-08-18
本人还是菜鸟级sas学者,恳请各位大虾帮帮我!问题很棘手!这是一个关于用sas计算index of dimilarity的问题,
计算公式是这样的 (1/2)*SUM |bi /B – wi / W |
bi 表示黑人住在住宅区 i的人数
wi表示白人住在住宅区 i的人数
B表示样本中黑人的总人数
W表示样本中白人的总人数


在我的数据里,我有变量
(black=1 黑人 black=0 白人; residence=1 住宅区1 residence=2 住宅区 2.....; pref=1 地区1 pref=2 地区2.....)
数据结构是这样的:
pref    residence    black
1             1              1
1             1              1
1             1              0
1             1              0
1             1              0
1             1              0
1             2              1
1             2              0
1             2              0
1             2              0
2             1              1
2             1              1

2             1              1
2             1              1

2             1              1
2             1              1

2             1              1
2             1              1

2             1              0
2             1              0
2             1              0
2             1              0


2             2              1
2             2              1
2             2              1
2             2              0

2             2              0
2             2              0

.......


据已经用proc sort,sort过了,我想在每一个地区计算一个index of disimilairty,我的地区总数为100;这样的话就可以直接得到100个index of disimilarity。我只想到一个最笨的办法就是把频数全部列出来,从excel算,但是因为每个地区,住宅区实在太多,所以这样会要算到几千遍;我实在想不出该如何计算;希望大家帮帮忙!万分感谢!





二维码

扫码加我 拉你入群

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

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

全部回复
2012-8-19 21:33:57
问一下楼主,B,W是指每个地区black,white总人数?
data a;
input
pref    residence    black;
cards;
1             1              1
1             1              1
1             1              0
1             1              0
1             1              0
1             1              0
1             2              1
1             2              0
1             2              0
1             2              0
2             1              1
2             1              1
2             1              1
2             1              1
2             1              1
2             1              1
2             1              1
2             1              1
2             1              0
2             1              0
2             1              0
2             1              0
2             2              1
2             2              1
2             2              1
2             2              0
2             2              0
2             2              0
;
run;


proc sql;
create table b as
select compress(put(pref,5.)) as pref,
residence,
sum(case when black=1 then 1 else 0 end) as black_count,
sum(case when black=0 then 1 else 0 end) as white_count
from a group by  pref,residence
;

create table c as
select  pref,
sum(black_count) as black_sum,
sum(white_count) as white_sum
from b group by pref ;
quit;

data _null_;
set c;
call symput("black_"||pref, black_sum);
call symput("white_"||pref, white_sum);
run;

data d;
set b;
index=abs(black_count/symget('black_'||pref)-white_count/symget('white_'||pref));
run;

proc means data=d sum ;
class pref;
var index;
ods output summary=e;
run;



二维码

扫码加我 拉你入群

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

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

2012-8-26 12:38:01
ziyenano 发表于 2012-8-19 21:33
问一下楼主,B,W是指每个地区black,white总人数?
data a;
input
是的,是的,B和W分别代表每个地区黑人和白人的总人数,太谢谢你啦!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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