楼主: royalty
5672 2

[原创博文] 请高手指点,SAS宏使用IF ELSE 判断取值问题 [推广有奖]

  • 0关注
  • 0粉丝

小学生

35%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
90 点
帖子
3
精华
0
在线时间
3 小时
注册时间
2009-5-19
最后登录
2012-2-2

楼主
royalty 发表于 2012-2-1 16:46:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
上市公司的年报最晚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')
二维码

扫码加我 拉你入群

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

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

关键词:else 高手指点 SAS宏 ELS LSE 上市公司 数据库 表达式 ERROR

沙发
zhangzachary 发表于 2012-2-1 17:12:58
宏环境不能直接用一些functions... 当我之前的没说,见楼下正解
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

藤椅
yunqingwang 在职认证  发表于 2012-2-1 17:34:58
%let Dyear = %substr(&chkDate,1,4);
%let Dmont =%sysfunc(inputn(%substr(&chkdate,5,2),2));

%WindFetch2(20110131)

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 17:50