请选择 进入手机版 | 继续访问电脑版
楼主: cathyzhyq
2181 5

用SAS实现交易日和日历日的时间轴对应 [推广有奖]

  • 0关注
  • 0粉丝

副教授

63%

还不是VIP/贵宾

-

威望
0
论坛币
54 个
通用积分
18.2002
学术水平
1 点
热心指数
0 点
信用等级
0 点
经验
19843 点
帖子
446
精华
0
在线时间
344 小时
注册时间
2013-5-26
最后登录
2024-1-26

cathyzhyq 发表于 2017-1-23 14:17:15 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好,现在有一个问题想要请教。假如分析师在非交易日出具了一份报告,而我需要得到该报告出具日对应的交易日(也就是离报告出具日最近的交易日),那么程序要怎么做。
或者说,我现在有一列数                   (希望得到的)
1                                          1
2                                          2
3                                          3
blank                                      3
blank                                      3  
blank                                      4
4                                          4
5                                          5
6                                          6
blank                                      6   
7                                          7
8                                          8
blank                                      8
blank                                      8
blank                                      8
blank                                      9
blank                                      9  
9                                          9
10                                         10
……                                       ……
请问在SAS或者STATA里我应该怎样编程呢?
谢谢啦~~


二维码

扫码加我 拉你入群

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

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

关键词:交易日 blank Stata blan tata 交易日 日历

wwang111 发表于 2017-1-23 14:34:10 |显示全部楼层 |坛友微信交流群
data test;
input num @@;
cards;
1 2 3 . . . 4 5 6 . 7 8 . . . . 9 10
;

data wanted;
  set test;
  retain _num;
  if num ne . then _num=num;
  else num=_num;
  drop _num;
run;

使用道具

cathyzhyq 发表于 2017-1-23 14:47:59 |显示全部楼层 |坛友微信交流群
wwang111 发表于 2017-1-23 14:34
data test;
input num @@;
cards;
多谢啦^_^
但这个做出来的是把每一个空格处都填上上一条的值,有没有什么办法可以把每一个空格处都填上离其最近的非空格值呢,比如,8,blank,blank,blank,blank,blank,9,10得到8,8,8,8,9,9,9,10呢?
如果blank是偶数个,那么正好一半blank同前,一半blank同后;
如果blank是奇数个,那么最中间的blank同前同后均可。
太感谢啦~~

使用道具

wwang111 发表于 2017-1-23 15:23:48 |显示全部楼层 |坛友微信交流群
sorry,开始没看清楚你的例子;
试试这个,如果blank是奇数个,在test2那一步,中间的同前用ceil函数,同后用int函数:

data test;
input num @@;
cards;
1 2 3 . . . . 4 5 6 . 7 8 . . . . . 9 10
;

data test1;
  set test;
  obs=_n_;
  lagnum=lag(num);
  if nmiss(num,lagnum)=1 then grp+1;
  if num ne . then n=0;
  else n+1;
  drop lagnum;
run;

proc sql;
create table test2 as
select *, ceil(max(n)/2) as sn
from test1
group by grp
order by obs;
quit;

data test3;
set test2;
retain _num;
if num ne . then _num=num;
else if num=. and n<=sn then num=_num;
drop _num;
run;

proc sort data=test3;
by descending obs;
run;

data test4;
set test3;
retain _num;
if num ne . then _num=num;
else num=_num;
drop _num;
run;

proc sort data=test4(keep=num obs) out=wanted;
by obs;
run;



使用道具

cathyzhyq 发表于 2017-1-23 15:54:59 |显示全部楼层 |坛友微信交流群
哇,太感谢了多谢大神啦^_^

使用道具

cathyzhyq 发表于 2017-1-23 15:55:22 |显示全部楼层 |坛友微信交流群
wwang111 发表于 2017-1-23 15:23
sorry,开始没看清楚你的例子;
试试这个,如果blank是奇数个,在test2那一步,中间的同前用ceil函数,同后 ...
哇,太感谢了多谢大神啦^_^

使用道具

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

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

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

GMT+8, 2024-4-16 14:33