全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6903 8
2012-05-05
SAS 如何把不同类的观测值每类平均分为十个组,比如说T个月,每个月有很多公司的观察值,每个月公司的数目不相等,我们要按每个月 把这个月中所以存在观察值得公司分成5个组?谢谢
二维码

扫码加我 拉你入群

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

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

全部回复
2012-5-5 21:02:59
如果随便分的话,简单举个步骤
/*按月份分类计数*/
proc sort data=temp;
by month company;
run;
data temp;
set temp;
by month company;
if first.month then aa=1;
else aa+1;
run;
/*五等分,将计数的aa除以5取余数,按照month + 余数为0、1、2、3、4分为五组*/
data temp;
set temp;
bb=mod(aa,5);
run;
二维码

扫码加我 拉你入群

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

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

2012-5-6 00:26:46
mymine 发表于 2012-5-5 21:02
如果随便分的话,简单举个步骤
/*按月份分类计数*/
proc sort data=temp;
如果每个月是按公司价值从大到小分10个组又该怎么操作咧?
二维码

扫码加我 拉你入群

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

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

2012-5-6 14:01:19
如果某个月公司数非10的整倍数怎么办?
二维码

扫码加我 拉你入群

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

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

2012-5-6 17:53:18
mymine 发表于 2012-5-6 14:01
如果某个月公司数非10的整倍数怎么办?
我遇到的问题就是这样的,有很多月份的观测值就不是10的倍数并且每个月是不一样。。。
二维码

扫码加我 拉你入群

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

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

2012-5-6 21:09:13
自己摸索了一段程序,供参考
附件中的数据表,我定义的一个a、b两个变量,可以看作你的月份和各公司名(看作已经按公司价值从大到小排序)
程序的结果如果非10 的整数倍,在前面几个分类中多一条观测,比如某月有26个公司,按前六个分类每个分类3个公司,后四个每个分类2个;如果为10 的整数倍则都是同一的观测数
程序如下:

data a;
set a;
by a b;
if first.a then a1=1;
else a1+1;
run;
proc sql;
create table b as
select *,int(max(a1)/10) as a2,mod(max(a1),10) as a3
from a group by a;
quit;
proc sort data=b;
by a b;
run;
data c;
set b;
a4=(a2+1)*a3;
if a1<=a4 then cls=compress(a||'1');
else cls=compress(a||'2');
run;
data c;
set c;
by cls b;
if first.cls then c1=1;
else c1+1;
run;
data d;
set c;
by cls;
if first.cls then a5=1;
else do;
if substr(cls,2,1)='1' and mod(c1,(a2+1))=1 then a5+1;
if substr(cls,2,2)='2' and mod(c1,a2)=1 then a5+1;
end;
run;
data d;
set d;
cl=compress(cls||a5);
keep a b cl;
run;
附件列表

a.zip

大小:1.2 KB

 马上下载

本附件包括:

  • a.sas7bdat

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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