全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2934 4
2015-07-13
%macro dealMoney(money);
        tmp=0;
        %if (find(&money,'以下')) %then tmp=1;
        %if (find(&money,'以上')) %then tmp=2;
        &money = compress(&money,'以下');
        &money = compress(&money,'以上');

        %if tmp=1 %then &money=&money-1;
        %if tmp=2 %then &money=&money+1;
%mend dealMoney;

data salary;
        salary="5000以下";
        if salary^="" then
                do;
                        %dealMoney(salary)
                end;
run;

提示:ERROR: 需要的操作符在以下表达式中没有找到: (find(&money,'以下'))

求大大帮助

二维码

扫码加我 拉你入群

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

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

全部回复
2015-7-13 14:08:06
%index
不对,你好像有些混淆了宏语句和data语句的运行方式;%if 下的判断条件是需要用宏语句层面的东西来带动的。

%if &aaa. = bbb %then ...

%let ccc = %str(aaa = 1);
if &ccc. then ...

--------------------------------------

你的%if和%then好像都不需要用%
二维码

扫码加我 拉你入群

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

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

2015-7-13 15:42:07
感谢,但是find查找还是不行find(&money,'以下'),改成一个字符的字符串就好了find(&money,'下')
二维码

扫码加我 拉你入群

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

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

2015-7-13 20:37:28
Wo_si_鍕 发表于 2015-7-13 15:42
感谢,但是find查找还是不行find(&money,'以下'),改成一个字符的字符串就好了find(&money,'下')
不可能啊,应该还是不行的,在宏语句直接用sas 的函数,是要用%sysfunc() 的,类似 %if %sysfunc(find(&money,'以下')) %then %do;
二维码

扫码加我 拉你入群

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

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

2015-7-14 13:40:54
苹果叶 发表于 2015-7-13 20:37
不可能啊,应该还是不行的,在宏语句直接用sas 的函数,是要用%sysfunc() 的,类似 %if %sysfunc(find(&m ...
学习了
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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