请选择 进入手机版 | 继续访问电脑版
楼主: windfeild
898 3

[问答] 请教一个日期加减问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

65%

还不是VIP/贵宾

-

威望
0
论坛币
17 个
通用积分
0.0003
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
170 点
帖子
14
精华
0
在线时间
45 小时
注册时间
2018-11-16
最后登录
2022-11-24

windfeild 发表于 2019-4-2 08:51:59 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
%let datef=%cmpres(%upcase(%superq(datef)));/*从页面获取起始年月的值*/
%let datef_kc = %sysfunc(intnx(month,&datef,12));
%let datee_kc = &datef;

data temp1;
        set xc0007(where=(T_YEARMONTH>="&datef_kc" and T_YEARMONTH<="&datee_kc" ));
run;

我在用户界面获取一个年月格式的日期,例如201903,然后要对这个日期进行月份的加减操作,把操作结果作为查询条件进行查询。intnx(month,&datef,12)减完以后应该是201803的,但是我输出的时候显示的是202253,而且查询结果也是不对的。请问是哪里出问题了呢,谢谢。

二维码

扫码加我 拉你入群

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

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

关键词:sysfunc upcase month super Where

windfeild 发表于 2019-4-2 13:47:43 |显示全部楼层 |坛友微信交流群
顶起来,麻烦各位帮忙看看,谢谢。

使用道具

xiaopingN 发表于 2019-4-3 23:30:42 |显示全部楼层 |坛友微信交流群
intnx function 里面的date 必须是SAS date, 如果不是则需要informat。你输入201903,没有infomat,被SAS认为是SAS  date,所以出来结果是202253。201903对应的日期是10/16/2512, 202523对应的日期是10/1/2513。注意是增加了12个月。减掉12个月要用“-12“。为什么不是整整12月?这是日期对齐的问题。把code 再加一个选项就可以了:intnx('month', 201903, 12, 'same')
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 + 2 + 2 + 2 精彩帖子

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

使用道具

windfeild 发表于 2019-4-4 15:52:05 |显示全部楼层 |坛友微信交流群
xiaopingN 发表于 2019-4-3 23:30
intnx function 里面的date 必须是SAS date, 如果不是则需要informat。你输入201903,没有infomat,被SAS认 ...
谢谢回复。
我使用您的方法还是不行。

我当前的解决方案是先把datef转换为日期格式,再进行加减计算,计算完毕再转回字符串。
data _null_;
format date datef1 yymmn6.;
attrib datef_ck length=$20.;
attrib datee_ck length=$20.;
date = input("&datef",yymmn6.);
datef1= intnx('month',date,-12);
datef_kc= put(datef1,yymmn6.);
datee_kc=put(date,yymmn6.);

call symput('datee_kc',datee_kc);
call symput('datef_kc',datef_kc);
run;

使用道具

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

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

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

GMT+8, 2024-3-28 20:35