楼主: 耕耘使者
24457 9

关于sas时间参数函数intnx [推广有奖]

贵宾

学术权威

39%

还不是VIP/贵宾

-

威望
4
论坛币
1812817 个
通用积分
148.0401
学术水平
109 点
热心指数
173 点
信用等级
87 点
经验
93394 点
帖子
4550
精华
0
在线时间
2845 小时
注册时间
2006-4-6
最后登录
2024-2-24

50论坛币
有人提出,
“d2=intnx('month','20nov2002'd,1);
变量d2的值就是20nov2002一个月以后的日期;20dec2002”
http://zhidao.baidu.com/question/158176372.html

我在一个程序中这样作,却出不来结果,程序见附件1.
我略作修改,变为d2=intnx('month','20nov2002'd,_n_+1);
结果便出来了,见附件2.
但并不是像他所说的开始时间是2002年12月,而是2003年1月。
为什么呢?,_n_+1究竟指往后拨1期,如从11月到12月,还是拨2期,由11月到下年1月?

附件1.doc

20 KB

附件2图.doc

24 KB

最佳答案

Actree 查看完整内容

我run了一下你的code, 并加了以下的code, 都是显示20dec2010, 所以你的code应该没有错。关于_N_+1, 如果是data step 第一次iteration, 就往前加1+1=2个月。你的format以前是monyy所以就只能显示1月2003 (不会精确到天数)。
关键词:时间参数 int question month Quest 函数 intnx 时间参数

本帖被以下文库推荐

沙发
Actree 发表于 2011-3-20 10:45:48 |只看作者 |坛友微信交流群
我run了一下你的code, 并加了以下的code, 都是显示20dec2010, 所以你的code应该没有错。
  1. proc print data=example2_2;
  2.         format time date9.
  3.         var time;
  4. run;
复制代码
关于_N_+1, 如果是data step 第一次iteration, 就往前加1+1=2个月。你的format以前是monyy所以就只能显示1月2003 (不会精确到天数)。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
hopewell + 1 + 1 + 1 我很赞同

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

使用道具

藤椅
Actree 发表于 2011-3-20 13:43:43 |只看作者 |坛友微信交流群
把这个run一下,应该出现正确答案:
  1. data time;
  2.         d2=intnx('month','20nov2002'd,1);
  3. run;

  4. proc print data=time;
  5.         format d2 date9.;
  6. run;
复制代码


我想可能你的其他code把d2的值给改了。

使用道具

板凳
baoaibaobao 发表于 2011-3-20 14:00:12 |只看作者 |坛友微信交流群
1、你把date的格式设置的不太合理,正如楼上设成date9.,就会显示全日月年。
2、intnx你这里设成了month,而且为1,所以d2的日期只能显示每个月的1号,即d2=01DEC2002,而不会是20DEC2002。
3、_n_是自动变量,表示观测的序号,如第一个观测_n_=1,表示为d2=intnx('month','20nov2002'd,_n_+1),这里_n_+1等于2,即d2=intnx('month','20nov2002'd,2),结果为01JAN2003,依次类推。
已有 1 人评分学术水平 热心指数 收起 理由
耕耘使者 + 1 + 1 我很赞同

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

报纸
耕耘使者 发表于 2011-3-21 22:13:10 |只看作者 |坛友微信交流群
谢谢,结束。

使用道具

地板
huangnuonan 发表于 2012-4-6 16:07:40 |只看作者 |坛友微信交流群
good!

使用道具

7
heidou1987 发表于 2012-6-10 18:03:50 |只看作者 |坛友微信交流群
讲的不错!

使用道具

8
apocalypse725 发表于 2013-12-5 15:20:59 |只看作者 |坛友微信交流群
是不是_n_k的k的值无论去正还是负都是往后拨?

使用道具

9
shenliang_111 发表于 2013-12-5 17:25:00 |只看作者 |坛友微信交流群
  1. *可以采用sameday参数
  2. data time;
  3.         d2=intnx('month','20nov2002'd,1,'sameday');
  4. run;
  5. proc print data=time;
  6.         format d2 date9.;
  7. run;
复制代码

使用道具

10
TDDHA 发表于 2017-10-20 16:09:11 |只看作者 |坛友微信交流群
是的,put(intnx("month",x,_n_-1);-1是这个月,+/-0是下一个月,+1是下两个月,以此类推

使用道具

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

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

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

GMT+8, 2024-4-28 20:12