全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1374 7
2013-09-08

宏部分如下:

%macro add_months(month, a);

       %local y m;

       %let y = %eval(&month / 100);

       %let m = %eval(&y * 12 + &month - &y * 100 - 1 + &a);

       %let y = %eval(&m / 12);

       %let m = %eval(&m - &y * 12 + 1);

       %local r;

       %if(&y < 10) %then %let r = 0%eval(&y * 100 + &m);

       %else %let r = %eval(&y * 100 + &m);

       &r.

%mend;


data test;
x=%add_months(201312,1);
run;

希望返回宏变量r的值, 即x=201401,
有以下疑问:
1、我的盗版sas没问题,但是在企业版上运行就报错。

2、单机版上&r.后面加“;”,会报错,为什么?

3、如果要返回多个值该如何处理,如返回r和m



二维码

扫码加我 拉你入群

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

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

全部回复
2013-9-9 09:40:36
顺便说下,我用的是港版(企业版),好像很多语法和之前用的大陆版都有点微小的差异
二维码

扫码加我 拉你入群

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

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

2013-9-9 10:43:04
这种具有返回值的macro,最后的返回值是不要加分号的
这种宏我用的很少,我都不太清楚具体的机理是什么
另外多个返回值肯定是不行的
其他的语言一般也不支持,要想返回多个值都要用返回向量来处理
SAS的话估计就更不行了
二维码

扫码加我 拉你入群

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

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

2013-9-10 21:35:32
playmore 发表于 2013-9-9 10:43
这种具有返回值的macro,最后的返回值是不要加分号的
这种宏我用的很少,我都不太清楚具体的机理是什么
另 ...
多谢,
企业版报错是怎么回事呢?求解答
二维码

扫码加我 拉你入群

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

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

2013-9-11 08:16:39
dy21cn 发表于 2013-9-10 21:35
多谢,
企业版报错是怎么回事呢?求解答
嗯,对我等用D版的人来说
你的问题完全不明白啊
二维码

扫码加我 拉你入群

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

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

2013-9-11 16:09:23
2. &r.后面加“;” 肯定会报错的。“;”让SAS认为前面的是个完整的语句,则编译器会直接将&r.当做一条语句来解读了。 不加分号,&r. 就仅仅代表一个宏变量来进行解读,在外部宏环境继续被调用。

3. 多个返回值这个很诱惑喔,我建议你的宏可以定义一个require宏参数,来判断返回几个值;另外%macro add_months(month=, a=);是很好的选择,更加灵活。多返回值的话,建议用诸如&r.|&m.来进行结尾,最后对抛出的结果用%do %while(&mass. ne) 配合 %scan来截取一下。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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