请选择 进入手机版 | 继续访问电脑版
楼主: ybhk
1151 2

一个macro 不知道哪里不对 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

2%

还不是VIP/贵宾

-

威望
0
论坛币
39 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1115 点
帖子
84
精华
0
在线时间
94 小时
注册时间
2012-6-2
最后登录
2017-10-22

ybhk 发表于 2016-7-26 17:49:15 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

data test;
input x y;
cards;
1  11
1 22
2 22
3 33
4 44
5 55
;
run;
%macro a1;
data test2;
set test;
where %if x=1 %then y<20;
%else y>20;;
run;
%mend;

%a1
结果test2里面只有test1中的后5条记录,只之执行了y>20的条件,没有根据x的取值来选择性的执行Y的条件,为什么?谢谢


二维码

扫码加我 拉你入群

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

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

关键词:Macro acr CRO Mac 不知道 where

吕小布韦 发表于 2016-7-26 20:10:22 |显示全部楼层 |坛友微信交流群
因为 %if %then 是宏语句, 里面对应的条件应该是用宏变量来判定, 运行程序的时候, 先对宏语句进行编译, 这时候 还没开始读数据呢, 所以x=1这个条件是无法判定的.

如果仅针对这个语句的规则, 建议改为:
where (x=1 and y<20) or (x^=1 and y>20);
这样不使用宏语句.

使用道具

ifendo 发表于 2016-7-26 23:23:10 |显示全部楼层 |坛友微信交流群
同意楼上
在宏里,宏语句始终是比data step 语句先执行的,所以%if x=1 %then y <20 %else 始终是比set test 先执行的,此时x还没有赋值,所以执行的是%else 部分
data test;
input x y;
cards;
1  11
1 22
2 22
3 33
4 44
5 55
;
run;
%macro a1;
data test2;
set test;
where %if x=1 %then %str(y>20;);
%else %str(y< 20;); *这里换了个顺序;
run;i%mend;

%a1;

这样调整下,依然是%else 后的 y < 20 先执行

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-18 16:52