全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1911 4
2018-09-20
同事离职了继承了一段代码,无奈刚学sas实在看不懂。。百度也百度不出来。。求各位大神解释~~无比感恩~~

data _null_;     /*_null_ : 不创建数据集*/
       yyyymmdd=sum(year(&dte.)*10000,month(&dte.)*100, day(&dte.));
       Last_yyyymmdd=sum(year(&last_month_dte.)*10000,month(&last_month_dte.)*100, day(&last_month_dte.));
       ymd=compress(put(yyyymmdd,8.));   
       ym=compress(put(sum(year(&dte.)*100,month(&dte.)),6.));
       ym_n=sum(year(&dte.)*100,month(&dte.));
       last_ymd=compress(put(Last_yyyymmdd,8.));
       last_ym=compress(put(sum(year(&last_month_dte.)*100,month(&last_month_dte.)),6.));

       call symput('ymd',ymd);
       call symput('ym',ym);
       call symput('last_ymd',last_ymd);   
       call symput('last_ym',last_ym);
       call symput('ym_n',ym_n);
run;
二维码

扫码加我 拉你入群

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

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

全部回复
2018-9-21 11:09:15
找一找前面是否定义过一个macro,就是用&dte.解析的那个。不然看不明白。
二维码

扫码加我 拉你入群

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

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

2018-9-21 14:42:01
steven_1017 发表于 2018-9-21 11:09
找一找前面是否定义过一个macro,就是用&dte.解析的那个。不然看不明白。
上一个部分就是这些了:

%let dte='31aug2018'd;
%let last3y_dte='01aug2015'd;
%let last_month_dte=mdy(month(&dte.),1,year(&dte.))-1;
二维码

扫码加我 拉你入群

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

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

2018-9-22 07:22:54
data _null_;     /*_null_ : 不创建数据集*/
       yyyymmdd=sum(year(&dte.)*10000,month(&dte.)*100, day(&dte.));
/*此处的yyyymmdd = 20180831*/
       Last_yyyymmdd=sum(year(&last_month_dte.)*10000,month(&last_month_dte.)*100, day(&last_month_dte.));
/*此处last_yyyymmdd = 20150801*/
       ymd=compress(put(yyyymmdd,8.));   
/*用put转为character,compress去掉blanks,ymd = ‘20180831’*/
       ym=compress(put(sum(year(&dte.)*100,month(&dte.)),6.));
/*ym = ‘201808’*/
       ym_n=sum(year(&dte.)*100,month(&dte.));
/*ym_n = 201808*/
       last_ymd=compress(put(Last_yyyymmdd,8.));
/*与上面的put、compress一样,last_ymd = '20150801'*/
       last_ym=compress(put(sum(year(&last_month_dte.)*100,month(&last_month_dte.)),6.));
/*last_ym = '201508'*/

       call symput('ymd',ymd);
       call symput('ym',ym);
       call symput('last_ymd',last_ymd);   
       call symput('last_ym',last_ym);
/*call symput将ym, ymd, last_ym, last_ymd等character数据赋值给macro变量,例如call symput('ym',ym);相当于%let ym = '201808'*/
       call symput('ym_n',ym_n);
/*此处会给出note,因为ym_n是numeric类型,会出现类型转换*/
run;
二维码

扫码加我 拉你入群

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

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

2018-9-25 17:22:07
steven_1017 发表于 2018-9-22 07:22
data _null_;     /*_null_ : 不创建数据集*/
       yyyymmdd=sum(year(&dte.)*10000,month(&dte.)*100,  ...
感恩大神!!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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