楼主: 徐金池
1951 7

求助大神,用sas计算每个月的市净率 [推广有奖]

  • 1关注
  • 2粉丝

已卖:4份资源

硕士生

78%

还不是VIP/贵宾

-

威望
0
论坛币
37 个
通用积分
1.0008
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
21740 点
帖子
121
精华
0
在线时间
238 小时
注册时间
2011-3-24
最后登录
2020-7-19

楼主
徐金池 发表于 2013-8-27 14:39:14 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
已知(1)市净率每季度更新一次;
       (2)市净率的每月更新公式=(本月末股票总市值/上季末股票总市值)*市净率;季末股票总市值为该季度最后一个月的月末股票总市值; (即上季末股票总市值为上一季度结束月份的股票的总市值)
       (3)下列数据中,stkcd为股票代码,pb为市净率,msmvttl为月末股票总市值;
       (4)如数据集所示,12月1月2月为第一个季度3月4月5月为第二个季度6月7月8月为第三个季度9月10月11月为第四个季度;
data a;
input stkcd date msmvttl pb;
cards;
1 199312 6000 2
1 199401 6300 2
1 199402 6200 2
1 199403 6000 3
1 199404 6400 3
1 199405 6700 3
1 199406 7000 5
1 199407 6500 5
1 199408 6800 5
1 199409 7100 2
1 199410 6750 2
1 199411 6000 2
1 199412 6000 2
1 199501 6300 2
1 199502 6200 2
1 199503 6000 3
1 199504 6400 3
1 199505 6700 3
1 199506 7000 5
1 199507 6500 5
1 199508 6800 5
1 199509 7100 2
1 199510 6750 2
1 199511 6000 2
3 199312 6000 2
3 199401 6300 2
3 199402 6200 2
3 199403 6000 3
3 199404 6400 3
3 199405 6700 3
3 199406 7000 5
3 199407 6500 5
3 199408 6800 5
3 199409 7100 2
3 199410 6750 2
3 199411 6000 2
3 199412 6000 2
3 199501 6300 2
3 199502 6200 2
3 199503 6000 3
3 199504 6400 3
3 199505 6700 3
3 199506 7000 5
3 199507 6500 5
3 199508 6800 5
3 199509 7100 2
3 199510 6750 2
3 199511 6000 2
;
run;
二维码

扫码加我 拉你入群

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

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

关键词:求助大神 市净率 stkcd cards Input 市净率

沙发
akakak123 发表于 2013-8-28 15:34:09
data b;                                                                                                                                 
set a;                                                                                                                                 
x=substr(left(date),5,2);                                                                                                               
if x in (12,01,02) then y=1;                                                                                                            
if x in (03,04,05) then y=2;                                                                                                            
if x in (06,07,08) then y=3;                                                                                                            
if x in (09,10,11) then y=4;                                                                                                            
year=substr(left(date),1,4);                                                                                                            
if x =12 then year=year+1;                                                                                                              
jidu=trim(left(stkcd))||trim(left(year))||trim(left(y));                                                                                
run;                                                                                                                                    
proc transpose data=b out=c prefix=V;                                                                                                   
    var msmvttl;                                                                                                                        
    by jidu;                                                                                                                           
run;                                                                                                                                    
proc transpose data=b out=c1 prefix=p;                                                                                                  
    var pb;                                                                                                                             
    by jidu;                                                                                                                           
run;                                                                                                                                    
data d;                                                                                                                                 
merge c c1;                                                                                                                             
by jidu;                                                                                                                                
summsm = sum(of v1-v3);                                                                                                                 
sumpb = sum(of p1-p3);                                                                                                                  
lagmsm=lag(summsm);                                                                                                                     
lagsumpb=lag(sumpb);                                                                                                                    
keep jidu summsm sumpb lagmsm lagsumpb;                                                                                                
run;                                                                                                                                    
                                                                                                                                       
                                                                                                                                       
                                                                                                                                       
                                                                                                                                       
data e;                                                                                                                                 
set d;                                                                                                                                 
z =dif(substr(jidu,1,1));                                                                                                               
if z^=0  then lagmsm=. ;                                                                                                               
if z^=0  then  lagsumpb=. ;                                                                                                            
run;                                                                                                                                    
                                                                                                                                       
                                                                                                                                       
data fin;                                                                                                                              
merge b e;                                                                                                                              
by jidu;                                                                                                                                
keep stkcd date msmvttl pb lagmsm lagsumpb;                                                                                             
run;                                                                                                                                    
data fa;                                                                                                                                
set fin;                                                                                                                                
gengxin =  (msmvttl/lagmsm)*lagsumpb;                                                                                                   
run;     

藤椅
akakak123 发表于 2013-8-28 15:35:27
data fin;                                                                                                                              
merge b e;                                                                                                                              
by jidu;                                                                                                                                
keep stkcd date msmvttl pb lagmsm lagsumpb;                                                                                             
run;                                                                                                                                    
data fa;                                                                                                                                
set fin;                                                                                                                                
gengxin =  (msmvttl/lagmsm)*lagsumpb;                                                                                                   
run;     

板凳
徐金池 发表于 2013-8-30 15:36:31
akakak123 发表于 2013-8-28 15:34
data b;                                                                                              ...
大神,感谢你的编程,我程序的数据有20多万个观测,而且参数也比这个多得多,不知道你能不能把你的想法回复我一下,你编得程序有的地方我不是很懂,万分感谢

报纸
akakak123 发表于 2013-8-30 16:13:53
初学SAS方法比较笨。。。。。
data b
把月份按季度归类 把stkcd变成stkcd年季度的格式
data d
算出每个月的值,在用lag返回上个月的值
data e
由于是返回上一个值,需要把下一个stkcd的第一条记录设为空

最后就把上个月的值合并到这个月后面就算出来了

地板
徐金池 发表于 2013-8-30 16:54:01
第一jidu=trim(left(stkcd))||trim(left(year))||trim(left(y)); ?
第二if z^=0  then lagmsm=. ; 中 z^=0 是什么意思?这一步是什么意思?
第三z =dif(substr(jidu,1,1));?
这三步是什么意思啊,有点儿疑惑

7
徐金池 发表于 2013-8-30 20:37:42
akakak123 发表于 2013-8-28 15:34
data b;                                                                                              ...
谢谢你了,因为我表述不是太明白所以让你误解了题目第二个已知条件的意思,原来想问明白你程序的构成就是不想太麻烦你,结果还是没有理解你的意思

8
徐金池 发表于 2013-8-30 21:04:00
akakak123 发表于 2013-8-28 15:35
data fin;                                                                                            ...
我挂了一个100论坛币的求助帖,大神如果想继续解答可以直接回复那个帖子

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

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