- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 294 个
- 通用积分
- 2.0010
- 学术水平
- 13 点
- 热心指数
- 16 点
- 信用等级
- 13 点
- 经验
- 2473 点
- 帖子
- 112
- 精华
- 0
- 在线时间
- 330 小时
- 注册时间
- 2015-12-18
- 最后登录
- 2020-8-29
博士生
还不是VIP/贵宾
- 威望
- 0 级
- 论坛币
 - 294 个
- 通用积分
- 2.0010
- 学术水平
- 13 点
- 热心指数
- 16 点
- 信用等级
- 13 点
- 经验
- 2473 点
- 帖子
- 112
- 精华
- 0
- 在线时间
- 330 小时
- 注册时间
- 2015-12-18
- 最后登录
- 2020-8-29
 | 开心 2017-1-12 09:15:37 |
|---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
经管之家送您一份
应届毕业生专属福利!
求职就业群
感谢您参与论坛问题回答
经管之家送您两个论坛币!
+2 论坛币
- data actual;
- informat ytime yymmdd10. stime yymmdd10.;
- input ytime stime yvalue svalue;
- format ytime yymmdd10. stime yymmdd10.;
- month=month(stime);
- cards;
- 2016-01-28 2016-05-13 10000 1000
- 2016-01-28 2016-06-21 9000 1000
- 2016-01-28 2016-08-03 8000 5000
- 2016-01-28 2016-08-20 3000 3000
- ;
- /*生成一月份的末日*/
- data first_mori;
- informat ytime yymmdd10. etime yymmdd10.;
- input ytime etime;
- format ytime yymmdd10. etime yymmdd10.;
- cards;
- 2016-01-28 2016-01-31
- ;
- run;
- /*利用数组生成二月到十月的末日*/
- data mori(keep=ytime etime);
- ytime='28jan2016'd;
- ytime1='2016-01-28';/*假如提供的是字符型日期*/
- mori0=intnx('month',input(ytime1, anydtdte.),0,'e');
- array mori(*) mori1-mori11;
- do i=1 to dim(mori);/*数组下标不能从0开始*/
- mori(i)=intnx('month',input(ytime1, anydtdte.),i,'e');/*间隔i个月最后一天*/
- etime=mori(i);
- format ytime mori0 mori1-mori11 etime yymmdd10.;
- output;
- end;
- run;
- /*生成所有月份末日*/
- data allmori;
- set first_mori mori;
- month=month(etime);
- run;
- /*生成需要填补的每月末日*/
- proc sql;
- create table supplement as
- select ytime,etime
- from allmori where not exists
- (select *
- from actual
- where allmori.month=
- actual.month);
- run;
- /*月份相同的交集查询*/
- proc sql;
- create table month_intersect as
- select *
- from actual as a,
- allmori as b
- where a.month=b.month;
- quit;
- /*重命名为了后面的合并变量*/
- data supplement_1;
- set supplement(rename=(etime=stime));
- svalue=0;
- run;
- /*set语句纵向拼接数据集*/
- data youneed(drop=month);
- set actual supplement_1;
- run;
- proc sort data=youneed;by descending stime;run;
- /*retain函数复制上一条观测值,因为是之前是降序排序,相当于取下一条观测*/
- data youneed1(drop=yvalue);
- retain ytime stime yvalue1 svalue;
- set youneed;
- if yvalue^=. then yvalue1=yvalue;
- run;
- /*重命名换原你的变量名*/
- data youneed1;
- set youneed1(rename=(yvalue=yvalue1));
- run;
- /*最后升序排序一下,大功告成*/
- proc sort data=youneed1;by stime;run;
复制代码

扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
|
|
|