全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2857 9
2011-03-01
悬赏 5 个论坛币 已解决
假如我的数据如下:
ID               Income               Education                                Sex
1                21                        High                                         Male
2                30                        Low                                         Female
3                35                        High                                         Male
4               14                         Low                                         Male
5                20                        High                                         Male
...
如果基于两个变量(Education, Sex)把我的观测值(Income)进行分类,那么定义一个新的变量Group,比方说吧,结果可能这样:对应High Male,Group =1;对应High Female,Group =2;对应Low Male,Group =3;对应Low Female,Group =4。那么数据即为:
ID               Income               Education                                Sex                     Group
1                21                        High                                         Male                   1
2                30                        Low                                         Female               4
3                35                        High                                         Male                   1
4               14                         Low                                         Male                    3
5                20                        High                                         Male                   1


如果仅仅基于两个变量(Education, Sex)把我的观测值(Income)进行分类,IF-THEN可以达到这个目的。难点在于我有8个组合变量(Education, Sex, Color, ...等等),所以观测值的组合种类很多。请教高手DATA或者PROC SQL中可有现成功能,用以实现以上目的:即定义一个新的变量Group用以标识我的观测值(Income)。如果没有,如何编程。谢谢。

最佳答案

ntsean 查看完整内容

提供一种解法: 1. 给所有可能的组合赋一个group值, 存在data set 2. 把original data和 group值的data merge起来 data group; group=0; do education='High','Low'; do sex='Female','Male'; group=group+1; output; end; end; proc print data=group;run; data test; input id income education $ sex $; datalines; 1 21 High ...
二维码

扫码加我 拉你入群

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

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

全部回复
2011-3-1 07:31:00
提供一种解法:
1. 给所有可能的组合赋一个group值, 存在data set
2. 把original data和 group值的data merge起来


data group;
group=0;
do education='High','Low';
do sex='Female','Male';
group=group+1;
output;
end;
end;
proc print data=group;run;

data test;
input id income education $ sex $;
datalines;
1                21                        High                                         Male
2                30                        Low                                         Female
3                35                        High                                         Male
4               14                         Low                                         Male
5                20                        High                                         Male
;
proc print data=test; run;

proc sql;
create table testnew as
select a.*,b.group
from test as a left join group as b
on a.education=b.education and a.sex=b.sex
order by id
;
quit;

proc print data=testnew;run;
二维码

扫码加我 拉你入群

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

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

2011-3-1 16:05:46
1# ertyuj
复制代码
二维码

扫码加我 拉你入群

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

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

2011-3-1 19:42:25
得排列组合吧,8个变量,还不知道每个变量有几个取值,这个有难度。
二维码

扫码加我 拉你入群

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

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

2011-3-1 23:12:31
试了试2楼的解法,很不错。对于SQL语句,我看不懂,貌似很麻烦,不过倒是很实用,赞一个!
二维码

扫码加我 拉你入群

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

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

2011-3-2 07:52:34
这个问题没必要用sql,其实,可以用merge,只是这样的话需要先把data sort一样,用sql就不用sort了。
kevin3ma 发表于 2011-3-1 23:12
试了试2楼的解法,很不错。对于SQL语句,我看不懂,貌似很麻烦,不过倒是很实用,赞一个!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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