经管之家App
让优质教育人人可得
立即打开
全部版块
我的主页
›
论坛
›
数据科学与人工智能
›
数据分析与数据科学
›
SAS专版
一个macro 不知道哪里不对
楼主
ybhk
1399
2
收藏
2016-07-26
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的条件,为什么?谢谢
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
全部回复
沙发
吕小布韦
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 先执行
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
相关推荐
SAS Macro
SAS Macro处理求助
用macro有啥优点?
向各位大大请教 SAS MACRO 问题
展开,折叠macro
关于macro的一个问题
sas macro
sas 9.3里的macro自动调用问题
如何用macro实现?
一个macro 函数解析问题
栏目导航
SAS专版
微观经济学
休闲灌水
一带一路
马克思主义经济学
会计与财务管理
热门文章
CDA 数据分析师:特征处理核心指南
全球企业社会责任报告数据
投资人与创始人互坑套路
自己整理的私募股权投资实操手册。
全球能源转型展望2025—全球和区域预测至20 ...
海外资管机构赴上海投资指南(2025版)
2031年全球变频抽油烟机市场规模将接近167. ...
understanding climate change perceptions ...
中国金融生成式AI多模态内容鉴伪与安全防御 ...
世界机器人2025年报告 World Robotics 2025
推荐文章
AI狂潮席卷学术圈,不会编程也能打造专属智 ...
10月重磅来袭|《打造Coze/Dify专属学术智能 ...
最快1年拿证,学费不足5W!热门美国人工智能 ...
关于如何利用文献的若干建议
关于学术研究和论文发表的一些建议
关于科研中如何学习基础知识的一些建议 (一 ...
一个自编的经济学建模小案例 --写给授课本科 ...
AI智能体赋能教学改革: 全国AI教育教学应用 ...
2025中国AIoT产业全景图谱报告-406页
关于文献求助的一些建议
说点什么
分享
微信
QQ空间
QQ
微博
扫码加好友,拉您进群
各岗位、行业、专业交流群