楼主: liu022
14278 12

SAS中表示月份的函数或者格式 [推广有奖]

  • 0关注
  • 6粉丝

已卖:181份资源

讲师

64%

还不是VIP/贵宾

-

威望
0
论坛币
879 个
通用积分
7.4013
学术水平
23 点
热心指数
18 点
信用等级
21 点
经验
3667 点
帖子
430
精华
1
在线时间
375 小时
注册时间
2007-5-21
最后登录
2025-10-22

楼主
liu022 发表于 2012-9-9 16:56:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好!

      我最近碰到了一个问题,就是在SAS中如何表示年月,而不是年月日。例如:我表达2012-02,表示2012年2月,我能够像日期那样进行加减。比如往后数9个月,能够得到2011-05。即:这种表达是可加减的。设y=2012-02, y-5=2011-05

      如果没有那样的函数,请问SAS里面能否像C++里面直接定义一个类来实现这个功能?如果可以,请问应该如何做?

       谢谢各位老师!
二维码

扫码加我 拉你入群

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

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

关键词:大家好 年月日 如何 年月日

沙发
可~乐 发表于 2012-9-9 20:20:21
  1. data test;
  2. input time yymmn6.;
  3. date=time-1;
  4. format date yymmd7. time yymmd7.;
  5. cards;
  6. 201201
  7. 201202
  8. 201203
  9. 201204
  10. 201205
  11. ;
  12. run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
firstknife + 3 + 3 + 3 + 3 精彩帖子

总评分: 论坛币 + 3  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
liu022 发表于 2012-9-9 21:55:50
可~乐 发表于 2012-9-9 20:20
谢谢老师!请问有没有能够直接截取年和月的函数呢?
例如:2012-01-01,能够将该日期转为2012-01,并且也是您上面给出的time的那种时间类型。这样的话就很方便。

我下面的代码就做不到我想要的结果
data a;
format date yymmdd10.;
date=mdy(1,2,2001);
run;

data a;
set a;
format time yymmn7.;
time=date-1;
run;

还麻烦老师指导!谢谢!

板凳
可~乐 发表于 2012-9-9 22:08:47
  1. data a;
  2. format date yymmdd10.;
  3. date=mdy(1,2,2012);
  4. yymm=compress(year(date)||month(date));
  5. time=input(yymm,yymmn6.);
  6. date1=time-1;
  7. format         date1 yymmd7.;
  8. run;
复制代码

报纸
liu022 发表于 2012-9-9 22:11:18
可~乐 发表于 2012-9-9 22:08
太感谢老师了!您解决了我的一个大问题~大牛!!!

地板
可~乐 发表于 2012-9-9 22:30:11
liu022 发表于 2012-9-9 22:11
太感谢老师了!您解决了我的一个大问题~大牛!!!
不敢当~~~

7
webgu 发表于 2012-9-9 22:50:37
  1. data a;
  2. format date yymmdd10.  time yymmd7. date1 yymmd7.;
  3. date=mdy(1,2,2001);
  4. time=input(put(date,yymmn6.),yymmn6.);
  5. date1=time-1;
  6. run;
复制代码
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

8
lee_d_x 发表于 2012-9-10 15:07:14
不错,谢谢分享

9
liu022 发表于 2012-9-11 23:28:16
webgu 发表于 2012-9-9 22:50
谢谢老师!

10
liu022 发表于 2012-9-11 23:40:58
可~乐 发表于 2012-9-9 22:08
再请问一下老师,这个还是不对。

如果我先生成了一个时间表,然后在通过循环的方式找到过去3个月。

data dailyreturn;
set dailyreturn;
yymm=compress(year(date)||month(date));
month=input(yymm,yymmn6.);
format month yymmd7.;
keep stkcd date month return;
run;

proc sql;
create table timetable as
select distinct stkcd,month from dailyreturn;
quit;

%let trd_prd=3;
data tt;
set timetable;
format t_month yymmn6.;
do i=1 to &trd_prd.;
t_month=month-i;
output;
end;
run;

这样子的结果就是:例如month=199404对应的三个t_month都是199403.

请问错在什么地方?谢谢!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-11 15:05