楼主: sbjc1988
1404 4

急用,求教各位大神这个小程序应该怎么做? [推广有奖]

  • 1关注
  • 2粉丝

硕士生

90%

还不是VIP/贵宾

-

威望
0
论坛币
1666 个
通用积分
0.5903
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4969 点
帖子
93
精华
0
在线时间
309 小时
注册时间
2010-9-22
最后登录
2021-3-17

楼主
sbjc1988 发表于 2012-4-7 11:43:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
小弟最近遇到一个程序,老是不满意,而自己水平有限,特意请教版上各位大神。
我的一个数据集FACTOR3SIZE是这个

code

date

meanri

1

200602

0.036

2

200602

0.0068

3

200602

-0.0082

4

200602

0.025

5

200602

0.014

6

200602

0.017

1

200603

0.034

2

200603

0.0059

3

200603

-0.0078

4

200603

0.026

5

200603

0.018

6

200603

0.014


我希望重新建立个数据集,增加变量SMB,让date相同的SMB都相等,都等于相同date下的编号1,2,3的meanri的均值减去45,6meanri的均值。

我查了下书给的程序是

data factor3size1;

set factor3size;

by date;

smb=(lag5(meanri)+lag4(meanri)+lag3(meanri))/3-(lag2(meanri)+lag(meanri)+meanri)/3;

但是这样编出来运行后,前五个CODE的SMB没有,而且date200603的SMB计算用到了200602的数据,明显不是我想要的结果,而且我还不知道LAG的反函数是什么。

真心求教各位版上大神能否帮忙解决下!


二维码

扫码加我 拉你入群

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

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

关键词:小程序 怎么做 factor Facto coded 程序

沙发
freerunning_sky 在职认证  发表于 2012-4-7 12:44:54
  1. data input;
  2.         input code date meanri;
  3.         cards;
  4.         1 200602 0.036
  5.         2 200602 0.0068
  6.         3 200602 -0.0082
  7.         4 200602 0.025
  8.         5 200602 0.014
  9.         6 200602 0.017
  10.         1 200603 0.034
  11.         2 200603 0.0059
  12.         3 200603 -0.0078
  13.         4 200603 0.026
  14.         5 200603 0.018
  15.         6 200603 0.014
  16.         ;
  17. run;

  18. proc sql noprint;
  19.         create table output as
  20.         select a.*,(sum(a.meanri)-sum(b.meanri)*2)/3 as SMB from input a left join input b
  21.         on a.code=b.code-3 & a.date=b.date
  22.         group by a.date
  23.         order by a.date,a.code;
  24. quit;
复制代码

藤椅
sbjc1988 发表于 2012-4-7 12:58:36
freerunning_sky 发表于 2012-4-7 12:44
大神,能接着我的data factor3size1;
set factor3size;
by date;
往下做吗?我的数据比较大,那个我贴出来的只是很少的一部分。
谢谢大神了

板凳
chendonghui1987 发表于 2012-4-9 14:41:03
希望能帮到你
data work.a;
        input code date meanri;
        cards;
        1 200602 0.036
        2 200602 0.0068
        3 200602 -0.0082
        4 200602 0.025
        5 200602 0.014
        6 200602 0.017
        1 200603 0.034
        2 200603 0.0059
        3 200603 -0.0078
        4 200603 0.026
        5 200603 0.018
        6 200603 0.014
        ;
run;

/*首先确保数据根据日期分组只有count数为6的时候才能做下列操作*/
proc sql noprint;
        create table work.b as
                select *,
                        count(date) as cnt
                from work.a
                group by date
                having cnt = 6
                order by date,code;
quit;


/*计算最后smb值*/
data c(drop = smb1 smb2 cnt);
        set work.b;
        by date code;
        if code = 1 then do;
                smb1 = 0;
                smb2 = 0;
        end;

        if code in (1,2,3) then do;
                smb1 = smb1 + meanri;
                retain smb1;
        end;else if code in (4,5,6) then do;
                smb2 = smb2 +meanri;
                retain smb2;
        end;

        if code = 6 then do;
                smb = smb1/3 - smb2/3;
        end;
run;

/*拼接原表*/
proc sql noprint;
        create table work.tmp_final as
                select a.code,
                        a.date,
                        a.meanri,
                        b.smb
                from work.b as a,
                        (select date,
                                        smb
                                from work.c
                                where not missing(smb)
                                order by date) as b
                where a.date = b.date
                order by a.date,a.code;
quit;

报纸
sbjc1988 发表于 2012-4-10 21:13:26
chendonghui1987 发表于 2012-4-9 14:41
希望能帮到你
data work.a;
        input code date meanri;
谢谢大神!懂了!

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

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