全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5656 2
2012-02-01
上市公司的年报最晚4月底发布;半年报最晚8月底发布,数据库中报告期都是6月底和12月底。
为了模拟真实的环境,需要在取某天的财务数据时,进行修改日期以便于在Sql中调用。
比如 2011-1-31 ,修改为  2010-6-30;2011-5-12,修改为 2010-12-31;2011-10-12,修改为 2011-6-30;
如何利用SAS宏实现这个转换呢?我试了很久,总是报错:
ERROR: 需要的操作符在以下表达式中没有找到: &Dmonth <= 4

请高手指点:

%macro WindFetch2(chkDate);
/*Below is Financial indicators 1158*/
%let Dyear = substr(&chkDate,1,4);
%let Dmonth = input(substr(&chkDate,5,2),2.);
%if &Dmonth <= 4 %then %let dd=(&dyear-1)!!'0630';
%else %if &Dmonth <= 8 %then %let dd=(&dyear-1)!!'1231';
%else %let dd= &dyear !!'0630';

proc sql;  
create table b as
select b.F4_1158,b.F5_1158,b.F3_1158,b.F9_1158
from wind.tb_object_1090 as a,wind.tb_object_1158 as b
where a.OB_REVISIONS_1090=b.F1_1158 and a.F4_1090='A'
and a.F16_1090='000002' and b.F3_1158=&dd
order by b.F3_1158;
quit;
%mend;

%WindFetch2('20110131')
二维码

扫码加我 拉你入群

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

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

全部回复
2012-2-1 17:12:58
宏环境不能直接用一些functions... 当我之前的没说,见楼下正解
二维码

扫码加我 拉你入群

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

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

2012-2-1 17:34:58
%let Dyear = %substr(&chkDate,1,4);
%let Dmont =%sysfunc(inputn(%substr(&chkdate,5,2),2));

%WindFetch2(20110131)

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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