全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1251 3
2019-04-02
%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,而且查询结果也是不对的。请问是哪里出问题了呢,谢谢。

二维码

扫码加我 拉你入群

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

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

全部回复
2019-4-2 13:47:43
顶起来,麻烦各位帮忙看看,谢谢。
二维码

扫码加我 拉你入群

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

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

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')
二维码

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群