经管之家App
让优质教育人人可得
立即打开
全部版块
我的主页
›
论坛
›
数据科学与人工智能
›
数据分析与数据科学
›
SAS专版
一个macro 不知道哪里不对
楼主
ybhk
1464
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专版
计量经济学与统计软件
爱问频道
经管文库(原现金交易版)
学道会
stata专版
热门文章
表格结构数据特征与CDA数据分析师:精准适配 ...
新宏观丨豆包,传统经济学与商学对全球性债 ...
几何(第五卷)[法] M. 贝尔热
几何(第四卷)[法] M. 贝尔热
问卷填写,每份50个论坛币
【中国电信】2025年云计算研究白皮书
奇瑞QQ焕新归来
房地产行业:2026年,年轻人应该先买车还是 ...
普华永道 - 中国影响力报告2025
【24更新,自用整理!】2007-2024省级环境保护 ...
推荐文章
2026JG学术冬训营:从Stata初高到Python机器 ...
【必看】【本版版规,欢迎发悬赏贴求助】
26年寒假天津站|Gemini论文写作&数据分析 ...
关于如何利用文献的若干建议
关于学术研究和论文发表的一些建议
关于科研中如何学习基础知识的一些建议 (一 ...
一个自编的经济学建模小案例 --写给授课本科 ...
AI智能体赋能教学改革: 全国AI教育教学应用 ...
2025中国AIoT产业全景图谱报告-406页
关于文献求助的一些建议
说点什么
分享
微信
QQ空间
QQ
微博
扫码加好友,拉您进群
各岗位、行业、专业交流群