楼主: ertyuj
2937 9

[原创博文] 如何基于多个变量把我的观测值进行分类 [推广有奖]

  • 0关注
  • 1粉丝

已卖:7份资源

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
254 个
通用积分
0.7615
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
-351 点
帖子
136
精华
0
在线时间
164 小时
注册时间
2007-2-7
最后登录
2022-3-17

楼主
ertyuj 发表于 2011-3-1 07:30:59 |AI写论文
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 ...
关键词:多个变量 观测值 Education ducation proc sql 如何

本帖被以下文库推荐

沙发
ntsean 发表于 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;
已有 1 人评分论坛币 收起 理由
论坛数据分析 + 100 观点有启发

总评分: 论坛币 + 100   查看全部评分

藤椅
novice505 发表于 2011-3-1 16:05:46
1# ertyuj
  1. data test;
  2. input id income education $ sex $;
  3. datalines;
  4. 1                21                        High                                         Male
  5. 2                30                        Low                                         Female
  6. 3                35                        High                                         Male
  7. 4               14                         Low                                         Male
  8. 5                20                        High                                         Male
  9. 6        30        Low        Male
  10. 7 29        High Female
  11. ;


  12. proc sort data=test out=mm;
  13.         by education sex;
  14. data nn(drop=i);
  15.         set mm;
  16.         by education sex;
  17.         if first.sex then do ;
  18.                 i+1;
  19.                 group=i;
  20.                 end;
  21.         else do;
  22.                 retain group;
  23.                 end;
  24. proc print;
  25. run;
复制代码

板凳
webgu 发表于 2011-3-1 19:42:25
得排列组合吧,8个变量,还不知道每个变量有几个取值,这个有难度。

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

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

7
ccgzl 发表于 2011-3-2 09:51:02
三楼的循环不错,用SQL要注意最后删除重复值。

8
ntsean 发表于 2011-3-2 10:14:18
我开始也是这么做的,不过有几个缺点:
如果data 很多组没有observation,那么给组编号就不全了, 如果换了个数据,在编码,那么就会编号出现不同。而且这样子做也不适合查询每个组对应的值
novice505 发表于 2011-3-1 16:05
1# ertyuj
  1. data test;
  2. input id income education $ sex $;
  3. datalines;
  4. 1                21                        High                                         Male
  5. 2                30                        Low                                         Female
  6. 3                35                        High                                         Male
  7. 4               14                         Low                                         Male
  8. 5                20                        High                                         Male
  9. 6        30        Low        Male
  10. 7 29        High Female
  11. ;


  12. proc sort data=test out=mm;
  13.         by education sex;
  14. data nn(drop=i);
  15.         set mm;
  16.         by education sex;
  17.         if first.sex then do ;
  18.                 i+1;
  19.                 group=i;
  20.                 end;
  21.         else do;
  22.                 retain group;
  23.                 end;
  24. proc print;
  25. run;
复制代码

9
ertyuj 发表于 2011-3-3 12:00:00
由于大家的帮助(2楼,3楼),这个问题得到解决。最终采用2楼提出的解决方案。

10
novice505 发表于 2011-3-3 18:37:31
没看清要求,如果要给完全组合下的每种可能情况都编码,二楼的想法不错。。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 20:36