请选择 进入手机版 | 继续访问电脑版
楼主: living_stone
6403 8

SAS 如何把不同类的观测值每类平均分为5个组 [推广有奖]

  • 5关注
  • 1粉丝

讲师

61%

还不是VIP/贵宾

-

威望
0
论坛币
88 个
通用积分
144.7836
学术水平
6 点
热心指数
6 点
信用等级
7 点
经验
20788 点
帖子
240
精华
0
在线时间
781 小时
注册时间
2008-8-9
最后登录
2024-1-5

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
SAS 如何把不同类的观测值每类平均分为十个组,比如说T个月,每个月有很多公司的观察值,每个月公司的数目不相等,我们要按每个月 把这个月中所以存在观察值得公司分成5个组?谢谢
二维码

扫码加我 拉你入群

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

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

关键词:观测值 平均分 公司 如何

回帖推荐

mymine 发表于2楼  查看完整内容

如果随便分的话,简单举个步骤 /*按月份分类计数*/ 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;

本帖被以下文库推荐

[b][color=Blue]一个人出生以后,在幼年的时候他被各种谎言所填满。当他觉醒的时候,当
mymine 发表于 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;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

mymine 发表于 2012-5-5 21:02
如果随便分的话,简单举个步骤
/*按月份分类计数*/
proc sort data=temp;
如果每个月是按公司价值从大到小分10个组又该怎么操作咧?
[b][color=Blue]一个人出生以后,在幼年的时候他被各种谎言所填满。当他觉醒的时候,当

使用道具

mymine 发表于 2012-5-6 14:01:19 |显示全部楼层 |坛友微信交流群
如果某个月公司数非10的整倍数怎么办?

使用道具

mymine 发表于 2012-5-6 14:01
如果某个月公司数非10的整倍数怎么办?
我遇到的问题就是这样的,有很多月份的观测值就不是10的倍数并且每个月是不一样。。。
[b][color=Blue]一个人出生以后,在幼年的时候他被各种谎言所填满。当他觉醒的时候,当

使用道具

mymine 发表于 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

使用道具

mymine 发表于 2012-5-6 21:09
自己摸索了一段程序,供参考
附件中的数据表,我定义的一个a、b两个变量,可以看作你的月份和各公司名(看 ...
非常感谢,我看看。我想的方法是用分位数的方法 用proc univariate 。。。。。。
[b][color=Blue]一个人出生以后,在幼年的时候他被各种谎言所填满。当他觉醒的时候,当

使用道具

mymine 发表于 2012-5-5 21:02
如果随便分的话,简单举个步骤
/*按月份分类计数*/
proc sort data=temp;
很好!!真棒~

使用道具

四叶草 发表于 2020-3-6 18:05:03 |显示全部楼层 |坛友微信交流群
living_stone 发表于 2012-5-6 21:53
非常感谢,我看看。我想的方法是用分位数的方法 用proc univariate 。。。。。。
使用proc univariate时,如果数据非常密集,容易出现分位数相等的情况,不是一个非常好的办法

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 00:32