楼主: funwin
4319 9

请教 如何分组,再算出分组后的均值? [推广有奖]

  • 0关注
  • 2粉丝

硕士生

85%

还不是VIP/贵宾

-

威望
0
论坛币
177 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
2256 点
帖子
192
精华
0
在线时间
131 小时
注册时间
2007-11-7
最后登录
2016-1-22

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
本人有一组数据,贴在附件中。

希望 根据 每期,按变量to 从小到大 平均分5组,然后其他变量mv, rirf等也相应的跟着to的分组而分组(如果在这一期中没有to值,那就相应的把这一行都去掉),再算出每期 每组中 各个变量的均值。(每一期的 观测值 是不同的,比如第一期每个组的观测值平均有26个,第二期每个组的值平均可能就会有30个)

原来 用excel计算 太过繁琐了,因为有16年 192期 用手工算 太复杂。

最后想得出:
   
dateportfoliotomvrirf
19930110.004728149.34690.109222
19930120.023652289.47520.109417
19930130.03837474.55960.05446
19930140.059211488.26230.093729
19930150.1793551078.9240.075071
 
19930210.005261146.27440.136408
19930220.024874458.78720.021722
19930230.041149308.87730.036245
19930240.0604521021.3450.025378
19930250.182301646.89640.041091
.............
二维码

扫码加我 拉你入群

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

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

关键词:Portfolio Portfoli 用excel EXCEL exce excel 如何 手工

test.xls

4.29 MB

沙发
jingju11 发表于 2009-8-24 04:55:34 |只看作者 |坛友微信交流群
proc sort; by date to;run;
data new;
set old(where=(^missing(to))); by date to;
if first.date then portfolio=0;
portfolio+1;
run;
proc means  n mean;
class date portfolio;
var  to mv rirf;
run;

*any trick?;

使用道具

藤椅
sushe1527 发表于 2009-8-24 05:41:19 |只看作者 |坛友微信交流群
你那表也是算的吧?那误差也可接受 原因来自每期组数可能不被5整除 那么划分会有不同  附数据

[local]1[/local] QQ截图未命名.jpg

结果数据.rar

23.9 KB

本附件包括:

  • all.sas7bdat

使用道具

板凳
funwin 发表于 2009-8-24 06:47:18 |只看作者 |坛友微信交流群
2# jingju11

还是有问题,portfolio是每期1-5,而不是一直排下去!

使用道具

报纸
jingju11 发表于 2009-8-24 07:40:30 |只看作者 |坛友微信交流群
sorry, i didn't look at the original data. it is much complicate than I thought.Well....

使用道具

地板
jingju11 发表于 2009-8-24 08:01:49 |只看作者 |坛友微信交流群
4# funwin

proc sort data=work(where=(^missing(to))) out=old; by date to; run;




data new;
set old; by date to;
if first.date then n=0;
n+1;
run;


proc sort data=new; by date descending n; run;



data new1;


set new;


retain m;


if first.date then m=n/5;


run;



proc sort; by date n; run;



data new2;


set new1;


do i=1 to 5;


if (i-1)*m<n then if n<=i*m then do;


portfolio=i;


return;


end;


run;



proc means  n mean;
class date portfolio;
var  to mv rirf;
run;


*I dont have SAS in my PC, please adjust the code if it is incorrect;

使用道具

7
funwin 发表于 2009-8-24 18:04:27 |只看作者 |坛友微信交流群
3# sushe1527

您的附件里的数据就是我想要的,非常感谢!!

请问能否将code语句告诉我呢?是怎么做到的?

使用道具

8
funwin 发表于 2009-8-24 18:42:51 |只看作者 |坛友微信交流群
6# jingju11

data new1; set new; retain m; if first.date then m=n/5; run; 运行这个语句后,得不出m值。是不是由于n不一定能够整除5所致?
如果一期中有132个值,要分5组,一般是如何处理呢?把多余的值都放入最后一组?还是......?
请指点一下!

使用道具

9
jingju11 发表于 2009-8-24 20:55:07 |只看作者 |坛友微信交流群
8# funwin

proc sort data=test(where=(^missing(to))) out=old; by yyyymm to; run;
data new;
set old; by yyyymm to;
if first.yyyymm then n=0;
n+1;
run;
proc sort data=new; by yyyymm descending n; run;
data new1;
set new; by yyyymm;
retain m;
if first.yyyymm then m=n/5;
run;
proc sort; by yyyymm n; run;
data new2;
set new1;
do i=1 to 5;
if (i-1)*m<n then if n<=i*m then do;
portfolio=i;
return;
end;
end;
run;

proc means  n mean;
class yyyymm portfolio;
var  to mv rirf;
run;
*我的代码里,哪个组多和少依据具体数字,但是差别(在to这一组中)不大于1;
结果类似于:
The MEANS Procedure

                      yyyymm       portfolio    N Obs    Variable    Label        N            Mean
                -----------------------------------------------------------------------------------
                      199301               1       26    to          to          26       0.0047284
                                                                  mv        mv          26     149.3469231
                                                                  rirf        rirf        26       0.1092223
                                                 2       26    to          to          26       0.0236519
                                                                  mv        mv          25     289.4752000
                                                                  rirf        rirf        26       0.1094165
                                                 3       27    to          to          27       0.0387948
                                                                  mv        mv          27     457.9077778
                                                                  rirf        rirf        27       0.0621011
                                                4       26     to          to          26       0.0601412
                                                                  mv        mv          26     489.8403846
                                                                  rirf        rirf        26       0.0887881
                                                5       27     to          to          27       0.1832554
                                                                  mv        mv          27         1116.44
                                                                  rirf        rirf        27       0.0729516
                      199302               1       26    to          to          26       0.0048998
                                                         mv          mv          26     149.5103846
                                                         rirf        rirf        26       0.1379030
                                           2       27    to          to          27       0.0244961
                                                         mv          mv          26     443.5315385
                                                         rirf        rirf        27       0.0245299
                                           3       26    to          to          26       0.0411493
                                                         mv          mv          26     308.8773077
                                                         rirf        rirf        26       0.0362451
                                           4       27    to          to          27       0.0609519
                                                         mv          mv          27     984.0548148
                                                         rirf        rirf        27       0.0229519
                                           5       27    to          to          27       0.1863149
                                                         mv          mv          27     670.3185185
                -----------------------------------------------------------------------------------

使用道具

10
yongyitian 发表于 2009-8-25 00:02:54 |只看作者 |坛友微信交流群
The following code gives you slightly different results. You may change the way of determining the portfolio number.

libname MySASDat 'D:\MySAS\SASData\';
/* import data from excel */
proc import out=MySasDat.FunWinsData
     DataFile = "D:\MySAS\SASData\FunWinsdata.xls"
  DBMS=Excel Replace;
  SHEET    = "Sheet1$";
  GETNAMES = yes;
  MIXED    = yes;
  SCANTEXT = yes;
         USEDATE  = yes;
  SCANTIME = yes;
run;

/* remove records with missing TO */
data FunWin_1;
    set MysasDat.funwinsData (rename=(to=Ato yyyymm=Adate));
where ATO is not missing;
keep Adate code ato mv rirf;
run;

/* Count the number obs in each group (by yyyymm) */
proc sql;
    create table funwin_2 as
select *, count(adate) as GTN
from funwin_1
group by adate
    order by adate, ato;
quit;
proc sort data=funwin_2;
    by adate ato;
run;

/* Find the portfolio number */
data funwin_3;
    retain NG;
    set funwin_2;
N5 =  INT(GTN/5);        /* use another method may affect accuracy */
    if first.adate then NG=1;
    else NG+1;
Portfolio=int(NG/N5)+1;  /* use another method may affect accuracy */
if Portfolio > 5 then Portfolio = 5;
by adate;
run;

/* Find the average value for each portfolio */
proc sql;
     create table funwin_result as
     select adate, portfolio, mean(ato) as mean_to,
                              mean(mv)  as mean_mv,
                              mean(rirf) as mean_rirf
  from funwin_3
  group by adate, portfolio
  order by adate, portfolio;
quit;

使用道具

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

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

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

GMT+8, 2024-5-1 09:55